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)};