common={}; var issave = false; common.spider={}; common.form={}; common.maskShow=function(title){ var change=function(){ if(title){ $("#maskTitle").text(title); }else{ $("#maskTitle").text("加载中"); } var width=$(window).width(); var height=$("body").height(); $(".mask>.box").css("left",(width-width*0.3)/2); $(".mask").removeClass("hide").css("height",height); } $(window).resize(function(){ change(); }); change(); } common.maskHide=function(){ $(".mask").addClass("hide"); $(window).unbind("resize"); } common.setActive=function(name){ $("ul.sidebar-menu li.active").removeClass("active"); $("ul.sidebar-menu li[data="+name+"]").addClass("active"); } common.menuActive=function(name){ // $("ul.sidebar-menu").tree(); $("ul.sidebar-menu").filter(".menu-open").removeClass("menu-open"); $("ul.sidebar-menu").filter(".active").removeClass("active"); var a; $("ul.sidebar-menu a").each(function(i){ if($(this).attr("href").endsWith(name)){ a=$(this) } }); if (!a) { return common.menuActive(name) } a.parent().addClass("active"); a.parent().parent().parent().addClass("active"); // a.parent().parent().parent().addClass("menu-open"); } common.form.isCheck=function(id,func){ var ischeck=true; $("#"+id+" [name]").each(function(){ if(this){ var value=$(this).prop("value"); var name=$(this).prop("name"); if(!value || value==""){ if(func){ func(this); }else{ ischeck=false; $(this).css("border-color","red"); $(this).attr("placeholder","此项不能为空") } }else{ if($(this).css("border-color")=="rgb(255, 0, 0)"){ $(this).css("border-color","#d2d6de"); } } } }) return ischeck; } common.form.serializeArray=function(id){ var serializeArray={}; var chromeArr = []; var rangeChromeArr = []; $("#"+id+" [name]").each(function(){ var name=$(this).prop("name"); var value=$(this).prop("value"); if($(this).get(0).tagName=="TEXTAREA" && $(this).attr("id")){ if($(this).attr("id").indexOf("Step1")>-1){ value=editor_1.getValue() }else if($(this).attr("id").indexOf("Step2")>-1){ value=editor_2.getValue() }else if($(this).attr("id").indexOf("Step3")>-1){ value=editor_3.getValue() }else if($(this).attr("id").indexOf("Stepre3")>-1){ value=editor_re3.getValue() } }else{ value=$(this).prop("value"); value=value?value:""; } //组合有序的chrome if(name.includes("Range.Chrome")){//循环动作 var rangeChromeMap = {}; rangeChromeMap["action"] = name.replace("Range.Chrome.",""); rangeChromeMap["param"] = value var selector_val = $(this).parents(".chrome-actions").find("[sel='"+name+".selector']").val(); if (selector_val) { rangeChromeMap["selector"]= selector_val } rangeChromeArr.push(rangeChromeMap); }else if (name.includes("Chrome")){//基础动作 var chromeMap = {}; chromeMap["action"] = name.replace("Chrome.",""); chromeMap["param"] = value var selector_val = $(this).parents(".chrome-actions").find("[sel='"+name+".selector']").val(); if (selector_val) { chromeMap["selector"]= selector_val } chromeArr.push(chromeMap); }else{ serializeArray[name]=value.trim(); } }); if (chromeArr.length > 0){ serializeArray[id+".Chrome"] = JSON.stringify(chromeArr); } if (rangeChromeArr.length > 0){ serializeArray[id+".RangeChrome"] = JSON.stringify(rangeChromeArr); } return serializeArray } common.form.submit=function(){} //js编辑器展示 common.spider.editjs=function (step) { $("#modal-js").modal("show"); setTimeout(() => { editor2_js.refresh(); editor3_js.refresh(); }, 500) } common.spider.initMirror=function() { editor_1 = CodeMirror.fromTextArea($("#Step1_mirror")[0], { theme:"solarized light", lineNumbers: true, indentUnit:4, smartIndent:true, indentWithTabs:true, extraKeys:{ "F11": function(cm) { cm.setOption("fullScreen", !cm.getOption("fullScreen")); }, "F10": function(cm) { var r=window.confirm("生成代码后原先的将会被覆盖,是否生成?") if(r){ $("a[for=Step1]").eq(0).trigger("click",["editor_1"]) } }, "F9":function(cm) { var str_tab = "\t".repeat(cm.getCursor().ch); var _keyWord = "something"; cm.replaceSelection(`if true then\n${str_tab}\treturn ${_keyWord}\n${str_tab}end`); }, "F8":function(cm){ var str_tab = "\t".repeat(cm.getCursor().ch); cm.replaceSelection(`local attachments = com.getFileAttachmentsArrayWithTag(data["href"],"dl","
"..data["contenthtml"].."
",false)\n${str_tab}if table.getn(attachments)>0 then\n\t\t${str_tab}data["projectinfo"]={\n\t\t${str_tab}["attachments"]=attachments\n\t${str_tab}}\n${str_tab}end`); }, "Esc": function(cm) { if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false); } } }); editor_2 = CodeMirror.fromTextArea($("#Step2_mirror")[0], { theme:"solarized light", lineNumbers: true, indentUnit:4, smartIndent:true, indentWithTabs:true, extraKeys:{ "F11": function(cm) { cm.setOption("fullScreen", !cm.getOption("fullScreen")); }, "F10": function(cm) { var r=window.confirm("生成代码后原先的将会被覆盖,是否生成?") if(r){ $("a[for=Step2]").eq(0).trigger("click",["editor_2"]) } }, "F9":function(cm) { var str_tab = "\t".repeat(cm.getCursor().ch); var _keyWord = "something"; cm.replaceSelection(`if true then\n${str_tab}\treturn ${_keyWord}\n${str_tab}end`); }, "F8":function(cm){ var str_tab = "\t".repeat(cm.getCursor().ch); cm.replaceSelection(`local attachments = com.getFileAttachmentsArrayWithTag(data["href"],"dl","
"..data["contenthtml"].."
",false)\n${str_tab}if table.getn(attachments)>0 then\n\t\t${str_tab}data["projectinfo"]={\n\t\t${str_tab}["attachments"]=attachments\n\t${str_tab}}\n${str_tab}end`); }, "Ctrl-F10":function (cm){ if (!luaIsChrome){ window.alert("非chrome爬虫,禁止使用chrome下载方法"); return } var regex = /{([^}]*)}/g; var str_tab = "\t".repeat(cm.getCursor().ch); var data = common.form.serializeArray("Step2"); var baseChromeActionsStr = data["Step2.Chrome"]; var luaText = `local timeout = 60\n${str_tab}local chromeTask = [[\n${str_tab}\t{\n${str_tab}\t\t`; var baseText = ``; var rangText = ``; var timesText = ``; if (baseChromeActionsStr){ var rangeChromeActionsStr = data["Step2.RangeChrome"]; var rangeTimes = data["Step2.RangeTimes"]; if(rangeChromeActionsStr) { if(!rangeTimes){ window.alert("未设置循环动作执行次数"); return; }else{ timesText = `${str_tab}"range-times":`+rangeTimes+`,\n${str_tab}${str_tab}` } //循环动作 var rangeChromeActionMapStr = rangeChromeActionsStr.substring(1,rangeChromeActionsStr.length - 1); var rangeChromeActionsStrArr = rangeChromeActionMapStr.match(regex); for (var i in rangeChromeActionsStrArr){ if (i == rangeChromeActionsStrArr.length -1){ rangText += rangeChromeActionsStrArr[i]+`\n${str_tab}\t`; }else{ rangText += rangeChromeActionsStrArr[i]+`,\n${str_tab}\t\t\t`; } } rangText = `"range-actions":[\n${str_tab}${str_tab}\t`+rangText+`\t]\n${str_tab}` } //基础动作 var baseChromeActionMapStr = baseChromeActionsStr.substring(1,baseChromeActionsStr.length - 1); var baseChromeActionsStrArr = baseChromeActionMapStr.match(regex); for (var i in baseChromeActionsStrArr){ var baseActionText = baseChromeActionsStrArr[i]; if (baseActionText.includes("navigate")){ baseActionText = `{"action":"navigate","param":"]]..href..[["}` } if (i == baseChromeActionsStrArr.length -1){ baseText += baseActionText+`\n${str_tab}\t`; }else{ baseText += baseActionText+`,\n${str_tab}\t\t\t`; } } if(rangText){ baseText = `"base-actions":[\n${str_tab}${str_tab}\t`+baseText+`\t],\n${str_tab}` }else{ baseText = `"base-actions":[\n${str_tab}${str_tab}\t`+baseText+`\t]\n${str_tab}` } }else{ //luaText += `添加基础执行动作\n${str_tab}\t`; window.alert("未设置基础循环动作"); return; } luaText += baseText + timesText + rangText + `\t}\n${str_tab}]]\n${str_tab}local contenthtmltable = downloadByChrome(timeout,chromeTask)` cm.replaceSelection(luaText); }, "Esc": function(cm) { if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false); } } }); editor_3 = CodeMirror.fromTextArea($("#Step3_mirror")[0], { theme:"solarized light", lineNumbers: true, indentUnit:4, smartIndent:true, indentWithTabs:true, extraKeys:{ "F11": function(cm) { cm.setOption("fullScreen", !cm.getOption("fullScreen")); }, "F10": function(cm) { var r=window.confirm("生成代码后原先的将会被覆盖,是否生成?") if(r){ $("a[for=Step3]").eq(0).trigger("click",["editor_3"]) } }, "F9":function(cm) { var str_tab = "\t".repeat(cm.getCursor().ch); var _keyWord = "something"; cm.replaceSelection(`if true then\n${str_tab}\treturn ${_keyWord}\n${str_tab}end`); }, "F8":function(cm){ var str_tab = "\t".repeat(cm.getCursor().ch); cm.replaceSelection(`local attachments = com.getFileAttachmentsArrayWithTag(data["href"],"dl","
"..data["contenthtml"].."
",false)\n${str_tab}if table.getn(attachments)>0 then\n\t\t${str_tab}data["projectinfo"]={\n\t\t${str_tab}["attachments"]=attachments\n\t${str_tab}}\n${str_tab}end`); }, "Ctrl-F10":function (cm){ if (!luaIsChrome){ window.alert("非chrome爬虫,禁止使用chrome下载方法"); return } var regex = /{([^}]*)}/g; var str_tab = "\t".repeat(cm.getCursor().ch); var data = common.form.serializeArray("Step3"); var baseChromeActionsStr = data["Step3.Chrome"]; var luaText = `local timeout = 60\n${str_tab}local chromeTask = [[\n${str_tab}\t{\n${str_tab}\t\t`; var baseText = ``; var rangText = ``; var timesText = ``; if (baseChromeActionsStr){ var rangeChromeActionsStr = data["Step3.RangeChrome"]; var rangeTimes = data["Step3.RangeTimes"]; if(rangeChromeActionsStr) { if(!rangeTimes){ window.alert("未设置循环动作执行次数"); return; }else{ timesText = `${str_tab}"range-times":`+rangeTimes+`,\n${str_tab}${str_tab}` } //循环动作 var rangeChromeActionMapStr = rangeChromeActionsStr.substring(1,rangeChromeActionsStr.length - 1); var rangeChromeActionsStrArr = rangeChromeActionMapStr.match(regex); for (var i in rangeChromeActionsStrArr){ if (i == rangeChromeActionsStrArr.length -1){ rangText += rangeChromeActionsStrArr[i]+`\n${str_tab}\t`; }else{ rangText += rangeChromeActionsStrArr[i]+`,\n${str_tab}\t\t\t`; } } rangText = `"range-actions":[\n${str_tab}${str_tab}\t`+rangText+`\t]\n${str_tab}` } //基础动作 var baseChromeActionMapStr = baseChromeActionsStr.substring(1,baseChromeActionsStr.length - 1); var baseChromeActionsStrArr = baseChromeActionMapStr.match(regex); for (var i in baseChromeActionsStrArr){ var baseActionText = baseChromeActionsStrArr[i]; if (baseActionText.includes("navigate")){ baseActionText = `{"action":"navigate","param":"]]..data["href"]..[["}` } if (i == baseChromeActionsStrArr.length -1){ baseText += baseActionText+`\n${str_tab}\t`; }else{ baseText += baseActionText+`,\n${str_tab}\t\t\t`; } } if(rangText){ baseText = `"base-actions":[\n${str_tab}${str_tab}\t`+baseText+`\t],\n${str_tab}` }else{ baseText = `"base-actions":[\n${str_tab}${str_tab}\t`+baseText+`\t]\n${str_tab}` } }else{ //luaText += `添加基础执行动作\n${str_tab}\t`; window.alert("未设置基础循环动作"); return; } luaText += baseText + timesText + rangText + `\t}\n${str_tab}]]\n${str_tab}local contenthtmltable = downloadByChrome(timeout,chromeTask)` cm.replaceSelection(luaText); }, "Esc": function(cm) { if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false); } } }); editor_re3 = CodeMirror.fromTextArea($("#stepre3_mirror")[0], { theme:"solarized light", lineNumbers: true, indentUnit:4, smartIndent:true, indentWithTabs:true }); editor_4 = CodeMirror.fromTextArea($("#testcontents")[0], { theme:"abcdef", lineNumbers: true, extraKeys:{ "F11": function(cm) { cm.setOption("fullScreen", !cm.getOption("fullScreen")); }, "Esc": function(cm) { if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false); } } }); editor_1.setSize("auto","auto"); editor_2.setSize("auto","auto"); editor_3.setSize("auto","auto"); editor_re3.setSize("auto","auto"); editor_4.setSize("auto","300"); } common.spider.setExpert=function(editor,text){ text=text.substr(text.indexOf("function ")); eval(editor+".setValue("+JSON.stringify(text, null, "\t")+")") } common.spider.guideActive=function(name,li){ $(".guide button.active").removeClass("active"); $(".guide button[data-mode="+name+"]").addClass("active"); var target=$(li).find("a").attr("href")+ " fieldset"; $(target).each(function(){ if(name==$(this).attr("data-mode")){ $(this).removeClass("hide"); }else{ $(this).addClass("hide") } }); } common.spider.model={} common.spider.getModel=function(func){ $.ajax({ url:"/center/model", method:"post", success:function(d){ common.spider.model=d; for(var name in d){ var option=$("") // select.append(option); // } var name=common.spider.json[i]; var option=$("") select.append(option); } modelbody.append(div.append(label).append(c_div.append(select))); }else if(model[k]=="城市") { var select = $("") select.attr("name", k); select.attr("id", k); modelbody.append(div.append(label).append(c_div.append(select))); }else if (model[k]=="区/县"){ var select = $("") select.attr("name", k); select.attr("id", k); modelbody.append(div.append(label).append(c_div.append(select))); }else{ var input=$(""); input.attr("name",k); // if(k == "district"){ // input.attr("disabled",true); // } input.attr("id",k); input.attr("placeholder",model[k]); modelbody.append(div.append(label).append(c_div.append(input))); } } $("#area").prepend('') if(models!=""){ if(typeof(models)!="object"){ models=JSON.parse(models); } for(var k in models){ if(p && k=="model"){ }else if(k=="city"){ getcity(models["area"],models[k]) if(models[k]!=""){ $("#"+k).prepend('') } }else if(k=="district"){ getdistrict(models["district"],models[k]) if(models[k]!=""){ $("#"+k).prepend('') } }else{ $("#"+k).val(models[k]); } } } } return true } function getcity(area,city){ cleardistrict(); $("#city").find("option").remove(); $("#city").append('') for(var i in areas[area]){ if (areas[area][i] != city){ $("#city").append('') } } // $.ajax({ // url:"/center/getCity", // method:"post", // data:{"area":area}, // success:function(r){ // for(var i in r){ // if(r[i]!=city){ // $("#city").append('') // } // } // // } // }) } function getdistrict(city,district){ cleardistrict(); for(var i in citys[city]){ if (citys[city][i] != district){ $("#district").append('') } } } function cleardistrict(){ $("#district").find("option").remove(); $("#district").append('') } common.spider.upstate=function(code){ if(!issave){ alert("请保存爬虫!") return } var id=$("#spiderCode").val(); showConfirm("是否提交?\n完成后将不能更改", function() { // common.spider.save_unnew(); $.get("/center/spider/upstate?state=1&code="+id,function(r){ if (r["istotask"]){ window.location.href = "/center/task/edit/"+r["taskid"]+"__2"; }else{ $(window).unbind('beforeunload'); window.location.href = "/center"; } }) }) } common.spider.save=function(a,b){ setCookieTime(code,"1",24*60*60)//含列表页异常任务爬虫编辑清空栏目名称和栏目地址 var base=common.form.serializeArray("baseinfo"); if(window.location.pathname=="/center/spider"){ $.get("/center/spider/isrepeat?code="+base["Base.SpiderCode"],function(r){ if(r=="y"){ var y=window.confirm("检测到您处于新建页面,爬虫代码已重复,确定覆盖已有爬虫?") if(!y){ return false } } }) } common.spider.save_unnew(); } common.spider.upload=function(code){ var url="/center/spider/upstate?state=3&code="+code; showConfirm("审核通过?", function() { common.maskShow("正在处理..."); $.get(url,function(res){ common.maskHide(); if(res["err"]==""){ showTip("处理成功",500,function(){}); window.location.href = "/center"; }else{ showMsg(res["err"],function(){}); } }) }); } common.spider.save_unnew=function(){ var base=common.form.serializeArray("baseinfo");//基本参数 var Step1=common.form.serializeArray("Step1");//发布时间 var Step2=common.form.serializeArray("Step2");//列表页 var Step3=common.form.serializeArray("Step3");//详情页 var Stepre3=common.form.serializeArray("Stepre3"); //设置types Step1["Step1.types"]=$("[href='#tab_1']").parent().attr("data-mode"); Step1["Step1.types"]=Step1["Step1.types"]=="guide"?"0":"1" var Step2_type = $("[href='#tab_2']").parent().attr("data-mode"); if (Step2_type === "chrome"){ Step1["Step2.types"]="2" }else if (Step2_type === "expert"){ Step1["Step2.types"]="1" }else if (Step2_type === "guide"){ Step1["Step2.types"]="0" } var Step3_type = $("[href='#tab_3']").parent().attr("data-mode"); if (Step3_type === "chrome"){ Step1["Step3.types"]="2" }else if (Step3_type === "expert"){ Step1["Step3.types"]="1" }else if (Step3_type === "guide"){ Step1["Step3.types"]="0" } Stepre3["StepRe3.Checked"] = $("#copyTab").prop('checked');//是否复制三级页 var all=$.extend({},base,Step1,Step2,Step3,Stepre3); $.ajax({ url:"/center/save", method:"post", data:all, async : false, success:function(r){ if (r["ok"]){ if (r["msg"]){ showMsg(r["msg"],function(){}); } issave = true; common.spider.saveTip("保存成功"); if(window.location.pathname=="/center/spider"){ $(window).unbind('beforeunload'); window.location.href="/center/spider/edit/"+r["code"]+"__"; } $(window).unbind('beforeunload'); }else{ showMsg(r["msg"],function(){}); } } }) } common.spider.saveTip=function(t){ var d=new Date(); t=t+" "+d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()+" "+d.getHours()+":"+(d.getMinutes()<10?"0"+d.getMinutes():d.getMinutes())+":"+(d.getSeconds()<10?"0"+d.getSeconds():d.getSeconds()); $(".callout-a").text(t); } common.passwords=function(){ if($("#passwords").parent().parent().hasClass("hide")){ $("#passwords").parent().parent().removeClass("hide"); return; }else{ var v=$("#passwords").val(); if(!v || v==""){ alert("密码不能为空") }else{ $.get("/center/password?password="+v,function(r){ alert(r); $("#passwords").parent().parent().addClass("hide"); }) window.location.href="/center/logout" } } } function setCookie(name,value){ var expdate = new Date(); //初始化时间 expdate.setTime(expdate.getTime() + 30 * 60 * 1000); //时间 document.cookie = name+"="+value+";expires="+expdate.toGMTString()+";path=/"; } function setCookieTime(name,value,t){ var expdate = new Date(); //初始化时间 expdate.setTime(expdate.getTime() + t * 1000); //时间 document.cookie = name+"="+value+";expires="+expdate.toGMTString()+";path=/"; } function getCookie(c_name){ if (document.cookie.length>0){ c_start=document.cookie.indexOf(c_name + "=") if (c_start!=-1){ c_start=c_start + c_name.length+1 c_end=document.cookie.indexOf(";",c_start) if (c_end==-1) c_end=document.cookie.length return unescape(document.cookie.substring(c_start,c_end)) } } return "" } function statusbox(){ if($(".checkstatusbox").is(":hidden")){ $(".checkstatusbox").removeClass("hide"); }else{ $(".checkstatusbox").addClass("hide"); } } common.spider.checkStatus=function(t,code){ var node = $(t).parent().find("input[type='radio']:checked").val() common.maskShow("正在测试,这可能需要一点时间"); $.get("/center/spider/pass?code="+code+"&node="+node,function(r){ if(r==null){ r=[false,false,false,false] showMsg("脚本解析失败!!",function(){}); } var allstatus=true; if(r[0]){ $("#status_base").removeClass("text-danger").addClass("text-success").text("已通过"); }else{ $("#status_base").removeClass("text-success").addClass("text-danger").text("未通过"); allstatus=false; } if(r[1]){ $("#status_time").removeClass("text-danger").addClass("text-success").text("已通过"); }else{ $("#status_time").removeClass("text-success").addClass("text-danger").text("未通过"); allstatus=false; } if(r[2]){ $("#status_list").removeClass("text-danger").addClass("text-success").text("已通过"); }else{ $("#status_list").removeClass("text-success").addClass("text-danger").text("未通过"); allstatus=false; } if(r[3]){ $("#status_content").removeClass("text-danger").addClass("text-success").text("已通过"); }else{ $("#status_content").removeClass("text-success").addClass("text-danger").text("未通过"); allstatus=false; } if(allstatus){ $("#status_all").removeClass("text-danger").addClass("text-success").text("已通过"); }else{ $("#status_all").removeClass("text-success").addClass("text-danger").text("未通过"); } $(".callout-a").text("下载请求:"+r[4]+"次,时间函数:"+r[5]+"次,列表函数:"+r[6]+"次 "+r[8]+"条信息,内容函数:"+r[7]+"次"); common.maskHide(); $("#jsonClick")[0].click(); //window.open("/center/spider/json"); //window.open("https://editor.qmx.top/center/spider/json"); }) } common.spider.checkTime=function(code){ $.ajax({ url:"/center/spider/checktime", method:"post", data:{"code":code}, success:function(b){ if(b){ showMsg("success",function(){}); ttable.ajax.reload( null, false ); } } }) } Date.prototype.format=function(format){var o={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),"S":this.getMilliseconds()};if(/(y+)/.test(format)){format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length))}for(var k in o){if(new RegExp("("+k+")").test(format)){format=format.replace(RegExp.$1,RegExp.$1.length==1?o[k]:("00"+o[k]).substr((""+o[k]).length))}}return format};function getDate(l){var date=new Date(l);pattern="yyyy-MM-dd hh:mm:ss";return date.format(pattern)};