|
@@ -1,6 +1,11 @@
|
|
//模板
|
|
//模板
|
|
-export const TemplateJsCode={
|
|
|
|
- ListJsCode:`
|
|
|
|
|
|
+export const TemplateJsCode = {
|
|
|
|
+ //列表页代码集合
|
|
|
|
+ ListJsCodes: [
|
|
|
|
+ {
|
|
|
|
+ "name": "模版1",
|
|
|
|
+ "tooltip": "基础模版",
|
|
|
|
+ "code": `
|
|
var ret = []
|
|
var ret = []
|
|
document.querySelectorAll("{{.ListItemCss}}").forEach((v, i) => {
|
|
document.querySelectorAll("{{.ListItemCss}}").forEach((v, i) => {
|
|
let item = {}
|
|
let item = {}
|
|
@@ -25,8 +30,72 @@ document.querySelectorAll("{{.ListItemCss}}").forEach((v, i) => {
|
|
})
|
|
})
|
|
ret
|
|
ret
|
|
`,
|
|
`,
|
|
- //执行JS代码
|
|
|
|
- ContentJsCode:`
|
|
|
|
|
|
+ }, {
|
|
|
|
+ "name": "模版2",
|
|
|
|
+ "tooltip": "发布日期需要加工,年月/日分开,需要拼装",
|
|
|
|
+ "code": `
|
|
|
|
+var ret = []
|
|
|
|
+document.querySelectorAll("{{.ListItemCss}}").forEach((v, i) => {
|
|
|
|
+ let item = {}
|
|
|
|
+ if ("{{.ListLinkCss}}" != "") {
|
|
|
|
+ let link = v.querySelector("{{.ListLinkCss}}")
|
|
|
|
+ if (link) {
|
|
|
|
+ var href = link.href
|
|
|
|
+ if (!href.startsWith("http")) href = window.location.origin + "/" + href
|
|
|
|
+ let title = link.getAttribute("title") || link.innerText
|
|
|
|
+ item = { "listTitle": title, "href": href, "no": i }
|
|
|
|
+ } else {
|
|
|
|
+ item = { "no": i }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if ("{{.ListPubtimeCss}}" != "") { //发布日期CSS选择器定位到条目日期外层
|
|
|
|
+ let pubtime = v.querySelector("{{.ListPubtimeCss}}")
|
|
|
|
+ if (pubtime) {
|
|
|
|
+ //TODO 修改这里进行拼装
|
|
|
|
+ item["listPublishTime"] = pubtime.querySelector("年月CSS选择器").innerText+'-'+pubtime.querySelector("日CSS选择器").innerText
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ ret.push(item)
|
|
|
|
+})
|
|
|
|
+ret
|
|
|
|
+ `,
|
|
|
|
+ }, {
|
|
|
|
+ "name": "模版3",
|
|
|
|
+ "tooltip": "发布日期有干扰,需要清洗",
|
|
|
|
+ "code": `
|
|
|
|
+var ret = []
|
|
|
|
+document.querySelectorAll("{{.ListItemCss}}").forEach((v, i) => {
|
|
|
|
+ let item = {}
|
|
|
|
+ if ("{{.ListLinkCss}}" != "") {
|
|
|
|
+ let link = v.querySelector("{{.ListLinkCss}}")
|
|
|
|
+ if (link) {
|
|
|
|
+ var href = link.href
|
|
|
|
+ if (!href.startsWith("http")) href = window.location.origin + "/" + href
|
|
|
|
+ let title = link.getAttribute("title") || link.innerText
|
|
|
|
+ item = { "listTitle": title, "href": href, "no": i }
|
|
|
|
+ } else {
|
|
|
|
+ item = { "no": i }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if ("{{.ListPubtimeCss}}" != "") {
|
|
|
|
+ let pubtime = v.querySelector("{{.ListPubtimeCss}}")
|
|
|
|
+ if (pubtime) {
|
|
|
|
+ //TODO 修改这里进行清洗
|
|
|
|
+ item["listPublishTime"] = pubtime.innerText.length>15?pubtime.innerText.slice(0,15):""
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ ret.push(item)
|
|
|
|
+})
|
|
|
|
+ret
|
|
|
|
+ `,
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ //详情页代码集合
|
|
|
|
+ ContentJsCodes: [
|
|
|
|
+ {
|
|
|
|
+ "name": "模版1",
|
|
|
|
+ "tooltip": "基础模版",
|
|
|
|
+ "code": `
|
|
var ret = {}
|
|
var ret = {}
|
|
var tmp = null
|
|
var tmp = null
|
|
|
|
|
|
@@ -76,24 +145,171 @@ let regex = /[\\u4e00-\\u9fa5]/g;
|
|
let chineseCharacters = ret["content"]?ret["content"].match(regex):[];
|
|
let chineseCharacters = ret["content"]?ret["content"].match(regex):[];
|
|
let chineseCharactersLen=chineseCharacters ? chineseCharacters.length : 0;
|
|
let chineseCharactersLen=chineseCharacters ? chineseCharacters.length : 0;
|
|
if (chineseCharactersLen < 20 && ret["attachLinks"] && ret["attachLinks"].length>0) ret["content"] = '详情请访问原网页!'
|
|
if (chineseCharactersLen < 20 && ret["attachLinks"] && ret["attachLinks"].length>0) ret["content"] = '详情请访问原网页!'
|
|
-ret
|
|
|
|
|
|
+ret
|
|
|
|
+ `,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "name": "模版2",
|
|
|
|
+ "tooltip": "详情页存在2套不同CSS选择器",
|
|
|
|
+ "code": `
|
|
|
|
+var ret = {}
|
|
|
|
+var tmp = null
|
|
|
|
+
|
|
|
|
+if ("{{.TitleCss}}" != "") {//标题
|
|
|
|
+ tmp = document.querySelector("{{.TitleCss}}") || document.querySelector("第二套CSS选择器,请修改")
|
|
|
|
+ if (tmp) ret["title"] = tmp.getAttribute("title") || tmp.innerText
|
|
|
|
+}
|
|
|
|
+if ("{{.PublishUnitCss}}" != "") {//采购单位
|
|
|
|
+ tmp = document.querySelector("{{.PublishUnitCss}}") || document.querySelector("第二套CSS选择器,请修改")
|
|
|
|
+ if (tmp) ret["publishUnit"] = tmp.getAttribute("title") || tmp.innerText
|
|
|
|
+}
|
|
|
|
+if ("{{.PublishTimeCss}}" != "") {//发布时间
|
|
|
|
+ tmp = document.querySelector("{{.PublishTimeCss}}") || document.querySelector("第二套CSS选择器,请修改")
|
|
|
|
+ if (tmp) ret["publishTime"] = tmp.getAttribute("title") || tmp.innerText
|
|
|
|
+}
|
|
|
|
+if ("{{.ContentCss}}" != "") {//正文内容
|
|
|
|
+ tmp = document.querySelector("{{.ContentCss}}") || document.querySelector("第二套CSS选择器,请修改")
|
|
|
|
+ if (tmp) {
|
|
|
|
+ ret["content"] = tmp.innerText
|
|
|
|
+ ret["contentHtml"] = tmp.innerHTML
|
|
|
|
+ var patchContent = false
|
|
|
|
+ //处理详情页中的大图,大图作为附件使用
|
|
|
|
+ const images = tmp.querySelectorAll("img");
|
|
|
|
+ images.forEach((img, i) => {
|
|
|
|
+ if (img.width > 300) {
|
|
|
|
+ patchContent = true
|
|
|
|
+ const a = document.createElement("a");
|
|
|
|
+ a.href = img.src;
|
|
|
|
+ a.innerText = img.src;
|
|
|
|
+ tmp.appendChild(a);
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+if("{{.AttachCss}}"!=""){//附件
|
|
|
|
+ tmp = document.querySelectorAll("{{.AttachCss}} a") || document.querySelector("第二套CSS选择器,请修改")
|
|
|
|
+ let attach=[]
|
|
|
|
+ if(tmp){
|
|
|
|
+ tmp.forEach((v,i)=>{
|
|
|
|
+ attach.push({title:v.getAttribute("title")||v.innerText,href:v.href})
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ ret["attachLinks"]=attach
|
|
|
|
+}
|
|
|
|
+//检查中文字符个数,少于20,修正正文内容
|
|
|
|
+let regex = /[\\u4e00-\\u9fa5]/g;
|
|
|
|
+let chineseCharacters = ret["content"]?ret["content"].match(regex):[];
|
|
|
|
+let chineseCharactersLen=chineseCharacters ? chineseCharacters.length : 0;
|
|
|
|
+if (chineseCharactersLen < 20 && ret["attachLinks"] && ret["attachLinks"].length>0) ret["content"] = '详情请访问原网页!'
|
|
|
|
+ret
|
|
`,
|
|
`,
|
|
- AttachJsCode:`
|
|
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "name": "模版3",
|
|
|
|
+ "tooltip": "详情页正文包含其他元素,需要清洗",
|
|
|
|
+ "code": `
|
|
|
|
+var ret = {}
|
|
|
|
+var tmp = null
|
|
|
|
+
|
|
|
|
+if ("{{.TitleCss}}" != "") {//标题
|
|
|
|
+ tmp = document.querySelector("{{.TitleCss}}")
|
|
|
|
+ if (tmp) ret["title"] = tmp.getAttribute("title") || tmp.innerText
|
|
|
|
+}
|
|
|
|
+if ("{{.PublishUnitCss}}" != "") {//采购单位
|
|
|
|
+ tmp = document.querySelector("{{.PublishUnitCss}}")
|
|
|
|
+ if (tmp) ret["publishUnit"] = tmp.getAttribute("title") || tmp.innerText
|
|
|
|
+}
|
|
|
|
+if ("{{.PublishTimeCss}}" != "") {//发布时间
|
|
|
|
+ tmp = document.querySelector("{{.PublishTimeCss}}")
|
|
|
|
+ if (tmp) ret["publishTime"] = tmp.getAttribute("title") || tmp.innerText
|
|
|
|
+}
|
|
|
|
+if ("{{.ContentCss}}" != "") {//正文内容
|
|
|
|
+ tmp = document.querySelector("{{.ContentCss}}")
|
|
|
|
+ if (tmp) {
|
|
|
|
+ //TODO在这里写清洗逻辑
|
|
|
|
+ tmp.removeChild(tmp.children[0])
|
|
|
|
+ //或者
|
|
|
|
+ //tmp.removeChild(tmp.querySelector("CSS选择器"))
|
|
|
|
+ ret["content"] = tmp.innerText
|
|
|
|
+ ret["contentHtml"] = tmp.innerHTML
|
|
|
|
+ var patchContent = false
|
|
|
|
+ //处理详情页中的大图,大图作为附件使用
|
|
|
|
+ const images = tmp.querySelectorAll("img");
|
|
|
|
+ images.forEach((img, i) => {
|
|
|
|
+ if (img.width > 300) {
|
|
|
|
+ patchContent = true
|
|
|
|
+ const a = document.createElement("a");
|
|
|
|
+ a.href = img.src;
|
|
|
|
+ a.innerText = img.src;
|
|
|
|
+ tmp.appendChild(a);
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+if("{{.AttachCss}}"!=""){//附件
|
|
|
|
+ tmp = document.querySelectorAll("{{.AttachCss}} a")
|
|
|
|
+ let attach=[]
|
|
|
|
+ if(tmp){
|
|
|
|
+ tmp.forEach((v,i)=>{
|
|
|
|
+ attach.push({title:v.getAttribute("title")||v.innerText,href:v.href})
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ ret["attachLinks"]=attach
|
|
|
|
+}
|
|
|
|
+//检查中文字符个数,少于20,修正正文内容
|
|
|
|
+let regex = /[\\u4e00-\\u9fa5]/g;
|
|
|
|
+let chineseCharacters = ret["content"]?ret["content"].match(regex):[];
|
|
|
|
+let chineseCharactersLen=chineseCharacters ? chineseCharacters.length : 0;
|
|
|
|
+if (chineseCharactersLen < 20 && ret["attachLinks"] && ret["attachLinks"].length>0) ret["content"] = '详情请访问原网页!'
|
|
|
|
+ret
|
|
|
|
+ `},
|
|
|
|
+ ],
|
|
|
|
+
|
|
|
|
+ AttachJsCode: `
|
|
//附件下载以及提交
|
|
//附件下载以及提交
|
|
|
|
|
|
`,
|
|
`,
|
|
- //列表页翻页代码
|
|
|
|
- ListTurnPageJsCode: `
|
|
|
|
|
|
+ //列表页翻页代码集合
|
|
|
|
+ ListTurnPageJsCodes: [
|
|
|
|
+ {
|
|
|
|
+ "name": "模版1",
|
|
|
|
+ "tooltip": "可以直接定位到翻页链接/按钮",
|
|
|
|
+ "code": `
|
|
var link=document.querySelector("{{.ListNextPageCss}}");
|
|
var link=document.querySelector("{{.ListNextPageCss}}");
|
|
if(link)link.click();
|
|
if(link)link.click();
|
|
-"";
|
|
|
|
-`,//列表页翻页代码
|
|
|
|
- ListTurnPageJsCode2: `
|
|
|
|
|
|
+""
|
|
|
|
+ `,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "name": "模版2",
|
|
|
|
+ "tooltip": "选择器匹配多个 翻页链接/按钮,可根据文本精准匹配",
|
|
|
|
+ "code": `
|
|
document.querySelectorAll("{{.ListNextPageCss}}").forEach(link=>{
|
|
document.querySelectorAll("{{.ListNextPageCss}}").forEach(link=>{
|
|
if(link.innerText==="下一页")link.click();
|
|
if(link.innerText==="下一页")link.click();
|
|
})
|
|
})
|
|
-"";
|
|
|
|
-`,
|
|
|
|
-
|
|
|
|
|
|
+""
|
|
|
|
+ `,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "name": "模版3",
|
|
|
|
+ "tooltip": "选择器匹配多个 翻页链接/按钮,可根据文本模糊/包含匹配",
|
|
|
|
+ "code": `
|
|
|
|
+document.querySelectorAll("{{.ListNextPageCss}}").forEach(link=>{
|
|
|
|
+ if(link.innerText.indexOf("下一页")>-1)link.click();
|
|
|
|
+})
|
|
|
|
+""
|
|
|
|
+ `,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ "name": "模版4",
|
|
|
|
+ "tooltip": "选择器匹配多个 翻页链接/按钮,可根据检测是否包含子对象匹配",
|
|
|
|
+ "code": `
|
|
|
|
+document.querySelectorAll("{{.ListNextPageCss}}").forEach(link=>{
|
|
|
|
+ if(link.querySelector("自对象CSS选择器,请修改"))link.click();
|
|
|
|
+})
|
|
|
|
+""
|
|
|
|
+ `,
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
|
|
}
|
|
}
|