diff --git a/.temp_to_pub/EasySpider_windows_x64/execution_instances/7.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/7.json new file mode 100644 index 0000000..4c32442 --- /dev/null +++ b/.temp_to_pub/EasySpider_windows_x64/execution_instances/7.json @@ -0,0 +1 @@ +{"id":7,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"12/11/2023, 7:29:08 AM","update_time":"12/11/2023, 8:02:45 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.jd.com"},{"id":1,"name":"inputText_1","nodeName":"输入文字","nodeId":4,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"text","exampleValue":"Field[\"参数1\"]","value":"Field[\"参数1\"]"}],"outputParameters":[{"id":0,"name":"参数1","desc":"","type":"text","recordASField":1,"exampleValue":"/手机/数码"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环采集数据","sequence":[3,4],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]","//div[contains(., '/手机/数码')]","//DIV[@class='LeftSide_menu_item__SBMWC LeftSide_text_space__2UhbG ']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]"]}},{"id":3,"index":3,"parentId":2,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":7,"relative":true,"name":"参数1","desc":"","extractType":0,"relativeXPath":"","allXPaths":"","exampleValues":[{"num":0,"value":"/手机/数码"}],"unique_index":"kfd57x5t8clq048p17","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":4,"index":4,"parentId":2,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":3,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"Field[\"参数1\"]","index":0,"allXPaths":["/html/body/div[4]/div[1]/div[2]/div[1]/input[1]","//input[contains(., '')]","id(\"key\")","//INPUT[@class='text defcolor']","/html/body/div[last()-6]/div/div[last()-2]/div/input"]}}]} \ No newline at end of file diff --git a/ElectronJS/main.js b/ElectronJS/main.js index 89f0fae..3908055 100644 --- a/ElectronJS/main.js +++ b/ElectronJS/main.js @@ -256,7 +256,7 @@ async function findElementAcrossAllWindows(msg, notifyBrowser = true, scrollInto len = len - 1; if (!notify) { notify = true; - notify_browser("正在尝试在其他窗口中查找元素,请耐心等待。", "Trying to find elements in other windows, please wait patiently.", "info"); + // notify_browser("正在尝试在其他窗口中查找元素,请耐心等待。", "Trying to find elements in other windows, please wait patiently.", "info"); } if (len == 0) { break; @@ -306,7 +306,6 @@ async function beginInvoke(msg, ws) { let height = parseInt(size.height * 0.6) window.setBounds({x: 0, y: size.height * 0.4, height: height, width: width}); } - flowchart_window.show(); // flowchart_window.openDevTools(); } else if (msg.type == 2) { @@ -345,131 +344,256 @@ async function beginInvoke(msg, ws) { } catch (e) { console.log(e); } - } else if (msg.type == 4) { //试运行功能 - try { - let flowchart_url = flowchart_window.webContents.getURL(); - } catch { - flowchart_window = null; - } - if (flowchart_window == null) { - notify_flowchart("试运行功能只能在设计任务阶段,Chrome浏览器打开时使用!", "The trial run function can only be used when designing tasks and opening in Chrome browser!", "error"); - } else { - let node = JSON.parse(msg.message.node); - notify_browser("正在试运行操作:" + node.title, "Trying to run the operation: " + node.title, "info"); + } else if (msg.type == 4) { //标记元素和试运行功能 + let node = JSON.parse(msg.message.node); + let type = msg.message.type; + if (type == 0) { //标记元素 let option = node.option; let parameters = node.parameters; - let beforeJS = ""; - let beforeJSWaitTime = 0; - let afterJS = ""; - let afterJSWaitTime = 0; - try { - beforeJS = parameters.beforeJS; - beforeJSWaitTime = parameters.beforeJSWaitTime; - afterJS = parameters.afterJS; - afterJSWaitTime = parameters.afterJSWaitTime; - } catch (e) { - console.log(e); - } - if (option == 1) { - let url = parameters.links.split("\n")[0].trim(); - if (parameters.useLoop) { - let parent_node = JSON.parse(msg.message.parentNode); - url = parent_node["parameters"]["textList"].split("\n")[0]; + //下面是让浏览器自动滚动到元素位置 + if (option == 2 || option == 4 || option == 6 || option == 7) { + let xpath = parameters.xpath; + let parent_node = JSON.parse(msg.message.parentNode); + if (parameters.useLoop && option != 4 && option != 6) { + let parentXPath = parent_node.parameters.xpath; + xpath = parentXPath + xpath; } - await driver.get(url); - } else if (option == 2 || option == 7) { //点击事件 - let elementInfo = {"iframe": parameters.iframe, "xpath": parameters.xpath, "id": -1}; - if (parameters.useLoop) { + let elementInfo = {"iframe": parameters.iframe, "xpath": xpath, "id": -1}; + //用于跳转到元素位置 + let element = await findElementAcrossAllWindows(elementInfo, notifyBrowser = false); + } else if (option == 3) { + let paras = parameters.paras; //所有的提取数据参数 + let para = paras[0]; + let xpath = para.relativeXPath; + if (para.relative) { let parent_node = JSON.parse(msg.message.parentNode); let parent_xpath = parent_node.parameters.xpath; - elementInfo.xpath = parent_xpath + elementInfo.xpath; + xpath = parent_xpath + xpath; } - let element = await findElementAcrossAllWindows(elementInfo); - await execute_js(parameters.beforeJS, element, parameters.beforeJSWaitTime); - if (option == 2) { - await click_element(element); - } else if (option == 7) { - await driver.actions().move({origin: element}).perform(); - } - await execute_js(parameters.afterJS, element, parameters.afterJSWaitTime); - send_message_to_browser(JSON.stringify({"type": "cancelSelection"})); - } else if (option == 3) { //提取数据 - notify_browser("提示:提取数据操作只能试运行设置的JavaScript语句,且只针对第一个匹配的元素。", "Hint: can only test JavaScript statement set in the data extraction operation, and only for the first matching element.", "info"); + let elementInfo = {"iframe": para.iframe, "xpath": xpath, "id": -1}; + let element = await findElementAcrossAllWindows(elementInfo, notifyBrowser = false); + } else if (option == 11) { let paras = parameters.paras; //所有的提取数据参数 - let not_found_xpaths = []; - for (let i = 0; i < paras.length; i++) { - let para = paras[i]; - let xpath = para.relativeXPath; - if (para.relative) { + let i = parameters.index; + let para = paras[i]; + let xpath = para.relativeXPath; + if (para.relative) { + let parent_node = JSON.parse(msg.message.parentNode); + let parent_xpath = parent_node.parameters.xpath; + xpath = parent_xpath + xpath; + } + let elementInfo = {"iframe": para.iframe, "xpath": xpath, "id": -1}; + let element = await findElementAcrossAllWindows(elementInfo, notifyBrowser = false); + } else if (option == 8) { + // + // + let loopType = parameters.loopType; + if (loopType <= 2) { + let xpath = ""; + if (loopType <= 1) { + xpath = parameters.xpath; + } else if (loopType == 2) { + xpath = parameters.pathList.split("\n")[0].trim(); + } + let elementInfo = {"iframe": parameters.iframe, "xpath": xpath, "id": -1}; + let element = await findElementAcrossAllWindows(elementInfo, notifyBrowser = false); + } else if (loopType == 5) { //JavaScript命令返回值 + let code = parameters.code; + let waitTime = parameters.waitTime; + let element = await driver.findElement(By.tagName("body")); + let outcome = await execute_js(code, element, waitTime); + if (!outcome || outcome == -1) { + notify_browser("目前页面中,设置的循环“" + node.title + "”的JavaScript条件不成立", "The condition of the loop " + node.title + " is not met, skip this loop.", "warning"); + } else { + notify_browser("目前页面中,设置的循环“" + node.title + "”的JavaScript条件成立", "The condition of the loop " + node.title + " is met, continue this loop.", "success"); + } + } + } else if (option == 10) { //条件分支 + let condition = parameters.class; //条件类型 + let result = -1; + let additionalInfo = ""; + if (condition == 5 || condition == 7) { //JavaScript命令返回值 + let code = parameters.code; + let waitTime = parameters.waitTime; + let element = await driver.findElement(By.tagName("body")); + if (condition == 7) { + let parent_node = JSON.parse(msg.message.parentNode); + let xpath = parent_node.parameters.xpath; + elementInfo = {"iframe": parent_node.parameters.iframe, "xpath": xpath, "id": -1}; + element = await findElementAcrossAllWindows(elementInfo); + } + let outcome = await execute_js(code, element, waitTime); + if (!outcome) { + msg.message.result = 0; //条件不成立传入扩展 + } else if (outcome == -1) { + msg.message.result = -1; //JS执行出错 + } else { + msg.message.result = 1; //条件成立传入扩展 + } + } + } + send_message_to_browser(JSON.stringify({"type": "trial", "message": msg})); + } else { //试运行 + try { + let flowchart_url = flowchart_window.webContents.getURL(); + } catch { + flowchart_window = null; + } + if (flowchart_window == null) { + notify_flowchart("试运行功能只能在设计任务阶段,Chrome浏览器打开时使用!", "The trial run function can only be used when designing tasks and opening in Chrome browser!", "error"); + } else { + notify_browser("正在试运行操作:" + node.title, "Trying to run the operation: " + node.title, "info"); + let option = node.option; + let parameters = node.parameters; + let beforeJS = ""; + let beforeJSWaitTime = 0; + let afterJS = ""; + let afterJSWaitTime = 0; + try { + beforeJS = parameters.beforeJS; + beforeJSWaitTime = parameters.beforeJSWaitTime; + afterJS = parameters.afterJS; + afterJSWaitTime = parameters.afterJSWaitTime; + } catch (e) { + console.log(e); + } + if (option == 1) { + let url = parameters.links.split("\n")[0].trim(); + if (parameters.useLoop) { + let parent_node = JSON.parse(msg.message.parentNode); + url = parent_node["parameters"]["textList"].split("\n")[0]; + } + try { + await driver.get(url); + } catch (e) { + driver.switchTo().window(current_handle); + await driver.get(url); + } + } else if (option == 2 || option == 7) { //点击事件 + let elementInfo = {"iframe": parameters.iframe, "xpath": parameters.xpath, "id": -1}; + if (parameters.useLoop) { let parent_node = JSON.parse(msg.message.parentNode); let parent_xpath = parent_node.parameters.xpath; - xpath = parent_xpath + xpath; + elementInfo.xpath = parent_xpath + elementInfo.xpath; } - let elementInfo = {"iframe": para.iframe, "xpath": xpath, "id": -1}; - let element = await findElementAcrossAllWindows(elementInfo, notifyBrowser = false); - if (element != null) { - await execute_js(para.beforeJS, element, para.beforeJSWaitTime); - await execute_js(para.afterJS, element, para.afterJSWaitTime); - } else { - not_found_xpaths.push(xpath); + let element = await findElementAcrossAllWindows(elementInfo); //通过此函数找到元素并切换到对应的窗口 + await execute_js(parameters.beforeJS, element, parameters.beforeJSWaitTime); + if (option == 2) { + await click_element(element); + let alertHandleType = parameters.alertHandleType; + if (alertHandleType == 1) { + try { + await driver.switchTo().alert().accept(); + } catch (e) { + console.log("No alert"); + } + } else if (alertHandleType == 2) { + try { + await driver.switchTo().alert().dismiss(); + } catch (e) { + console.log("No alert"); + } + } + } else if (option == 7) { + await driver.actions().move({origin: element}).perform(); } - } - if (not_found_xpaths.length > 0) { - notify_browser("无法找到以下元素,请检查XPath是否正确:" + not_found_xpaths.join("\n"), "Cannot find the element, please check if the XPath is correct: " + not_found_xpaths.join("\n"), "warning"); - } - } else if (option == 4) { //键盘输入事件 - let elementInfo = {"iframe": parameters.iframe, "xpath": parameters.xpath, "id": -1}; - let value = node.parameters.value; - if (node.parameters.useLoop) { - let parent_node = JSON.parse(msg.message.parentNode); - value = parent_node["parameters"]["textList"].split("\n")[0]; - let index = node.parameters.index; - if (index > 0) { - value = value.split("~")[index - 1]; + await execute_js(parameters.afterJS, element, parameters.afterJSWaitTime); + send_message_to_browser(JSON.stringify({"type": "cancelSelection"})); + } else if (option == 3) { //提取数据 + notify_browser("提示:提取数据操作只能试运行设置的JavaScript语句,且只针对第一个匹配的元素。", "Hint: can only test JavaScript statement set in the data extraction operation, and only for the first matching element.", "info"); + let paras = parameters.paras; //所有的提取数据参数 + let not_found_xpaths = []; + for (let i = 0; i < paras.length; i++) { + let para = paras[i]; + let xpath = para.relativeXPath; + if (para.relative) { + let parent_node = JSON.parse(msg.message.parentNode); + let parent_xpath = parent_node.parameters.xpath; + xpath = parent_xpath + xpath; + } + let elementInfo = {"iframe": para.iframe, "xpath": xpath, "id": -1}; + let element = await findElementAcrossAllWindows(elementInfo, notifyBrowser = false); + if (element != null) { + await execute_js(para.beforeJS, element, para.beforeJSWaitTime); + await execute_js(para.afterJS, element, para.afterJSWaitTime); + } else { + not_found_xpaths.push(xpath); + } } - } - let keyInfo = value - let enter = false; - if (//i.test(keyInfo)) { - keyInfo = keyInfo.replace(//gi, ''); - enter = true; - } - if (keyInfo.indexOf("Field(") >= 0 || keyInfo.indexOf("eval(") >= 0) { - //两秒后通知浏览器 - await new Promise(resolve => setTimeout(resolve, 2000)); - notify_browser("检测到文字中包含Field(\"\")或eval(\"\"),试运行时无法输入两项表达式的替换值,请在任务正式调用阶段测试是否有效。", "Field(\"\") or eval(\"\") is detected in the text, and the replacement value of the two expressions cannot be entered during trial operation. Please test whether it is valid in the formal call stage.", "warning"); - } - let element = await findElementAcrossAllWindows(elementInfo); - await execute_js(beforeJS, element, beforeJSWaitTime); - await element.sendKeys(Key.HOME, Key.chord(Key.SHIFT, Key.END), keyInfo); - if (enter) { - await element.sendKeys(Key.ENTER); - } - await execute_js(afterJS, element, afterJSWaitTime); - } else if (option == 5) { //自定义操作的JS代码 - let code = parameters.code; - let waitTime = parameters.waitTime; - let element = await driver.findElement(By.tagName("body")); - await execute_js(code, element, waitTime); - } else if (option == 6) { //切换下拉选项 - let optionMode = parseInt(parameters.optionMode); - let optionValue = parameters.optionValue; - if (node.parameters.useLoop) { - let parent_node = JSON.parse(msg.message.parentNode); - optionValue = parent_node["parameters"]["textList"].split("\n")[0]; - let index = node.parameters.index; - if (index > 0) { - optionValue = optionValue.split("~")[index - 1]; + if (not_found_xpaths.length > 0) { + notify_browser("无法找到以下元素,请检查XPath是否正确:" + not_found_xpaths.join("\n"), "Cannot find the element, please check if the XPath is correct: " + not_found_xpaths.join("\n"), "warning"); } - } - let elementInfo = {"iframe": parameters.iframe, "xpath": parameters.xpath, "id": -1}; - let element = await findElementAcrossAllWindows(elementInfo); - execute_js(beforeJS, element, beforeJSWaitTime); - let dropdown = new Select(element); - // Interacting with dropdown element based on optionMode - switch (optionMode) { - case 0: //切换到下一个选项 - let script = `var options = arguments[0].options; + } else if (option == 4) { //键盘输入事件 + let elementInfo = {"iframe": parameters.iframe, "xpath": parameters.xpath, "id": -1}; + let value = node.parameters.value; + if (node.parameters.useLoop) { + let parent_node = JSON.parse(msg.message.parentNode); + value = parent_node["parameters"]["textList"].split("\n")[0]; + let index = node.parameters.index; + if (index > 0) { + value = value.split("~")[index - 1]; + } + } + let keyInfo = value + let enter = false; + if (//i.test(keyInfo)) { + keyInfo = keyInfo.replace(//gi, ''); + enter = true; + } + if (keyInfo.indexOf("Field(") >= 0 || keyInfo.indexOf("eval(") >= 0) { + //两秒后通知浏览器 + await new Promise(resolve => setTimeout(resolve, 2000)); + notify_browser("检测到文字中包含Field(\"\")或eval(\"\"),试运行时无法输入两项表达式的替换值,请在任务正式调用阶段测试是否有效。", "Field(\"\") or eval(\"\") is detected in the text, and the replacement value of the two expressions cannot be entered during trial operation. Please test whether it is valid in the formal call stage.", "warning"); + } + let element = await findElementAcrossAllWindows(elementInfo); + await execute_js(beforeJS, element, beforeJSWaitTime); + await element.sendKeys(Key.HOME, Key.chord(Key.SHIFT, Key.END), keyInfo); + if (enter) { + await element.sendKeys(Key.ENTER); + } + await execute_js(afterJS, element, afterJSWaitTime); + } else if (option == 5) { //自定义操作的JS代码 + let code = parameters.code; + let codeMode = parameters.codeMode; + let waitTime = parameters.waitTime; + let element = await driver.findElement(By.tagName("body")); + if (codeMode == 0) { + await execute_js(code, element, waitTime); + } else if (codeMode == 8) { + //刷新页面 + await driver.navigate().refresh(); + } + } else if (option == 6) { //切换下拉选项 + let optionMode = parseInt(parameters.optionMode); + let optionValue = parameters.optionValue; + if (node.parameters.useLoop) { + let parent_node = JSON.parse(msg.message.parentNode); + optionValue = parent_node["parameters"]["textList"].split("\n")[0]; + let index = node.parameters.index; + if (index > 0) { + optionValue = optionValue.split("~")[index - 1]; + } + } + let elementInfo = {"iframe": parameters.iframe, "xpath": parameters.xpath, "id": -1}; + let element = await findElementAcrossAllWindows(elementInfo); + execute_js(beforeJS, element, beforeJSWaitTime); + let dropdown = new Select(element); + // Interacting with dropdown element based on optionMode + switch (optionMode) { + case 0: //切换到下一个选项 + let script = `var options = arguments[0].options; for (var i = 0; i < options.length; i++) { if (options[i].selected) { options[i].selected = false; @@ -481,26 +605,42 @@ async function beginInvoke(msg, ws) { break; } }`; - await driver.executeScript(script, element); - break; - case 1: - await dropdown.selectByIndex(parseInt(optionValue)); - break; - case 2: - await dropdown.selectByValue(optionValue); - break; - case 3: - await dropdown.selectByVisibleText(optionValue); - break; - default: - throw new Error('Invalid option mode'); + await driver.executeScript(script, element); + break; + case 1: + await dropdown.selectByIndex(parseInt(optionValue)); + break; + case 2: + await dropdown.selectByValue(optionValue); + break; + case 3: + await dropdown.selectByVisibleText(optionValue); + break; + default: + throw new Error('Invalid option mode'); + } + execute_js(afterJS, element, afterJSWaitTime); + } else if (option == 11) { //单个提取数据参数 + notify_browser("提示:提取数据操作只能试运行设置的JavaScript语句,且只针对第一个匹配的元素。", "Hint: can only test JavaScript statement set in the data extraction operation, and only for the first matching element.", "info"); + let paras = parameters.paras; //所有的提取数据参数 + let i = parameters.index; + let para = paras[i]; + let xpath = para.relativeXPath; + if (para.relative) { + let parent_node = JSON.parse(msg.message.parentNode); + let parent_xpath = parent_node.parameters.xpath; + xpath = parent_xpath + xpath; + } + let elementInfo = {"iframe": para.iframe, "xpath": xpath, "id": -1}; + let element = await findElementAcrossAllWindows(elementInfo); + if (element != null) { + await execute_js(para.beforeJS, element, para.beforeJSWaitTime); + await execute_js(para.afterJS, element, para.afterJSWaitTime); + } } - execute_js(afterJS, element, afterJSWaitTime); } } - } else if (msg.type == 8) { //展示元素功能 - } else if (msg.type == 5) { let child = require('child_process').execFile; // 参数顺序: 1. task id 2. server address 3. saved_file_name 4. "remote" or "local" 5. user_data_folder @@ -562,6 +702,8 @@ async function beginInvoke(msg, ws) { async function click_element(element) { try { await element.click(); + //ctrl+click + // await driver.actions().keyDown(Key.CONTROL).click(element).keyUp(Key.CONTROL).perform(); } catch (e) { console.log(e); await driver.executeScript("arguments[0].click();", element); @@ -569,17 +711,26 @@ async function click_element(element) { } async function execute_js(js, element, wait_time = 3) { + let outcome = 0; if (js.length != 0) { try { - await driver.executeScript(js, element); + outcome = await driver.executeScript(js, element); if (wait_time == 0) { wait_time = 30000; } - await new Promise(resolve => setTimeout(resolve, wait_time)); + // await new Promise(resolve => setTimeout(resolve, wait_time)); } catch (e) { + // await new Promise(resolve => setTimeout(resolve, 2000)); notify_browser("执行JavaScript出错,请检查JavaScript语句是否正确:" + js + "\n错误信息:" + e, "Error executing JavaScript, please check if the JavaScript statement is correct: " + js + "\nError message: " + e, "error"); + outcome = -1; + } + if (js.indexOf("Field(") >= 0 || js.indexOf("eval(") >= 0) { + //两秒后通知浏览器 + await new Promise(resolve => setTimeout(resolve, 2000)); + notify_browser("检测到JavaScript中包含Field(\"\")或eval(\"\"),试运行时无法执行两项表达式,请在任务正式调用阶段测试是否有效。", "Field(\"\") or eval(\"\") is detected in JavaScript, and the two expressions cannot be executed during trial operation. Please test whether it is valid in the formal call stage.", "warning"); } } + return outcome; } function notify_flowchart(msg_zh, msg_en, level = "info") { @@ -628,25 +779,41 @@ wss.on('connection', function (ws) { // }); console.log("set socket_flowchart at time: ", new Date()); } else { //其他的ID是用来标识不同的浏览器标签页的 - await new Promise(resolve => setTimeout(resolve, 2300)); + // await new Promise(resolve => setTimeout(resolve, 200)); let handles = await driver.getAllWindowHandles(); if (arrayDifference(handles, old_handles).length > 0) { old_handles = handles; current_handle = handles[handles.length - 1]; + await driver.switchTo().window(current_handle); console.log("New tab opened, change current_handle to: ", current_handle); + // 调整浏览器窗口大小,不然扩展会白屏 + let size = await driver.manage().window().getRect(); + let width = size.width; + let height = size.height; + await driver.manage().window().setRect({width: width, height: height + 10}); + // height = height - 1; + await driver.manage().window().setRect({width: width, height: height}); } + await new Promise(resolve => setTimeout(resolve, 2000)); handle_pairs[msg.message.id] = current_handle; console.log("Set handle_pair for id: ", msg.message.id, " to ", current_handle, ", title is: ", msg.message.title); socket_flowchart.send(JSON.stringify({"type": "title", "data": {"title": msg.message.title}})); allWindowSockets.push(ws); allWindowScoketNames.push(msg.message.id); console.log("set socket for id: ", msg.message.id, " at time: ", new Date()); - ws.on('close', function (event) { + ws.on('close', async function (event) { let index = allWindowSockets.indexOf(ws); if (index > -1) { allWindowSockets.splice(index, 1); allWindowScoketNames.splice(index, 1); } + let handles = await driver.getAllWindowHandles(); + if (handles.length < old_handles.length) { + old_handles = handles; + current_handle = handles[handles.length - 1]; + await driver.switchTo().window(current_handle); + console.log("Current tab closed, change current_handle to: ", current_handle); + } console.log("socket for id: ", msg.message.id, " closed at time: ", new Date()); }); // console.log("handle_pairs: ", handle_pairs); @@ -671,6 +838,15 @@ async function runBrowser(lang = "en", user_data_folder = '', mobile = false) { const serviceBuilder = new ServiceBuilder(driverPath); let options = new chrome.Options(); options.addArguments('--disable-blink-features=AutomationControlled'); + options.addArguments('--disable-infobars'); + // 添加实验性选项以排除'enable-automation'开关 + options.set('excludeSwitches', ['enable-automation']); + options.excludeSwitches("enable-automation") + + // 添加实验性选项来禁用自动化扩展 + options.set('useAutomationExtension', false); + // options.addArguments('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'); + options.set language = lang; if (lang == "en") { options.addExtensions(path.join(__dirname, "EasySpider_en.crx")); @@ -679,6 +855,7 @@ async function runBrowser(lang = "en", user_data_folder = '', mobile = false) { } options.addExtensions(path.join(__dirname, "XPathHelper.crx")); options.setChromeBinaryPath(chromeBinaryPath); + if (user_data_folder != "") { let dir = path.join(task_server.getDir(), user_data_folder); console.log(dir); @@ -790,7 +967,7 @@ app.whenReady().then(() => { createWindow(); app.on('activate', function () { - // On macOS it's common to re-create a window in the app when the + // On MacOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) { createWindow(); diff --git a/ElectronJS/src/taskGrid/FlowChart.css b/ElectronJS/src/taskGrid/FlowChart.css index 4b219bc..9f0cd2c 100644 --- a/ElectronJS/src/taskGrid/FlowChart.css +++ b/ElectronJS/src/taskGrid/FlowChart.css @@ -221,7 +221,8 @@ position: sticky; top: 0px; margin-bottom: 0px; - background-color: azure; + /*background-color: azure;*/ + background-color: aliceblue; z-index: 1000; } diff --git a/ElectronJS/src/taskGrid/FlowChart.html b/ElectronJS/src/taskGrid/FlowChart.html index f519631..7cc6d31 100644 --- a/ElectronJS/src/taskGrid/FlowChart.html +++ b/ElectronJS/src/taskGrid/FlowChart.html @@ -113,10 +113,10 @@ @@ -157,12 +157,17 @@ + + @@ -218,10 +223,10 @@ {{paras.parameters[i-1]["exampleValues"][0]["value"]}} - Modify - Delete - Up - Down + Modify + Delete + Up + Down @@ -241,6 +246,7 @@

+ @@ -414,8 +420,8 @@ This option is an advanced feature that allows directly returning the expression Please note that this feature does not support assigning values to variables. In other words, you cannot write something like `self.myVar = 1`. If you want to perform assignment operations, please select the previous option, "Run Python code on current environment (the "exec" operation)"

Whether to record the output/return value of the execution as a field:

- - - - + + + +

Set value (not applicable for "Switch to the next option" mode)

@@ -519,7 +525,7 @@ Please note that this feature does not support assigning values to variables. In

Operation is in iframe

- @@ -568,9 +574,9 @@ If the expression returns a value greater than 0 or evaluates to True, the loop

@@ -519,7 +525,7 @@ print(emotlib.emoji()) # 使用其中的函数。

在iframe内操作

- @@ -596,14 +602,14 @@ print(emotlib.emoji()) # 使用其中的函数。
- +
- +

在iframe内操作

- diff --git a/ElectronJS/src/taskGrid/logic.js b/ElectronJS/src/taskGrid/logic.js index 83b5a47..b2e6d3a 100644 --- a/ElectronJS/src/taskGrid/logic.js +++ b/ElectronJS/src/taskGrid/logic.js @@ -8,8 +8,8 @@ let exampleMsg = { //示例消息 } } console.log(JSON.stringify(exampleMsg)); -let ws = new WebSocket("ws://localhost:"+getUrlParam("wsport")); -ws.onopen = function() { +let ws = new WebSocket("ws://localhost:" + getUrlParam("wsport")); +ws.onopen = function () { // Web Socket 已连接上,使用 send() 方法发送数据 console.log("已连接"); message = { @@ -20,12 +20,12 @@ ws.onopen = function() { }; this.send(JSON.stringify(message)); }; -ws.onclose = function() { +ws.onclose = function () { // 关闭 websocket console.log("连接已关闭..."); }; let old_title = ""; -ws.onmessage = function(evt) { +ws.onmessage = function (evt) { evt = JSON.parse(evt.data); console.log(evt); if (evt["type"] == "title") { //如果不是特殊处理的话,默认全部是增加元素操作 @@ -36,9 +36,9 @@ ws.onmessage = function(evt) { } else if (evt["type"] == "notify") { if (evt["level"] == "success") { showSuccess(LANG(evt["msg_zh"], evt["msg_en"])); - } else if(evt["level"] == "info"){ + } else if (evt["level"] == "info") { showInfo(LANG(evt["msg_zh"], evt["msg_en"])); - } else if(evt["level"] == "error"){ + } else if (evt["level"] == "error") { showError(LANG(evt["msg_zh"], evt["msg_en"])); } } else { @@ -46,20 +46,20 @@ ws.onmessage = function(evt) { } }; -function changeOutputFormat(para){ - try{ - for(let i=0;i 20000) { - if($("#outputFormat").val() == "xlsx") { + if ($("#outputFormat").val() == "xlsx") { $("#outputFormat").val("csv"); //如果有一个参数的示例值长度超过20000,就默认输出为csv showInfo(LANG("示例值长度超过16000,超出Excel单个单元格存储限制,已自动切换保存为csv格式。", "The length of the example value exceeds 16000, and the csv save format has been automatically switched.")); } break; } } - } catch(e){ + } catch (e) { console.log(e); } } @@ -85,7 +85,10 @@ function handleAddElement(msg) { addElement(2, msg); } else if (msg["type"] == "inputText") { addElement(4, msg); - } else if (msg["type"] == "changeOption"){ + } else if (msg["type"] == "batchInputText") { + addElement(8, msg); + addElement(4, msg); + } else if (msg["type"] == "changeOption") { addElement(6, msg); } else if (msg["type"] == "mouseMove") { addElement(7, msg); @@ -110,7 +113,8 @@ function handleAddElement(msg) { } changeOutputFormat(msg); app._data.paras.parameters = app._data["nowNode"]["parameters"]["paras"]; - setTimeout(function(){$("#app > div.elements > div.toolkitcontain > table.toolkittb4 > tbody > tr:last-child")[0].scrollIntoView(false); //滚动到底部 + setTimeout(function () { + $("#app > div.elements > div.toolkitcontain > table.toolkittb4 > tbody > tr:last-child")[0].scrollIntoView(false); //滚动到底部 }, 200); } else { addElement(3, msg); @@ -122,9 +126,9 @@ function handleAddElement(msg) { addElement(3, msg); changeOutputFormat(msg); notifyParameterNum(msg["parameters"].length); //通知浏览器端参数的个数变化 - } else if(msg["type"] == "GetCookies"){ - for(let node of nodeList){ - if(node["option"] == 1){ + } else if (msg["type"] == "GetCookies") { + for (let node of nodeList) { + if (node["option"] == 1) { node["parameters"]["cookies"] = msg["message"]; $("#pageCookies").val(msg["message"]); break; @@ -138,18 +142,28 @@ function notifyParameterNum(num) { let message = { type: 3, //消息类型,3代表元素增加事件 from: 1, //0代表从浏览器到流程图,1代表从流程图到浏览器 - message: { "pipe": JSON.stringify({ "type": "update_parameter_num", "value": parameterNum }) } // {}全选{BS}退格 + message: {"pipe": JSON.stringify({"type": "update_parameter_num", "value": parameterNum})} // {}全选{BS}退格 }; ws.send(JSON.stringify(message)); } -function trailRun(node){ +function trailElement(node, type = 1) { + // type=0代表标记节点,type=1代表试运行 + let parentNode = nodeList[actionSequence[node["parentId"]]]; + if (node.option == 10) { //条件分支的话,传父元素的父元素 + parentNode = nodeList[actionSequence[parentNode["parentId"]]]; + } + if (parentNode.option == 10) { //如果父元素是条件分支,传父元素的爷爷元素 + parentNode = nodeList[actionSequence[parentNode["parentId"]]]; + parentNode = nodeList[actionSequence[parentNode["parentId"]]]; + } let message = { type: 4, //消息类型,4代表试运行事件 from: 1, //0代表从浏览器到流程图,1代表从流程图到浏览器 - message: { "node": JSON.stringify(node), "parentNode": JSON.stringify(nodeList[actionSequence[node["parentId"]]])} + message: {"type": type, "node": JSON.stringify(node), "parentNode": JSON.stringify(parentNode)} }; ws.send(JSON.stringify(message)); + console.log(node); console.log(message); } @@ -165,7 +179,7 @@ function handleElement() { } else if (app._data["nodeType"] == 3) { app._data.paraIndex = 0; //参数索引初始化 app._data.paras.parameters = app._data["nowNode"]["parameters"]["paras"]; - } else if (app._data["nodeType"] == 5){ + } else if (app._data["nodeType"] == 5) { app._data.codeMode = app._data["nowNode"]["parameters"]["codeMode"]; } else if (app._data["nodeType"] == 10) { app._data.TClass = app._data["nowNode"]["parameters"]["class"]; @@ -203,6 +217,7 @@ function addParameters(t) { t["parameters"]["scrollCount"] = 1; //滚动次数 t["parameters"]["scrollWaitTime"] = 1; //滚动后等待时间 t["parameters"]["clickWay"] = 0; //点击方式,0代表selenium点击,1代表js点击 + t["parameters"]["newTab"] = 1; //是否新标签页打开 t["parameters"]["maxWaitTime"] = 10; //最长等待时间 t["parameters"]["paras"] = []; //默认参数列表 t["parameters"]["wait"] = 2; //点击后等待时间默认2s @@ -222,7 +237,7 @@ function addParameters(t) { t["parameters"]["beforeJSWaitTime"] = 0; //执行前js等待时间 t["parameters"]["afterJS"] = ""; //执行后执行的js t["parameters"]["afterJSWaitTime"] = 0; //执行后js等待时间 - } else if(t.option == 5) { //自定义操作 + } else if (t.option == 5) { //自定义操作 t["title"] = LANG("执行JavaScript", "Run JavaScript"); t["parameters"]["clear"] = 0; //清空其他字段数据 t["parameters"]["newLine"] = 1; //生成新行 @@ -246,6 +261,7 @@ function addParameters(t) { t["parameters"]["optionValue"] = ""; //下拉值 t["parameters"]["index"] = 0; //输入框索引 } else if (t.option == 8) { //循环 + t["title"] = LANG("循环 - 单个元素", "Loop - single element"); t["parameters"]["scrollType"] = 0; //滚动类型,0不滚动,1向下滚动1屏,2滚动到底部 t["parameters"]["scrollCount"] = 1; //滚动次数 t["parameters"]["scrollWaitTime"] = 1; //滚动后等待时间 @@ -262,7 +278,7 @@ function addParameters(t) { t["parameters"]["breakCode"] = ""; //break条件 t["parameters"]["breakCodeWaitTime"] = 0; //break条件等待时间 } else if (t.option == 9) { //条件 - + t["title"] = LANG("判断条件 - 从左往右依次判断", "Judgment condition - judge from left to right"); } else if (t.option == 10) { //条件分支 t["parameters"]["class"] = 0; //0代表什么条件都没有,1代表当前页面包括文本,2代表当前页面包括元素,3代表当前循环包括文本,4代表当前循环包括元素 t["parameters"]["value"] = ""; //相关值 @@ -305,12 +321,13 @@ function modifyParameters(t, para) { t["parameters"]["value"] = para["value"]; t["parameters"]["xpath"] = para["xpath"]; t["parameters"]["allXPaths"] = para["allXPaths"]; - } else if(t.option == 6){ + t["parameters"]["useLoop"] = para["useLoop"]; + } else if (t.option == 6) { t["parameters"]["xpath"] = para["xpath"]; t["parameters"]["allXPaths"] = para["allXPaths"]; t["parameters"]["optionMode"] = para["optionMode"]; t["parameters"]["optionValue"] = para["optionValue"]; - } else if(t.option == 7){ + } else if (t.option == 7) { t["parameters"]["xpath"] = para["xpath"]; t["parameters"]["useLoop"] = para["useLoop"]; t["parameters"]["allXPaths"] = para["allXPaths"]; @@ -318,6 +335,7 @@ function modifyParameters(t, para) { t["parameters"]["loopType"] = para["loopType"]; t["parameters"]["xpath"] = para["xpath"]; t["parameters"]["allXPaths"] = para["allXPaths"]; + t["parameters"]["textList"] = para["value"]; if (para["nextPage"]) { //循环点击下一页的情况下 t["title"] = LANG("循环点击下一页", "Loop click next page"); } else if (para["type"] == "loopClickSingle") { //循环点击单个元素 @@ -326,8 +344,10 @@ function modifyParameters(t, para) { t["title"] = LANG("循环点击每个元素", "Loop click every element"); } else if (para["type"] == "loopMouseMove") { //循环移动到单个元素 t["title"] = LANG("循环移动到每个元素", "Loop move to every element"); - } else if (para["type"] == "multiCollectWithPattern"){ + } else if (para["type"] == "multiCollectWithPattern") { t["title"] = LANG("循环采集数据", "Loop collect data"); + } else if (para["type"] == "batchInputText") { + t["title"] = LANG("循环输入文字", "Loop input text"); } else { t["title"] = LANG("循环", "Loop"); } @@ -343,24 +363,26 @@ function modifyParameters(t, para) { } } -function showSuccess(msg, time=4000) { +function showSuccess(msg, time = 4000) { $("#tip").text(msg); $("#tip").slideDown(); //提示框 - let fadeout = setTimeout(function() { + let fadeout = setTimeout(function () { $("#tip").slideUp(); }, time); } -function showInfo(msg, time=4000) { + +function showInfo(msg, time = 4000) { $("#info_message").text(msg); $("#tipInfo").slideDown(); //提示框 - let fadeout = setTimeout(function() { + let fadeout = setTimeout(function () { $("#tipInfo").slideUp(); }, time); } -function showError(msg, time=4000) { + +function showError(msg, time = 4000) { $("#error_message").text(msg); $("#tipError").slideDown(); //提示框 - let fadeout = setTimeout(function() { + let fadeout = setTimeout(function () { $("#tipError").slideUp(); }, time); } @@ -370,11 +392,11 @@ function showError(msg, time=4000) { $("#confirm").mousedown(updateUI); //点击保存任务按钮时的处理 -$("#saveButton").mousedown(function() { +$("#saveButton").mousedown(function () { saveService(0); }); //点击另存为任务按钮时的处理 -$("#saveAsButton").mousedown(function() { +$("#saveAsButton").mousedown(function () { saveService(1); }); @@ -398,170 +420,178 @@ function saveService(type) { text = LANG("确认要另存为任务吗(不能用鼠标点击时,请按键盘回车键)?", "Are you sure to save the task as (if you can't use the mouse to click, please press the enter key)?"); } // if (confirm(text)) { - let serviceName = $("#serviceName").val(); - let url = $("#url").val(); - let serviceDescription = $("#serviceDescription").val(); - let inputParameters = []; - let outputParameters = []; - let outputNames = []; - let inputIndex = 0; - let outputIndex = 0; - let links = "about:blank"; //记录所有的link - let containJudge = false; //是否含有判断语句 - let saveThreshold = parseInt($("#saveThreshold").val()); - let cloudflare = parseInt($("#cloudflare").val()); - let environment = parseInt($("#environment").val()); - for (let i = 1; i < nodeList.length; i++) { - if (nodeList[i]["id"] != -1) { //已经被删除的节点不进行统计 - if (nodeList[i]["option"] == 1) //打开网页操作,统计输入框输入操作 + let serviceName = $("#serviceName").val(); + let url = $("#url").val(); + let serviceDescription = $("#serviceDescription").val(); + let inputParameters = []; + let outputParameters = []; + let outputNames = []; + let inputIndex = 0; + let outputIndex = 0; + let links = "about:blank"; //记录所有的link + let containJudge = false; //是否含有判断语句 + let saveThreshold = parseInt($("#saveThreshold").val()); + let cloudflare = parseInt($("#cloudflare").val()); + let environment = parseInt($("#environment").val()); + for (let i = 1; i < nodeList.length; i++) { + if (nodeList[i]["id"] != -1) { //已经被删除的节点不进行统计 + if (nodeList[i]["option"] == 1) //打开网页操作,统计输入框输入操作 + { + if (!nodeList[i]["parameters"]["useLoop"]) //如果不是使用循环里的文本 { - if (!nodeList[i]["parameters"]["useLoop"]) //如果不是使用循环里的文本 - { - inputParameters.push({ - id: inputIndex, - name: "urlList_" + inputIndex++, - nodeId: i, //记录操作位于的节点位置,重要!!! - nodeName: nodeList[i]["title"], - value: nodeList[i]["parameters"]["links"], - desc: LANG("要采集的网址列表,多行以\\n分开","List of URLs to be collected, separated by \\n for multiple lines",), - type: "text", - exampleValue: nodeList[i]["parameters"]["links"] - }); - links = nodeList[i]["parameters"]["links"]; - } - } else if (nodeList[i]["option"] == 4) //输入文字操作 - { - if (!nodeList[i]["parameters"]["useLoop"]) //如果不是使用循环里的文本 - { - inputParameters.push({ - id: inputIndex, - name: "inputText_" + inputIndex++, - nodeName: nodeList[i]["title"], - nodeId: i, - desc: LANG("要输入的文本,如京东搜索框输入:电脑","The text to be entered, such as 'computer' at eBay search box"), - type: "text", - exampleValue: nodeList[i]["parameters"]["value"], - value: nodeList[i]["parameters"]["value"], - }); - } - } else if (nodeList[i]["option"] == 8) //循环操作 - { - if (parseInt(nodeList[i]["parameters"]["loopType"]) > 2 && parseInt(nodeList[i]["parameters"]["loopType"]) < 5) { //循环中的循环输入文本或循环输入网址 - inputParameters.push({ - id: inputIndex, - name: "loopText_" + inputIndex++, - nodeId: i, - nodeName: nodeList[i]["title"], - desc: LANG("要输入的文本/网址,多行以\\n分开", "Text/URL to be entered, multiple lines should be separated by \\n"), - type: "text", - exampleValue: nodeList[i]["parameters"]["textList"], - value: nodeList[i]["parameters"]["textList"], - }); - } else if (parseInt(nodeList[i]["parameters"]["loopType"]) == 0) { - inputParameters.push({ - id: inputIndex, - name: "loopTimes_" + nodeList[i]["title"] + "_" + inputIndex++, - nodeId: i, - nodeName: nodeList[i]["title"], - desc: LANG("循环" + nodeList[i]["title"] + "执行的次数(0代表无限循环)", "Number of loop executions for loop "+nodeList[i]["title"]+", 0 means unlimited loops (until element not found)"), - type: "int", - exampleValue: nodeList[i]["parameters"]["exitCount"], - value: nodeList[i]["parameters"]["exitCount"], - }); - } - } else if (nodeList[i]["option"] == 3) //提取数据操作 - { - for (let j = 0; j < nodeList[i]["parameters"]["paras"].length; j++) { - if (outputNames.indexOf(nodeList[i]["parameters"]["paras"][j]["name"]) < 0) { //参数名称还未被添加 - outputNames.push(nodeList[i]["parameters"]["paras"][j]["name"]); - outputParameters.push({ - id: outputIndex++, - name: nodeList[i]["parameters"]["paras"][j]["name"], - desc: nodeList[i]["parameters"]["paras"][j]["desc"], - type: nodeList[i]["parameters"]["paras"][j]["paraType"], - recordASField: nodeList[i]["parameters"]["paras"][j]["recordASField"], - exampleValue: nodeList[i]["parameters"]["paras"][j]["exampleValues"][0]["value"], - }); - } - } - } else if (nodeList[i]["option"] == 5) //自定义操作 - { - // if (nodeList[i]["parameters"]["recordASField"] == 1) { - let id = outputIndex++; - let title = nodeList[i]["title"]; - // if (outputNames.indexOf(title) >= 0) { //参数名称已经被添加 - // $('#myModal').modal('hide'); - // $("#tip2").slideDown(); //提示框 - // fadeout = setTimeout(function() { - // $("#tip2").slideUp(); - // }, 5000); - // return; - // } - outputNames.push(title); - outputParameters.push({ - id: id, - name: title, - desc: LANG("自定义操作返回的数据","Output of custom action"), - type: nodeList[i]["parameters"]["paraType"], - recordASField: nodeList[i]["parameters"]["recordASField"], - exampleValue: "", + inputParameters.push({ + id: inputIndex, + name: "urlList_" + inputIndex++, + nodeId: i, //记录操作位于的节点位置,重要!!! + nodeName: nodeList[i]["title"], + value: nodeList[i]["parameters"]["links"], + desc: LANG("要采集的网址列表,多行以\\n分开", "List of URLs to be collected, separated by \\n for multiple lines",), + type: "text", + exampleValue: nodeList[i]["parameters"]["links"] }); - // } - } else if (nodeList[i]["option"] == 9) //条件判断 - { - containJudge = true; + links = nodeList[i]["parameters"]["links"]; } + } else if (nodeList[i]["option"] == 4) //输入文字操作 + { + if (!nodeList[i]["parameters"]["useLoop"]) //如果不是使用循环里的文本 + { + inputParameters.push({ + id: inputIndex, + name: "inputText_" + inputIndex++, + nodeName: nodeList[i]["title"], + nodeId: i, + desc: LANG("要输入的文本,如京东搜索框输入:电脑", "The text to be entered, such as 'computer' at eBay search box"), + type: "text", + exampleValue: nodeList[i]["parameters"]["value"], + value: nodeList[i]["parameters"]["value"], + }); + } + } else if (nodeList[i]["option"] == 8) //循环操作 + { + if (parseInt(nodeList[i]["parameters"]["loopType"]) > 2 && parseInt(nodeList[i]["parameters"]["loopType"]) < 5) { //循环中的循环输入文本或循环输入网址 + inputParameters.push({ + id: inputIndex, + name: "loopText_" + inputIndex++, + nodeId: i, + nodeName: nodeList[i]["title"], + desc: LANG("要输入的文本/网址,多行以\\n分开", "Text/URL to be entered, multiple lines should be separated by \\n"), + type: "text", + exampleValue: nodeList[i]["parameters"]["textList"], + value: nodeList[i]["parameters"]["textList"], + }); + } else if (parseInt(nodeList[i]["parameters"]["loopType"]) == 0) { + inputParameters.push({ + id: inputIndex, + name: "loopTimes_" + nodeList[i]["title"] + "_" + inputIndex++, + nodeId: i, + nodeName: nodeList[i]["title"], + desc: LANG("循环" + nodeList[i]["title"] + "执行的次数(0代表无限循环)", "Number of loop executions for loop " + nodeList[i]["title"] + ", 0 means unlimited loops (until element not found)"), + type: "int", + exampleValue: nodeList[i]["parameters"]["exitCount"], + value: nodeList[i]["parameters"]["exitCount"], + }); + } + } else if (nodeList[i]["option"] == 3) //提取数据操作 + { + for (let j = 0; j < nodeList[i]["parameters"]["paras"].length; j++) { + if (outputNames.indexOf(nodeList[i]["parameters"]["paras"][j]["name"]) < 0) { //参数名称还未被添加 + outputNames.push(nodeList[i]["parameters"]["paras"][j]["name"]); + outputParameters.push({ + id: outputIndex++, + name: nodeList[i]["parameters"]["paras"][j]["name"], + desc: nodeList[i]["parameters"]["paras"][j]["desc"], + type: nodeList[i]["parameters"]["paras"][j]["paraType"], + recordASField: nodeList[i]["parameters"]["paras"][j]["recordASField"], + exampleValue: nodeList[i]["parameters"]["paras"][j]["exampleValues"][0]["value"], + }); + } + } + } else if (nodeList[i]["option"] == 5) //自定义操作 + { + // if (nodeList[i]["parameters"]["recordASField"] == 1) { + let id = outputIndex++; + let title = nodeList[i]["title"]; + // if (outputNames.indexOf(title) >= 0) { //参数名称已经被添加 + // $('#myModal').modal('hide'); + // $("#tip2").slideDown(); //提示框 + // fadeout = setTimeout(function() { + // $("#tip2").slideUp(); + // }, 5000); + // return; + // } + outputNames.push(title); + outputParameters.push({ + id: id, + name: title, + desc: LANG("自定义操作返回的数据", "Output of custom action"), + type: nodeList[i]["parameters"]["paraType"], + recordASField: nodeList[i]["parameters"]["recordASField"], + exampleValue: "", + }); + // } + } else if (nodeList[i]["option"] == 9) //条件判断 + { + containJudge = true; } } - serviceInfo = { - "id": parseInt(serviceId), - "name": serviceName, - "url": url, - "links": links, - "create_time": parseInt(serviceId) == -1 ? new Date().toLocaleString() : $("#create_time").val(), - "update_time": new Date().toLocaleString(), - "version": "0.6.0", - "saveThreshold": saveThreshold, - // "cloudflare": cloudflare, - "quitWaitTime": parseInt($("#quitWaitTime").val()), - "environment": environment, - "maximizeWindow": parseInt($("#maximizeWindow").val()), - "maxViewLength": parseInt($("#maxViewLength").val()), - "recordLog": parseInt($("#recordLog").val()), - "outputFormat": $("#outputFormat").val(), - "saveName": $("#saveName").val(), - "inputExcel": $("#inputExcel").val(), - "startFromExit": parseInt($("#startFromExit").val()), - "pauseKey": $("#pauseKey").val(), - "containJudge": containJudge, - "desc": serviceDescription, - "inputParameters": inputParameters, - "outputParameters": outputParameters, - "graph": nodeList, //图结构要存储下来 - }; - if(serviceInfo.outputFormat=="mysql"){ - if(!isValidMySQLTableName(serviceInfo.saveName)) { - $('#myModal').modal('hide'); - showError(LANG("提示:保存名不符合MySQL表名规范,请重试!","The save name is not valid for MySQL table name!")); - return; - } + } + serviceInfo = { + "id": parseInt(serviceId), + "name": serviceName, + "url": url, + "links": links, + "create_time": parseInt(serviceId) == -1 ? new Date().toLocaleString() : $("#create_time").val(), + "update_time": new Date().toLocaleString(), + "version": "0.6.0", + "saveThreshold": saveThreshold, + // "cloudflare": cloudflare, + "quitWaitTime": parseInt($("#quitWaitTime").val()), + "environment": environment, + "maximizeWindow": parseInt($("#maximizeWindow").val()), + "maxViewLength": parseInt($("#maxViewLength").val()), + "recordLog": parseInt($("#recordLog").val()), + "outputFormat": $("#outputFormat").val(), + "saveName": $("#saveName").val(), + "inputExcel": $("#inputExcel").val(), + "startFromExit": parseInt($("#startFromExit").val()), + "pauseKey": $("#pauseKey").val(), + "containJudge": containJudge, + "desc": serviceDescription, + "inputParameters": inputParameters, + "outputParameters": outputParameters, + "graph": nodeList, //图结构要存储下来 + }; + if (serviceInfo.outputFormat == "mysql") { + if (!isValidMySQLTableName(serviceInfo.saveName)) { + $('#myModal').modal('hide'); + showError(LANG("提示:保存名不符合MySQL表名规范,请重试!", "The save name is not valid for MySQL table name!")); + return; } - $.post(backEndAddressServiceWrapper + "/manageTask", { paras: JSON.stringify(serviceInfo) }, - function(result) { $("#serviceId").val(parseInt(result)) }); - // alert("保存成功!"); - $('#myModal').modal('hide'); - showSuccess(LANG("保存成功!","Save successfully!")); + } + $.post(backEndAddressServiceWrapper + "/manageTask", {paras: JSON.stringify(serviceInfo)}, + function (result) { + $("#serviceId").val(parseInt(result)) + if (type == 1) { //任务另存为 + let currentUrl = window.location.href; + let id = getUrlParam("id"); + let newUrl = currentUrl.replace("id=" + id, "id=" + result + "&saveAs=1"); + window.location.href = newUrl; + } + }); + // alert("保存成功!"); + $('#myModal').modal('hide'); + showSuccess(LANG("保存成功!", "Save successfully!")); // } } if (sId != null && sId != -1) //加载任务 { - $.get(backEndAddressServiceWrapper + "/queryTask?id=" + sId, function(result) { + $.get(backEndAddressServiceWrapper + "/queryTask?id=" + sId, function (result) { nodeList = result["graph"]; app.$data.list.nl = nodeList; - for(let node of nodeList){ //兼容旧版本 - if(node["option"] == 1){ - if(!("cookies" in node["parameters"])) { + for (let node of nodeList) { //兼容旧版本 + if (node["option"] == 1) { + if (!("cookies" in node["parameters"])) { node["parameters"]["cookies"] = ""; } } @@ -570,15 +600,18 @@ if (sId != null && sId != -1) //加载任务 $("#serviceId").val(result["id"]); $("#url").val(result["url"]); $("#serviceDescription").val(result["desc"]); - for(let key of Object.keys(result)){ - try{ - $("#"+key).val(result[key]); - } catch(e){ + for (let key of Object.keys(result)) { + try { + $("#" + key).val(result[key]); + } catch (e) { console.log(e); } } - if(result["version"]!= serviceInfo["version"]){ - showInfo(LANG("提示:该任务为" + result["version"] + "版本任务,当前版本为" + serviceInfo["version"] + ",可能存在兼容性问题,请按照当前版本指南设计任务流程以避免任务执行不正常。","This task is designed by EasySpider " + result["version"] + ", current version of EasySpider is " + serviceInfo["version"] + ", there may be compatibility issues, please design the task flow according to the current version guide to avoid abnormal task execution.")); + if (result["version"] != serviceInfo["version"]) { + showInfo(LANG("提示:该任务为" + result["version"] + "版本任务,当前版本为" + serviceInfo["version"] + ",可能存在兼容性问题,请按照当前版本指南设计任务流程以避免任务执行不正常。", "This task is designed by EasySpider " + result["version"] + ", current version of EasySpider is " + serviceInfo["version"] + ", there may be compatibility issues, please design the task flow according to the current version guide to avoid abnormal task execution.")); + } + if (getUrlParam("saveAs") == 1) { + showSuccess(LANG("另存为成功!", "Save as successfully!")); } refresh(); }); @@ -587,7 +620,7 @@ if (sId != null && sId != -1) //加载任务 } function LANG(zh, en) { - if(window.location.href.indexOf("_CN") != -1){ + if (window.location.href.indexOf("_CN") != -1) { return zh; } else { return en; diff --git a/ElectronJS/src/taskGrid/taskList.html b/ElectronJS/src/taskGrid/taskList.html index 1007bef..76fc60d 100644 --- a/ElectronJS/src/taskGrid/taskList.html +++ b/ElectronJS/src/taskGrid/taskList.html @@ -56,7 +56,7 @@ {{list[i-1]["url"]}} {{"Task Information~任务信息" | lang}} {{"Modify Task~修改任务" | lang}} - {{"Delete Task~删除任务" | lang}} + {{"Delete Task (Double Click)~删除任务(双击)" | lang}} @@ -96,13 +96,13 @@ window.location.href = "taskInfo.html?type="+getUrlParam("type")+"&id=" + id + "&lang="+getUrlParam("lang")+"&wsport="+getUrlParam("wsport")+"&backEndAddressServiceWrapper="+ app.$data.backEndAddressServiceWrapper; //跳转链接 }, deleteTask: function(id) { - let text = "Are you sure to remove the selected task?"; - if (getUrlParam("lang") == "en"|| getUrlParam("lang")=="") { - text = "Are you sure to remove the selected task?"; - } else if (getUrlParam("lang") == "zh") { - text = "确定要删除选中的任务吗?"; - } - if (confirm(text)) { + // let text = "Are you sure to remove the selected task?"; + // if (getUrlParam("lang") == "en"|| getUrlParam("lang")=="") { + // text = "Are you sure to remove the selected task?"; + // } else if (getUrlParam("lang") == "zh") { + // text = "确定要删除选中的任务吗?"; + // } + // if (confirm(text)) { $.get(app.$data.backEndAddressServiceWrapper + "/deleteTask?id=" + id, function(res) { $.get(app.$data.backEndAddressServiceWrapper + "/queryTasks", function(re) { result = re.sort(desc); @@ -110,7 +110,7 @@ }); }); // alert("Sorry, the task cannot be deleted since the system is a demo system for paper reviewers, please contact the author (naibowang@u.nus.edu) to remove it.") - } + // } }, } }); diff --git a/ElectronJS/tasks/215.json b/ElectronJS/tasks/215.json index 066176e..568540f 100644 --- a/ElectronJS/tasks/215.json +++ b/ElectronJS/tasks/215.json @@ -1 +1 @@ -{"id":215,"name":"弹窗示例","url":"https://easyspider.cn/test_pages/alert_test.html","links":"https://easyspider.cn/test_pages/alert_test.html","create_time":"12/5/2023, 1:53:45 AM","update_time":"12/6/2023, 9:33:12 PM","version":"0.6.0","saveThreshold":10,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://easyspider.cn/test_pages/alert_test.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://easyspider.cn/test_pages/alert_test.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://easyspider.cn/test_pages/alert_test.html"}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n 弹窗示例\n \n \n function showAlert() {\n alert('你已经点击了按钮!');\n }\n \n\n\n\n#wrapperToolkitIframe{\n position: absolute;\n top:0;\n}\n.toolcannotdrag{\n background-color: navy;\n width: 100%;\n text-align: center;\n font-size: 13px;\n height: 26px !important;\n padding-top: 8px !important;\n color: white;\n}\n\n\n点击我\n\n\n ✖ ✍操作台(点此拖动,左上角调整大小) \n ● 已选中1个元素,您可以:\n 确认采集 取消选择 Path: //html \n"},{"id":1,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":2,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,4,3,5],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://easyspider.cn/test_pages/alert_test.html","links":"https://easyspider.cn/test_pages/alert_test.html","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":-1,"index":2,"parentId":0,"type":0,"option":2,"title":"点击点击我","sequence":[],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/button[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":2,"allXPaths":["/html/body/button[1]","//button[contains(., '点击我')]","/html/body/button"]}},{"id":3,"index":3,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"参数1_文本","desc":"","extractType":0,"relativeXPath":"/html/body[1]/p[eval(\"self.a+1\")]","allXPaths":["//html[1]","//html[contains(., '弹窗示例')]","/html"],"exampleValues":[{"num":0,"value":"\n 弹窗示例\n \n \n function showAlert() {\n alert('你已经点击了按钮!');\n }\n \n\n\n\n#wrapperToolkitIframe{\n position: absolute;\n top:0;\n}\n.toolcannotdrag{\n background-color: navy;\n width: 100%;\n text-align: center;\n font-size: 13px;\n height: 26px !important;\n padding-top: 8px !important;\n color: white;\n}\n\n\n点击我\n\n\n ✖ ✍操作台(点此拖动,左上角调整大小) \n ● 已选中1个元素,您可以:\n 确认采集 取消选择 Path: //html \n"}],"unique_index":"d8of3rzoypelpr7n0qm","iframe":false,"default":"12345","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"alert(eval(\"self.a+2+int('1')\"))","afterJSWaitTime":0,"downloadPic":0}]}},{"id":2,"index":4,"parentId":0,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"self.a = 1\nself.b = \"45\"","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":4,"index":5,"parentId":0,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":false,"position":3,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":0,"code":"console.log(\"Field[\"参数1_文本\"]Field[\"参数1_文本\"]\")","waitTime":0,"recordASField":0,"paraType":"text"}}]} \ No newline at end of file +{"id":215,"name":"弹窗示例","url":"https://easyspider.cn/test_pages/alert_test.html","links":"https://easyspider.cn/test_pages/alert_test.html","create_time":"12/5/2023, 1:53:45 AM","update_time":"12/13/2023, 3:50:21 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://easyspider.cn/test_pages/alert_test.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://easyspider.cn/test_pages/alert_test.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://easyspider.cn/test_pages/alert_test.html"}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n 弹窗示例\n \n \n function showAlert() {\n alert('你已经点击了按钮!');\n }\n \n\n\n\n#wrapperToolkitIframe{\n position: absolute;\n top:0;\n}\n.toolcannotdrag{\n background-color: navy;\n width: 100%;\n text-align: center;\n font-size: 13px;\n height: 26px !important;\n padding-top: 8px !important;\n color: white;\n}\n\n\n点击我\n\n\n ✖ ✍操作台(点此拖动,左上角调整大小) \n ● 已选中1个元素,您可以:\n 确认采集 取消选择 Path: //html \n"},{"id":1,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":2,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,4,3,5],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://easyspider.cn/test_pages/alert_test.html","links":"https://easyspider.cn/test_pages/alert_test.html","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":-1,"index":2,"parentId":0,"type":0,"option":2,"title":"点击点击我","sequence":[],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/button[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":2,"allXPaths":["/html/body/button[1]","//button[contains(., '点击我')]","/html/body/button"]}},{"id":3,"index":3,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"参数1_文本","desc":"","extractType":0,"relativeXPath":"/html/body[1]/p[eval(\"self.a+1\")]","allXPaths":["//html[1]","//html[contains(., '弹窗示例')]","/html"],"exampleValues":[{"num":0,"value":"\n 弹窗示例\n \n \n function showAlert() {\n alert('你已经点击了按钮!');\n }\n \n\n\n\n#wrapperToolkitIframe{\n position: absolute;\n top:0;\n}\n.toolcannotdrag{\n background-color: navy;\n width: 100%;\n text-align: center;\n font-size: 13px;\n height: 26px !important;\n padding-top: 8px !important;\n color: white;\n}\n\n\n点击我\n\n\n ✖ ✍操作台(点此拖动,左上角调整大小) \n ● 已选中1个元素,您可以:\n 确认采集 取消选择 Path: //html \n"}],"unique_index":"d8of3rzoypelpr7n0qm","iframe":false,"default":"12345","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"alert(eval(\"self.a+2+int('1')\"))","afterJSWaitTime":0,"downloadPic":0}]}},{"id":2,"index":4,"parentId":0,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"self.a = 1\nself.b = \"45\"","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":4,"index":5,"parentId":0,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":false,"position":3,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":0,"code":"console.log(\"Field[\"参数1_文本\"]Field[\"参数1_文本\"]\")","waitTime":0,"recordASField":0,"paraType":"text"}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/221.json b/ElectronJS/tasks/221.json index c5060db..b3faf5c 100644 --- a/ElectronJS/tasks/221.json +++ b/ElectronJS/tasks/221.json @@ -1,889 +1 @@ -{ - "id": 221, - "name": "不固定元素列表测试:【软科排名】-中国最好学科排名|最权威的大学学科|高校学科排名", - "url": "https://www.shanghairanking.cn/rankings/bcsr/2023", - "links": "https://www.shanghairanking.cn/rankings/bcsr/2023", - "create_time": "12/5/2023, 4:12:11 AM", - "update_time": "12/10/2023, 5:56:54 AM", - "version": "0.6.0", - "saveThreshold": 10, - "quitWaitTime": 60, - "environment": 0, - "maximizeWindow": 0, - "maxViewLength": 15, - "recordLog": 1, - "outputFormat": "xlsx", - "saveName": "current_time", - "inputExcel": "", - "startFromExit": 0, - "pauseKey": "p", - "containJudge": false, - "desc": "https://www.shanghairanking.cn/rankings/bcsr/2023", - "inputParameters": [ - { - "id": 0, - "name": "urlList_0", - "nodeId": 1, - "nodeName": "打开网页", - "value": "https://www.shanghairanking.cn/rankings/bcsr/2023", - "desc": "要采集的网址列表,多行以\\n分开", - "type": "text", - "exampleValue": "https://www.shanghairanking.cn/rankings/bcsr/2023" - }, - { - "id": 1, - "name": "loopTimes_循环点击单个元素_1", - "nodeId": 6, - "nodeName": "循环点击单个元素", - "desc": "循环循环点击单个元素执行的次数(0代表无限循环)", - "type": "int", - "exampleValue": 0, - "value": 0 - } - ], - "outputParameters": [ - { - "id": 0, - "name": "参数1_文本", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "1" - }, - { - "id": 1, - "name": "参数2_文本", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "1" - }, - { - "id": 2, - "name": "参数3_文本", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "前3%" - }, - { - "id": 3, - "name": "参数4_图片地址", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "https://www.shanghairanking.cn/_uni/logo/28312850.png" - }, - { - "id": 4, - "name": "参数5_链接文本", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "复旦大学\n " - }, - { - "id": 5, - "name": "参数6_链接地址", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "/institution/fudan-university" - }, - { - "id": 6, - "name": "参数7_图片地址", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "/_nuxt/img/uncollection.388fe56.svg" - }, - { - "id": 7, - "name": "参数8_链接文本", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "\n " - }, - { - "id": 8, - "name": "参数9_链接地址", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "/institution/fudan-university" - }, - { - "id": 9, - "name": "参数10_文本", - "desc": "", - "type": "text", - "recordASField": 1, - "exampleValue": "1044" - }, - { - "id": 10, - "name": "发送邮件123", - "desc": "自定义操作返回的数据", - "type": "text", - "recordASField": 0, - "exampleValue": "" - } - ], - "graph": [ - { - "index": 0, - "id": 0, - "parentId": 0, - "type": -1, - "option": 0, - "title": "root", - "sequence": [1, 8, 2], - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "iframe": false, - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0 - }, - "isInLoop": false - }, - { - "id": 1, - "index": 1, - "parentId": 0, - "type": 0, - "option": 1, - "title": "打开网页", - "sequence": [], - "isInLoop": false, - "position": 0, - "parameters": { - "useLoop": false, - "xpath": "", - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "url": "https://www.shanghairanking.cn/rankings/bcsr/2023", - "links": "https://www.shanghairanking.cn/rankings/bcsr/2023", - "maxWaitTime": 10, - "scrollType": 0, - "scrollCount": 1, - "scrollWaitTime": 1, - "cookies": "" - } - }, - { - "id": 3, - "index": 2, - "parentId": 0, - "type": 1, - "option": 8, - "title": "循环点击每个元素", - "sequence": [3, 6], - "isInLoop": false, - "position": 2, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": false, - "xpath": "/html/body/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div/div[2]/div/a[1]/span[2]", - "iframe": false, - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "scrollType": 0, - "scrollCount": 1, - "scrollWaitTime": 1, - "loopType": 1, - "pathList": "", - "textList": "", - "code": "", - "waitTime": 0, - "exitCount": 0, - "historyWait": 2, - "breakMode": 0, - "breakCode": "", - "breakCodeWaitTime": 0, - "allXPaths": "" - } - }, - { - "id": 4, - "index": 3, - "parentId": 3, - "type": 0, - "option": 2, - "title": "点击元素", - "sequence": [], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 4, - "tabIndex": -1, - "useLoop": true, - "xpath": "", - "iframe": false, - "wait": 2, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "scrollType": 0, - "scrollCount": 1, - "scrollWaitTime": 1, - "clickWay": 0, - "maxWaitTime": 10, - "paras": [], - "alertHandleType": 0, - "allXPaths": "", - "loopType": 1, - "codeMode": -1 - } - }, - { - "id": 6, - "index": 4, - "parentId": 5, - "type": 1, - "option": 8, - "title": "循环采集数据", - "sequence": [5], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": false, - "xpath": "/html/body/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div[1]/div[2]/table[1]/tbody[1]/tr", - "iframe": false, - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "scrollType": 0, - "scrollCount": 1, - "scrollWaitTime": 1, - "loopType": 1, - "pathList": "", - "textList": "", - "code": "", - "waitTime": 0, - "exitCount": 0, - "historyWait": 2, - "breakMode": 0, - "breakCode": "", - "breakCodeWaitTime": 0, - "allXPaths": [ - "/html/body/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div[1]/div[2]/table[1]/tbody[1]/tr[1]", - "//tr[contains(., '')]", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]" - ] - } - }, - { - "id": 8, - "index": 5, - "parentId": 6, - "type": 0, - "option": 3, - "title": "提取数据", - "sequence": [], - "isInLoop": true, - "position": 0, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": false, - "xpath": "", - "iframe": false, - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "clear": 0, - "newLine": 1, - "paras": [ - { - "nodeType": 0, - "contentType": 1, - "relative": true, - "name": "参数1_文本", - "desc": "", - "relativeXPath": "/td[1]/div[1]", - "allXPaths": [ - "/td[1]/div[1]", - "//div[contains(., '')]", - "//DIV[@class='ranking']", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-4]/div" - ], - "exampleValues": [{ "num": 0, "value": "1" }], - "unique_index": "/td[1]/div[1]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - }, - { - "nodeType": 0, - "contentType": 1, - "relative": true, - "name": "参数2_文本", - "desc": "", - "relativeXPath": "/td[2]/span[1]", - "allXPaths": [ - "/td[2]/span[1]", - "//span[contains(., '1')]", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-3]/span" - ], - "exampleValues": [{ "num": 0, "value": "1" }], - "unique_index": "/td[2]/span[1]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - }, - { - "nodeType": 0, - "contentType": 1, - "relative": true, - "name": "参数3_文本", - "desc": "", - "relativeXPath": "/td[3]", - "allXPaths": [ - "/td[3]", - "//td[contains(., '')]", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-2]" - ], - "exampleValues": [{ "num": 0, "value": "前3%" }], - "unique_index": "/td[3]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - }, - { - "nodeType": 4, - "contentType": 1, - "relative": true, - "name": "参数4_图片地址", - "desc": "", - "relativeXPath": "/td[4]/div[1]/div[1]/img[1]", - "allXPaths": [ - "/td[4]/div[1]/div[1]/img[1]", - "//img[contains(., '')]", - "//IMG[@class='univ-logo']", - "//IMG[@alt='复旦大学']", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div[last()-1]/img" - ], - "exampleValues": [ - { - "num": 0, - "value": "https://www.shanghairanking.cn/_uni/logo/28312850.png" - } - ], - "unique_index": "/td[4]/div[1]/div[1]/img[1]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - }, - { - "nodeType": 1, - "contentType": 0, - "relative": true, - "name": "参数5_链接文本", - "desc": "", - "relativeXPath": "/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]", - "allXPaths": [ - "/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]", - "//a[contains(., '复旦大学')]", - "//A[@class='name-cn']", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div[last()-1]/div/div/a" - ], - "exampleValues": [{ "num": 0, "value": "复旦大学\n " }], - "unique_index": "/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - }, - { - "nodeType": 2, - "contentType": 0, - "relative": true, - "name": "参数6_链接地址", - "desc": "", - "relativeXPath": "/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]", - "allXPaths": [ - "/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]", - "//a[contains(., '复旦大学')]", - "//A[@class='name-cn']", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div[last()-1]/div/div/a" - ], - "exampleValues": [ - { "num": 0, "value": "/institution/fudan-university" } - ], - "unique_index": "/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - }, - { - "nodeType": 4, - "contentType": 1, - "relative": true, - "name": "参数7_图片地址", - "desc": "", - "relativeXPath": "/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/img[1]", - "allXPaths": [ - "/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/img[1]", - "//img[contains(., '')]", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div[last()-1]/div/div/div/img" - ], - "exampleValues": [ - { "num": 0, "value": "/_nuxt/img/uncollection.388fe56.svg" } - ], - "unique_index": "/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/img[1]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - }, - { - "nodeType": 1, - "contentType": 0, - "relative": true, - "name": "参数8_链接文本", - "desc": "", - "relativeXPath": "/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]", - "allXPaths": [ - "/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]", - "//a[contains(., '')]", - "//A[@class='name-en']", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div/div/div/a" - ], - "exampleValues": [{ "num": 0, "value": "\n " }], - "unique_index": "/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - }, - { - "nodeType": 2, - "contentType": 0, - "relative": true, - "name": "参数9_链接地址", - "desc": "", - "relativeXPath": "/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]", - "allXPaths": [ - "/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]", - "//a[contains(., '')]", - "//A[@class='name-en']", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div/div/div/a" - ], - "exampleValues": [ - { "num": 0, "value": "/institution/fudan-university" } - ], - "unique_index": "/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - }, - { - "nodeType": 0, - "contentType": 1, - "relative": true, - "name": "参数10_文本", - "desc": "", - "relativeXPath": "/td[5]", - "allXPaths": [ - "/td[5]", - "//td[contains(., '')]", - "/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td" - ], - "exampleValues": [{ "num": 0, "value": "1044" }], - "unique_index": "/td[5]", - "iframe": false, - "default": "", - "paraType": "text", - "recordASField": 1, - "beforeJS": "", - "beforeJSWaitTime": 0, - "JS": "", - "JSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "downloadPic": 0 - } - ] - } - }, - { - "id": 5, - "index": 6, - "parentId": 3, - "type": 1, - "option": 8, - "title": "循环点击单个元素", - "sequence": [4, 7], - "isInLoop": true, - "position": 1, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": false, - "xpath": "//*[contains(@class, \"ant-pagination-next\")]/a[1]", - "iframe": false, - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "scrollType": 0, - "scrollCount": 1, - "scrollWaitTime": 1, - "loopType": 0, - "pathList": "", - "textList": "", - "code": "", - "waitTime": 0, - "exitCount": 0, - "historyWait": 2, - "breakMode": 0, - "breakCode": "", - "breakCodeWaitTime": 0, - "allXPaths": [ - "/html/body/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div[1]/ul[1]/li[5]/a[1]", - "//a[contains(., '')]", - "//A[@class='ant-pagination-item-link']", - "/html/body/div[last()-3]/div/div/div[last()-2]/div/div/div/div[last()-1]/div/ul/li[last()-1]/a" - ], - "codeMode": -1 - } - }, - { - "id": 7, - "index": 7, - "parentId": 5, - "type": 0, - "option": 2, - "title": "点击元素", - "sequence": [], - "isInLoop": true, - "position": 1, - "parameters": { - "history": 5, - "tabIndex": -1, - "useLoop": true, - "xpath": "", - "iframe": false, - "wait": 2, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "scrollType": 0, - "scrollCount": 1, - "scrollWaitTime": 1, - "clickWay": 0, - "maxWaitTime": 10, - "paras": [], - "alertHandleType": 0, - "allXPaths": [ - "/html/body/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div[1]/ul[1]/li[5]/a[1]", - "//a[contains(., '')]", - "//A[@class='ant-pagination-item-link']", - "/html/body/div[last()-3]/div/div/div[last()-2]/div/div/div/div[last()-1]/div/ul/li[last()-1]/a" - ], - "loopType": 0 - } - }, - { - "id": 2, - "index": 8, - "parentId": 0, - "type": 0, - "option": 5, - "title": "发送邮件123", - "sequence": [], - "isInLoop": false, - "position": 1, - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "iframe": false, - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "clear": 0, - "newLine": 1, - "codeMode": "9", - "code": "", - "waitTime": 0, - "recordASField": 0, - "paraType": "text", - "emailConfig": { - "host": "smtp.163.co23m", - "port": "465", - "username": "test@163.com", - "password": "asdf", - "from": "", - "to": "test@163.com", - "subject": "123", - "content": "434" - } - } - }, - { - "id": -1, - "index": 9, - "parentId": 0, - "type": 0, - "option": 5, - "title": "暂停程序", - "sequence": [], - "isInLoop": false, - "position": 1, - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "iframe": false, - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "clear": 0, - "newLine": 1, - "codeMode": "7", - "code": "", - "waitTime": 0, - "recordASField": 0, - "paraType": "text", - "emailConfig": { - "host": "", - "port": 465, - "username": "", - "password": "", - "from": "", - "to": "", - "subject": "", - "content": "" - } - } - }, - { - "id": -1, - "index": 10, - "parentId": 0, - "type": 0, - "option": 5, - "title": "执行JavaScript", - "sequence": [], - "isInLoop": false, - "position": 1, - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "iframe": false, - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "clear": 0, - "newLine": 1, - "codeMode": "0", - "code": "", - "waitTime": 0, - "recordASField": 0, - "paraType": "text", - "emailConfig": { - "host": "", - "port": 465, - "username": "", - "password": "", - "from": "", - "to": "", - "subject": "", - "content": "" - } - } - }, - { - "id": -1, - "index": 11, - "parentId": 0, - "type": 0, - "option": 5, - "title": "暂停程序dfgs", - "sequence": [], - "isInLoop": false, - "position": 1, - "parameters": { - "history": 1, - "tabIndex": 0, - "useLoop": false, - "xpath": "", - "iframe": false, - "wait": 0, - "waitType": 0, - "beforeJS": "", - "beforeJSWaitTime": 0, - "afterJS": "", - "afterJSWaitTime": 0, - "waitElement": "", - "waitElementTime": 10, - "waitElementIframeIndex": 0, - "clear": 0, - "newLine": 1, - "codeMode": "7", - "code": "", - "waitTime": 0, - "recordASField": 0, - "paraType": "text", - "emailConfig": { - "host": "", - "port": 465, - "username": "", - "password": "", - "from": "", - "to": "", - "subject": "", - "content": "" - } - } - } - ] -} +{"id":221,"name":"不固定元素列表测试:【软科排名】-中国最好学科排名|最权威的大学学科|高校学科排名","url":"https://www.shanghairanking.cn/rankings/bcsr/2023","links":"https://www.shanghairanking.cn/rankings/bcsr/2023","create_time":"12/5/2023, 4:12:11 AM","update_time":"12/13/2023, 3:06:51 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://www.shanghairanking.cn/rankings/bcsr/2023","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.shanghairanking.cn/rankings/bcsr/2023","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.shanghairanking.cn/rankings/bcsr/2023"},{"id":1,"name":"loopTimes_循环点击单个元素_1","nodeId":6,"nodeName":"循环点击单个元素","desc":"循环循环点击单个元素执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"1"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"1"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"前3%"},{"id":3,"name":"参数4_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://www.shanghairanking.cn/_uni/logo/28312850.png"},{"id":4,"name":"参数5_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"复旦大学\n "},{"id":5,"name":"参数6_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"/institution/fudan-university"},{"id":6,"name":"参数7_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"/_nuxt/img/uncollection.388fe56.svg"},{"id":7,"name":"参数8_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n "},{"id":8,"name":"参数9_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"/institution/fudan-university"},{"id":9,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"1044"},{"id":10,"name":"自定义参数_1","desc":"","type":"text","recordASField":1,"exampleValue":"自定义值"},{"id":11,"name":"发送邮件123","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,8,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.shanghairanking.cn/rankings/bcsr/2023","links":"https://www.shanghairanking.cn/rankings/bcsr/2023","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":3,"index":2,"parentId":0,"type":1,"option":8,"title":"循环点击每个元素","sequence":[3,6],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div/div[2]/div/a[1]/span[2]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":""}},{"id":4,"index":3,"parentId":3,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":"","loopType":1,"codeMode":-1,"newTab":1}},{"id":6,"index":4,"parentId":5,"type":1,"option":8,"title":"循环采集数据","sequence":[5],"isInLoop":true,"position":0,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div[1]/div[2]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div[1]/div[2]/table[1]/tbody[1]/tr[1]","//tr[contains(., '')]","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]"]}},{"id":8,"index":5,"parentId":6,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[1]/div[1]","allXPaths":["/td[1]/div[1]","//div[contains(., '')]","//DIV[@class='ranking']","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-4]/div"],"exampleValues":[{"num":0,"value":"1"}],"unique_index":"/td[1]/div[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/td[2]/span[1]","allXPaths":["/td[2]/span[1]","//span[contains(., '1')]","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-3]/span"],"exampleValues":[{"num":0,"value":"1"}],"unique_index":"/td[2]/span[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数3_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '')]","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-2]"],"exampleValues":[{"num":0,"value":"前3%"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":4,"contentType":1,"relative":true,"name":"参数4_图片地址","desc":"","relativeXPath":"/td[4]/div[1]/div[1]/img[1]","allXPaths":["/td[4]/div[1]/div[1]/img[1]","//img[contains(., '')]","//IMG[@class='univ-logo']","//IMG[@alt='复旦大学']","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div[last()-1]/img"],"exampleValues":[{"num":0,"value":"https://www.shanghairanking.cn/_uni/logo/28312850.png"}],"unique_index":"/td[4]/div[1]/div[1]/img[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数5_链接文本","desc":"","relativeXPath":"/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]","allXPaths":["/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]","//a[contains(., '复旦大学')]","//A[@class='name-cn']","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div[last()-1]/div/div/a"],"exampleValues":[{"num":0,"value":"复旦大学\n "}],"unique_index":"/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数6_链接地址","desc":"","relativeXPath":"/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]","allXPaths":["/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]","//a[contains(., '复旦大学')]","//A[@class='name-cn']","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div[last()-1]/div/div/a"],"exampleValues":[{"num":0,"value":"/institution/fudan-university"}],"unique_index":"/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":4,"contentType":1,"relative":true,"name":"参数7_图片地址","desc":"","relativeXPath":"/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/img[1]","allXPaths":["/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div[last()-1]/div/div/div/img"],"exampleValues":[{"num":0,"value":"/_nuxt/img/uncollection.388fe56.svg"}],"unique_index":"/td[4]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/img[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数8_链接文本","desc":"","relativeXPath":"/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]","allXPaths":["/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]","//a[contains(., '')]","//A[@class='name-en']","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div/div/div/a"],"exampleValues":[{"num":0,"value":"\n "}],"unique_index":"/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数9_链接地址","desc":"","relativeXPath":"/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]","allXPaths":["/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]","//a[contains(., '')]","//A[@class='name-en']","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td[last()-1]/div/div/div/div/div/a"],"exampleValues":[{"num":0,"value":"/institution/fudan-university"}],"unique_index":"/td[4]/div[1]/div[2]/div[2]/div[1]/div[1]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '')]","/html/body/div[last()-3]/div/div/div[last()-1]/div/div/div/div[last()-1]/div/div[last()-1]/table/tbody/tr[last()-29]/td"],"exampleValues":[{"num":0,"value":"1044"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":0,"relative":false,"name":"自定义参数_1","desc":"","iframe":false,"extractType":0,"relativeXPath":"//body","recordASField":1,"allXPaths":[],"exampleValues":[{"num":0,"value":"自定义值"}],"default":"","beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0,"paraType":"text"}]}},{"id":5,"index":6,"parentId":3,"type":1,"option":8,"title":"循环点击单个元素","sequence":[4,7],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"ant-pagination-next\")]/a[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div[1]/ul[1]/li[5]/a[1]","//a[contains(., '')]","//A[@class='ant-pagination-item-link']","/html/body/div[last()-3]/div/div/div[last()-2]/div/div/div/div[last()-1]/div/ul/li[last()-1]/a"],"codeMode":-1}},{"id":7,"index":7,"parentId":5,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[2]/div[1]/div[3]/div[2]/div[1]/div[1]/ul[1]/li[5]/a[1]","//a[contains(., '')]","//A[@class='ant-pagination-item-link']","/html/body/div[last()-3]/div/div/div[last()-2]/div/div/div/div[last()-1]/div/ul/li[last()-1]/a"],"loopType":0}},{"id":2,"index":8,"parentId":0,"type":0,"option":5,"title":"发送邮件123","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"9","code":"","waitTime":0,"recordASField":0,"paraType":"text","emailConfig":{"host":"smtp.163.co23m","port":"465","username":"test@163.com","password":"asdf","from":"","to":"test@163.com","subject":"123","content":"434"}}},{"id":-1,"index":9,"parentId":0,"type":0,"option":5,"title":"暂停程序","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"7","code":"","waitTime":0,"recordASField":0,"paraType":"text","emailConfig":{"host":"","port":465,"username":"","password":"","from":"","to":"","subject":"","content":""}}},{"id":-1,"index":10,"parentId":0,"type":0,"option":5,"title":"执行JavaScript","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"0","code":"","waitTime":0,"recordASField":0,"paraType":"text","emailConfig":{"host":"","port":465,"username":"","password":"","from":"","to":"","subject":"","content":""}}},{"id":-1,"index":11,"parentId":0,"type":0,"option":5,"title":"暂停程序dfgs","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"7","code":"","waitTime":0,"recordASField":0,"paraType":"text","emailConfig":{"host":"","port":465,"username":"","password":"","from":"","to":"","subject":"","content":""}}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/237.json b/ElectronJS/tasks/237.json index 6a780b1..b2a0244 100644 --- a/ElectronJS/tasks/237.json +++ b/ElectronJS/tasks/237.json @@ -1 +1 @@ -{"id":237,"name":"EXEC自定义函数示例:中国地震台网——历史查询","url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","create_time":"12/9/2023, 3:36:47 AM","update_time":"12/11/2023, 4:27:41 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"k","containJudge":false,"desc":"https://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.ceic.ac.cn/history"},{"id":1,"name":"loopText_1","nodeId":2,"nodeName":"循环","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"15\n25\n35","value":"15\n25\n35"},{"id":2,"name":"loopTimes_循环点击单个元素_2","nodeId":5,"nodeName":"循环点击单个元素","desc":"循环循环点击单个元素执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"3.7"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"2023-11-3003:44:10"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.53"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"112.47"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"28"},{"id":5,"name":"参数6_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"山西太原市清徐县"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20231130034410.html"},{"id":7,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"震级(M)"},{"id":8,"name":"参数9_文本","desc":"","type":"text","recordASField":1,"exampleValue":"发震时刻(UTC+8)"},{"id":9,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"纬度(°)"},{"id":10,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"经度(°)"},{"id":11,"name":"参数12_文本","desc":"","type":"text","recordASField":1,"exampleValue":"深度(千米)"},{"id":12,"name":"参数13_文本","desc":"","type":"text","recordASField":1,"exampleValue":"参考位置"},{"id":13,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[3,4,9,5],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":"3","pathList":"","textList":"15\n25\n35","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":3,"index":3,"parentId":2,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"weidu1\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[2]/input[1]","//input[contains(., '')]","id(\"weidu1\")","//INPUT[@class='span1']","//INPUT[@name='weidu1']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div[last()-3]/input[last()-1]"]}},{"id":4,"index":4,"parentId":2,"type":0,"option":2,"title":"点击查询","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","//a[contains(., '查询')]","id(\"search\")","//A[@class='check']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div/a"]}},{"id":6,"index":5,"parentId":2,"type":1,"option":8,"title":"循环点击单个元素","sequence":[7,6],"isInLoop":true,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"]}},{"id":8,"index":6,"parentId":6,"type":0,"option":2,"title":"点击»","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"],"loopType":0}},{"id":7,"index":7,"parentId":6,"type":1,"option":8,"title":"循环采集数据","sequence":[8],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[1]","//tr[contains(., '震级(M)发震时刻(')]","//TR[@class='speed-tr-h1']","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]"]}},{"id":9,"index":8,"parentId":7,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[eval(\"self.test()\")]","allXPaths":["/td[1]","//td[contains(., '3.7')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-5]"],"exampleValues":[{"num":0,"value":"3.7"}],"unique_index":"/td[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/td[2]","allXPaths":["/td[2]","//td[contains(., '2023-11-30')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-4]"],"exampleValues":[{"num":0,"value":"2023-11-3003:44:10"}],"unique_index":"/td[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"arguments[0].innerText = \"123\"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数3_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '37.53')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-3]"],"exampleValues":[{"num":0,"value":"37.53"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数4_文本","desc":"","relativeXPath":"/td[4]","allXPaths":["/td[4]","//td[contains(., '112.47')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-2]"],"exampleValues":[{"num":0,"value":"112.47"}],"unique_index":"/td[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数5_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '28')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-1]"],"exampleValues":[{"num":0,"value":"28"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数6_链接文本","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"山西太原市清徐县"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数7_链接地址","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"https://news.ceic.ac.cn/CC20231130034410.html"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/th[1]","allXPaths":["/th[1]","//th[contains(., '震级(M)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-5]"],"exampleValues":[{"num":1,"value":"震级(M)"}],"unique_index":"/th[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数9_文本","desc":"","relativeXPath":"/th[2]","allXPaths":["/th[2]","//th[contains(., '发震时刻(UTC+8')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-4]"],"exampleValues":[{"num":1,"value":"发震时刻(UTC+8)"}],"unique_index":"/th[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/th[3]","allXPaths":["/th[3]","//th[contains(., '纬度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-3]"],"exampleValues":[{"num":1,"value":"纬度(°)"}],"unique_index":"/th[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/th[4]","allXPaths":["/th[4]","//th[contains(., '经度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-2]"],"exampleValues":[{"num":1,"value":"经度(°)"}],"unique_index":"/th[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数12_文本","desc":"","relativeXPath":"/th[5]","allXPaths":["/th[5]","//th[contains(., '深度(千米)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-1]"],"exampleValues":[{"num":1,"value":"深度(千米)"}],"unique_index":"/th[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数13_文本","desc":"","relativeXPath":"/th[6]","allXPaths":["/th[6]","//th[contains(., '参考位置')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th"],"exampleValues":[{"num":1,"value":"参考位置"}],"unique_index":"/th[6]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":5,"index":9,"parentId":2,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"def test():\n a = 1\n print(\"AMESSAGE:\",a)\n return a\nself.test =test","waitTime":0,"recordASField":0,"paraType":"text"}}]} \ No newline at end of file +{"id":237,"name":"EXEC自定义函数示例:中国地震台网——历史查询","url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","create_time":"12/9/2023, 3:36:47 AM","update_time":"12/12/2023, 7:12:50 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"k","containJudge":true,"desc":"https://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.ceic.ac.cn/history"},{"id":1,"name":"loopText_1","nodeId":2,"nodeName":"循环","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"15\n25\n35","value":"15\n25\n35"},{"id":2,"name":"loopTimes_循环点击单个元素_2","nodeId":5,"nodeName":"循环点击单个元素","desc":"循环循环点击单个元素执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"3.7"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"2023-11-3003:44:10"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.53"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"112.47"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"28"},{"id":5,"name":"参数6_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"山西太原市清徐县"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20231130034410.html"},{"id":7,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"震级(M)"},{"id":8,"name":"参数9_文本","desc":"","type":"text","recordASField":1,"exampleValue":"发震时刻(UTC+8)"},{"id":9,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"纬度(°)"},{"id":10,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"经度(°)"},{"id":11,"name":"参数12_文本","desc":"","type":"text","recordASField":1,"exampleValue":"深度(千米)"},{"id":12,"name":"参数13_文本","desc":"","type":"text","recordASField":1,"exampleValue":"参考位置"},{"id":13,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[3,4,9,5],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":"3","pathList":"","textList":"15\n25\n35","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":3,"index":3,"parentId":2,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"weidu1\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[2]/input[1]","//input[contains(., '')]","id(\"weidu1\")","//INPUT[@class='span1']","//INPUT[@name='weidu1']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div[last()-3]/input[last()-1]"]}},{"id":4,"index":4,"parentId":2,"type":0,"option":2,"title":"点击查询","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","//a[contains(., '查询')]","id(\"search\")","//A[@class='check']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div/a"]}},{"id":6,"index":5,"parentId":2,"type":1,"option":8,"title":"循环点击单个元素","sequence":[7,6],"isInLoop":true,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"]}},{"id":8,"index":6,"parentId":6,"type":0,"option":2,"title":"点击»","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"],"loopType":0}},{"id":7,"index":7,"parentId":6,"type":1,"option":8,"title":"循环采集数据","sequence":[10],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[1]","//tr[contains(., '震级(M)发震时刻(')]","//TR[@class='speed-tr-h1']","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]"]}},{"id":12,"index":8,"parentId":10,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[eval(\"self.test()\")]","allXPaths":["/td[1]","//td[contains(., '3.7')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-5]"],"exampleValues":[{"num":0,"value":"3.7"}],"unique_index":"/td[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/td[2]","allXPaths":["/td[2]","//td[contains(., '2023-11-30')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-4]"],"exampleValues":[{"num":0,"value":"2023-11-3003:44:10"}],"unique_index":"/td[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"arguments[0].innerText = \"123\"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数3_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '37.53')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-3]"],"exampleValues":[{"num":0,"value":"37.53"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数4_文本","desc":"","relativeXPath":"/td[4]","allXPaths":["/td[4]","//td[contains(., '112.47')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-2]"],"exampleValues":[{"num":0,"value":"112.47"}],"unique_index":"/td[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数5_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '28')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-1]"],"exampleValues":[{"num":0,"value":"28"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数6_链接文本","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"山西太原市清徐县"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数7_链接地址","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"https://news.ceic.ac.cn/CC20231130034410.html"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/th[1]","allXPaths":["/th[1]","//th[contains(., '震级(M)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-5]"],"exampleValues":[{"num":1,"value":"震级(M)"}],"unique_index":"/th[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数9_文本","desc":"","relativeXPath":"/th[2]","allXPaths":["/th[2]","//th[contains(., '发震时刻(UTC+8')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-4]"],"exampleValues":[{"num":1,"value":"发震时刻(UTC+8)"}],"unique_index":"/th[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/th[3]","allXPaths":["/th[3]","//th[contains(., '纬度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-3]"],"exampleValues":[{"num":1,"value":"纬度(°)"}],"unique_index":"/th[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/th[4]","allXPaths":["/th[4]","//th[contains(., '经度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-2]"],"exampleValues":[{"num":1,"value":"经度(°)"}],"unique_index":"/th[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数12_文本","desc":"","relativeXPath":"/th[5]","allXPaths":["/th[5]","//th[contains(., '深度(千米)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-1]"],"exampleValues":[{"num":1,"value":"深度(千米)"}],"unique_index":"/th[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数13_文本","desc":"","relativeXPath":"/th[6]","allXPaths":["/th[6]","//th[contains(., '参考位置')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th"],"exampleValues":[{"num":1,"value":"参考位置"}],"unique_index":"/th[6]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":5,"index":9,"parentId":2,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"def test():\n a = 1\n print(\"AMESSAGE:\",a)\n return a\nself.test =test","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":9,"index":10,"parentId":7,"type":2,"option":9,"title":"判断条件","sequence":[11,12],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":10,"parentId":9,"index":11,"type":3,"option":10,"title":"条件分支1","sequence":[8],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"39.78","code":"","waitTime":0},"position":0},{"id":11,"parentId":9,"index":12,"type":3,"option":10,"title":"条件分支2","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":0,"value":"","code":"","waitTime":0},"position":1}]} \ No newline at end of file diff --git a/ElectronJS/tasks/256.json b/ElectronJS/tasks/256.json index 69495e2..f2e97ef 100644 --- a/ElectronJS/tasks/256.json +++ b/ElectronJS/tasks/256.json @@ -1 +1 @@ -{"id":256,"name":"","url":"https://easyspider.cn/test_pages/empty.html","links":"https://easyspider.cn/test_pages/empty.html","create_time":"12/12/2023, 12:51:13 AM","update_time":"12/12/2023, 1:26:14 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":true,"desc":"https://easyspider.cn/test_pages/empty.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://easyspider.cn/test_pages/empty.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://easyspider.cn/test_pages/empty.html"}],"outputParameters":[{"id":0,"name":"删除Body节点","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":1,"name":"自定义参数_1","desc":"","type":"text","recordASField":1,"exampleValue":"自定义值"},{"id":2,"name":"刷新页面","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,4,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://easyspider.cn/test_pages/empty.html","links":"https://easyspider.cn/test_pages/empty.html","maxWaitTime":10,"scrollType":3,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":3,"index":2,"parentId":0,"type":0,"option":5,"title":"删除Body节点","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":1,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":0,"code":"document.body.parentNode.removeChild(document.body);","waitTime":0,"recordASField":0,"paraType":"text","emailConfig":{"host":"","port":465,"username":"","password":"","from":"","to":"","subject":"","content":""}}},{"id":6,"index":3,"parentId":4,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":5,"relative":false,"name":"自定义参数_1","desc":"","iframe":false,"extractType":0,"relativeXPath":"//body","recordASField":1,"allXPaths":[],"exampleValues":[{"num":0,"value":"自定义值"}],"default":"","beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0,"paraType":"text"}]}},{"id":2,"index":4,"parentId":0,"type":2,"option":9,"title":"判断条件","sequence":[5,6],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":4,"parentId":2,"index":5,"type":3,"option":10,"title":"条件分支1 - 页面有内容","sequence":[3],"isInLoop":false,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"//body","code":"","waitTime":0,"class":"2"},"position":0},{"id":5,"parentId":2,"index":6,"type":3,"option":10,"title":"条件分支2 - 页面没内容","sequence":[7],"isInLoop":false,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":0,"value":"","code":"","waitTime":0},"position":1},{"id":7,"index":7,"parentId":5,"type":0,"option":5,"title":"刷新页面","sequence":[],"isInLoop":false,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":0,"code":"location.reload()","waitTime":0,"recordASField":0,"paraType":"text","emailConfig":{"host":"","port":465,"username":"","password":"","from":"","to":"","subject":"","content":""}}}]} \ No newline at end of file +{"id":256,"name":"","url":"https://easyspider.cn/test_pages/empty.html","links":"https://easyspider.cn/test_pages/empty.html","create_time":"12/12/2023, 12:51:13 AM","update_time":"12/12/2023, 1:42:26 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":true,"desc":"https://easyspider.cn/test_pages/empty.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://easyspider.cn/test_pages/empty.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://easyspider.cn/test_pages/empty.html"},{"id":1,"name":"loopText_1","nodeId":8,"nodeName":"循环","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n","value":"1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n"}],"outputParameters":[{"id":0,"name":"删除Body节点","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":1,"name":"自定义参数_1","desc":"","type":"text","recordASField":1,"exampleValue":"自定义值"},{"id":2,"name":"刷新页面","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":3,"name":"执行Python代码","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,8],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://easyspider.cn/test_pages/empty.html","links":"https://easyspider.cn/test_pages/empty.html","maxWaitTime":10,"scrollType":3,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":5,"title":"删除Body节点","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":1,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":0,"code":"document.body.parentNode.removeChild(document.body);","waitTime":0,"recordASField":0,"paraType":"text","emailConfig":{"host":"","port":465,"username":"","password":"","from":"","to":"","subject":"","content":""}}},{"id":8,"index":3,"parentId":6,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":5,"relative":false,"name":"自定义参数_1","desc":"","iframe":false,"extractType":0,"relativeXPath":"//body","recordASField":1,"allXPaths":[],"exampleValues":[{"num":0,"value":"自定义值"}],"default":"","beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0,"paraType":"text"}]}},{"id":4,"index":4,"parentId":3,"type":2,"option":9,"title":"判断条件","sequence":[5,6],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":6,"parentId":4,"index":5,"type":3,"option":10,"title":"条件分支1 - 页面有内容","sequence":[3],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"//body","code":"","waitTime":0,"class":"2"},"position":0},{"id":7,"parentId":4,"index":6,"type":3,"option":10,"title":"条件分支2 - 页面没内容","sequence":[7],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":0,"value":"","code":"","waitTime":0},"position":1},{"id":9,"index":7,"parentId":7,"type":0,"option":5,"title":"刷新页面","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":0,"code":"location.reload()","waitTime":0,"recordASField":0,"paraType":"text","emailConfig":{"host":"","port":465,"username":"","password":"","from":"","to":"","subject":"","content":""}}},{"id":3,"index":8,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[4,9],"isInLoop":false,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":3,"pathList":"","textList":"1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":5,"index":9,"parentId":3,"type":0,"option":5,"title":"执行Python代码","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":5,"code":"print(\"2\")","waitTime":0,"recordASField":0,"paraType":"text","emailConfig":{"host":"","port":465,"username":"","password":"","from":"","to":"","subject":"","content":""}}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/257.json b/ElectronJS/tasks/257.json new file mode 100644 index 0000000..b9dad9d --- /dev/null +++ b/ElectronJS/tasks/257.json @@ -0,0 +1 @@ +{"id":257,"name":"百度一下,你就知道","url":"https://www.baidu.com","links":"https://www.baidu.com","create_time":"12/12/2023, 5:59:29 AM","update_time":"12/12/2023, 5:59:29 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":true,"desc":"https://www.baidu.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.baidu.com","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.baidu.com"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,6],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.baidu.com","links":"https://www.baidu.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":2,"title":"点击“同志加兄弟...","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"hotsearch-content-wrapper\"]/li[1]/a[1]/span[2]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[2]/div[1]/div[5]/div[1]/div[1]/div[3]/ul[1]/li[1]/a[1]/span[2]","//span[contains(., '“同志加兄弟”:中越')]","//SPAN[@class='title-content-title']","/html/body/div[last()-5]/div[last()-3]/div[last()-3]/div/div/div/ul/li[last()-5]/a/span"]}},{"id":3,"index":3,"parentId":0,"type":2,"option":9,"title":"判断条件","sequence":[4,5],"isInLoop":false,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":5,"parentId":3,"index":4,"type":3,"option":10,"title":"条件分支1","sequence":[],"isInLoop":false,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"hao123","code":"","waitTime":0},"position":0},{"id":6,"parentId":3,"index":5,"type":3,"option":10,"title":"条件分支2","sequence":[],"isInLoop":false,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"元首","code":"","waitTime":0},"position":1},{"id":4,"index":6,"parentId":0,"type":0,"option":2,"title":"点击\n换一...","sequence":[],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"head_wrapper\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[2]/div[1]/div[5]","//div[contains(., '')]","id(\"head_wrapper\")","//DIV[@class='head_wrapper s-isindex-wrap nologin']","/html/body/div[last()-6]/div[last()-3]/div[last()-3]"]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/258.json b/ElectronJS/tasks/258.json new file mode 100644 index 0000000..431030a --- /dev/null +++ b/ElectronJS/tasks/258.json @@ -0,0 +1 @@ +{"id":258,"name":"搜狗搜索引擎 - 上网从搜狗开始","url":"https://www.sogou.com","links":"https://www.sogou.com","create_time":"","update_time":"12/12/2023, 7:38:19 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":true,"desc":"https://www.sogou.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.sogou.com","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.sogou.com"},{"id":1,"name":"inputText_1","nodeName":"输入文字","nodeId":2,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"text","exampleValue":"1","value":"1"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3,4,5],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.sogou.com","links":"https://www.sogou.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"query\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[1]/div[2]/div[4]/form[1]/span[1]/input[1]","//input[contains(., '')]","id(\"query\")","//INPUT[@class='sec-input active']","//INPUT[@name='query']","/html/body/div[last()-3]/div[last()-3]/div/form/span[last()-1]/input"]}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"stb\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[2]/div[4]/form[1]/span[2]/input[1]","//input[contains(., '')]","id(\"stb\")","/html/body/div[last()-3]/div[last()-3]/div/form/span/input"]}},{"id":4,"index":4,"parentId":0,"type":0,"option":2,"title":"点击【1是什么意...","sequence":[],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"results\")]/div[4]/div[1]/h3[1]/a[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[3]/div[2]/div[1]/div[3]/div[1]/div[4]/div[1]/h3[1]/a[1]","//a[contains(., '【1是什么意思】 -')]","//A[@class=' ']","/html/body/div[last()-3]/div[last()-4]/div[last()-1]/div/div/div[last()-9]/div[last()-1]/h3/a"]}},{"id":5,"index":5,"parentId":0,"type":2,"option":9,"title":"判断条件","sequence":[6,7,8],"isInLoop":false,"position":4,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":6,"parentId":5,"index":6,"type":3,"option":10,"title":"条件分支1","sequence":[],"isInLoop":false,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":2,"value":"//*[@id=\"sogou_vr_21167301_T3_0\"]","code":"","waitTime":0},"position":0},{"id":7,"parentId":5,"index":7,"type":3,"option":10,"title":"条件分支2","sequence":[],"isInLoop":false,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"懂视","code":"","waitTime":0},"position":1},{"index":8,"id":8,"parentId":5,"type":3,"option":10,"title":"条件分支3","sequence":[],"isInLoop":false,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"自然数","code":"","waitTime":0},"position":2}]} \ No newline at end of file diff --git a/ElectronJS/tasks/259.json b/ElectronJS/tasks/259.json new file mode 100644 index 0000000..f9d9ab7 --- /dev/null +++ b/ElectronJS/tasks/259.json @@ -0,0 +1 @@ +{"id":259,"name":"","url":"https://mall.espic.com.cn/mall-view/","links":"https://mall.espic.com.cn/mall-view/","create_time":"12/12/2023, 5:26:03 PM","update_time":"12/12/2023, 5:26:03 PM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://mall.espic.com.cn/mall-view/","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://mall.espic.com.cn/mall-view/","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://mall.espic.com.cn/mall-view/"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://mall.espic.com.cn/mall-view/","links":"https://mall.espic.com.cn/mall-view/","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/260.json b/ElectronJS/tasks/260.json new file mode 100644 index 0000000..12cab98 --- /dev/null +++ b/ElectronJS/tasks/260.json @@ -0,0 +1 @@ +{"id":260,"name":"EXEC自定义函数示例:中国地震台网——历史查询","url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","create_time":"12/12/2023, 5:37:19 PM","update_time":"12/13/2023, 4:05:10 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"k","containJudge":true,"desc":"https://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.ceic.ac.cn/history"},{"id":1,"name":"loopText_1","nodeId":2,"nodeName":"循环 - 文本列表","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"15\n25\n35","value":"15\n25\n35"},{"id":2,"name":"loopTimes_循环 - 单个元素_2","nodeId":5,"nodeName":"循环 - 单个元素","desc":"循环循环 - 单个元素执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"3.7"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"2023-11-3003:44:10"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.53"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"112.47"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"28"},{"id":5,"name":"参数6_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"山西太原市清徐县"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20231130034410.html"},{"id":7,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"震级(M)"},{"id":8,"name":"参数9_文本","desc":"","type":"text","recordASField":1,"exampleValue":"发震时刻(UTC+8)"},{"id":9,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"纬度(°)"},{"id":10,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"经度(°)"},{"id":11,"name":"参数12_文本","desc":"","type":"text","recordASField":1,"exampleValue":"深度(千米)"},{"id":12,"name":"参数13_文本","desc":"","type":"text","recordASField":1,"exampleValue":"参考位置"},{"id":13,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环 - 文本列表","sequence":[3,4,9,5],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":3,"pathList":"","textList":"15\n25\n35","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":3,"index":3,"parentId":2,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"weidu1\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"arguments[0].valueeval(\") += \"11\"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[2]/input[1]","//input[contains(., '')]","id(\"weidu1\")","//INPUT[@class='span1']","//INPUT[@name='weidu1']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div[last()-3]/input[last()-1]"]}},{"id":4,"index":4,"parentId":2,"type":0,"option":2,"title":"点击查询","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","//a[contains(., '查询')]","id(\"search\")","//A[@class='check']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div/a"]}},{"id":6,"index":5,"parentId":2,"type":1,"option":8,"title":"循环 - 单个元素","sequence":[7,6],"isInLoop":true,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"]}},{"id":8,"index":6,"parentId":6,"type":0,"option":2,"title":"点击»","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"],"loopType":0}},{"id":7,"index":7,"parentId":6,"type":1,"option":8,"title":"循环采集数据","sequence":[10],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[1]","//tr[contains(., '震级(M)发震时刻(')]","//TR[@class='speed-tr-h1']","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]"]}},{"id":12,"index":8,"parentId":10,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[eval(\"self.test()\")]","allXPaths":["/td[1]","//td[contains(., '3.7')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-5]"],"exampleValues":[{"num":0,"value":"3.7"}],"unique_index":"/td[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/td[2]","allXPaths":["/td[2]","//td[contains(., '2023-11-30')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-4]"],"exampleValues":[{"num":0,"value":"2023-11-3003:44:10"}],"unique_index":"/td[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"arguments[0].innerText = \"123\"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数3_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '37.53')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-3]"],"exampleValues":[{"num":0,"value":"37.53"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数4_文本","desc":"","relativeXPath":"/td[4]","allXPaths":["/td[4]","//td[contains(., '112.47')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-2]"],"exampleValues":[{"num":0,"value":"112.47"}],"unique_index":"/td[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数5_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '28')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-1]"],"exampleValues":[{"num":0,"value":"28"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数6_链接文本","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"山西太原市清徐县"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数7_链接地址","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"https://news.ceic.ac.cn/CC20231130034410.html"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/th[1]","allXPaths":["/th[1]","//th[contains(., '震级(M)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-5]"],"exampleValues":[{"num":1,"value":"震级(M)"}],"unique_index":"/th[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数9_文本","desc":"","relativeXPath":"/th[2]","allXPaths":["/th[2]","//th[contains(., '发震时刻(UTC+8')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-4]"],"exampleValues":[{"num":1,"value":"发震时刻(UTC+8)"}],"unique_index":"/th[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/th[3]","allXPaths":["/th[3]","//th[contains(., '纬度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-3]"],"exampleValues":[{"num":1,"value":"纬度(°)"}],"unique_index":"/th[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/th[4]","allXPaths":["/th[4]","//th[contains(., '经度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-2]"],"exampleValues":[{"num":1,"value":"经度(°)"}],"unique_index":"/th[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数12_文本","desc":"","relativeXPath":"/th[5]","allXPaths":["/th[5]","//th[contains(., '深度(千米)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-1]"],"exampleValues":[{"num":1,"value":"深度(千米)"}],"unique_index":"/th[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数13_文本","desc":"","relativeXPath":"/th[6]","allXPaths":["/th[6]","//th[contains(., '参考位置')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th"],"exampleValues":[{"num":1,"value":"参考位置"}],"unique_index":"/th[6]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":5,"index":9,"parentId":2,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"def test():\n a = 1\n print(\"AMESSAGE:\",a)\n return a\nself.test =test","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":9,"index":10,"parentId":7,"type":2,"option":9,"title":"判断条件","sequence":[11,12],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":10,"parentId":9,"index":11,"type":3,"option":10,"title":"条件分支1","sequence":[8],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"39.78","code":"","waitTime":0},"position":0},{"id":11,"parentId":9,"index":12,"type":3,"option":10,"title":"条件分支2","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":0,"value":"","code":"","waitTime":0},"position":1}]} \ No newline at end of file diff --git a/ElectronJS/tasks/261.json b/ElectronJS/tasks/261.json new file mode 100644 index 0000000..e096e48 --- /dev/null +++ b/ElectronJS/tasks/261.json @@ -0,0 +1 @@ +{"id":-2,"name":"EXEC自定义函数示例:中国地震台网——历史查询","url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","create_time":"12/12/2023, 5:41:40 PM","update_time":"12/12/2023, 5:41:40 PM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"k","containJudge":true,"desc":"https://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.ceic.ac.cn/history"},{"id":1,"name":"loopText_1","nodeId":2,"nodeName":"循环 - 文本列表","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"15\n25\n35","value":"15\n25\n35"}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"3.7"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"2023-11-3003:44:10"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.53"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"112.47"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"28"},{"id":5,"name":"参数6_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"山西太原市清徐县"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20231130034410.html"},{"id":7,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"震级(M)"},{"id":8,"name":"参数9_文本","desc":"","type":"text","recordASField":1,"exampleValue":"发震时刻(UTC+8)"},{"id":9,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"纬度(°)"},{"id":10,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"经度(°)"},{"id":11,"name":"参数12_文本","desc":"","type":"text","recordASField":1,"exampleValue":"深度(千米)"},{"id":12,"name":"参数13_文本","desc":"","type":"text","recordASField":1,"exampleValue":"参考位置"},{"id":13,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环 - 文本列表","sequence":[3,4,9,5],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":3,"pathList":"","textList":"15\n25\n35","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":3,"index":3,"parentId":2,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"weidu1\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[2]/input[1]","//input[contains(., '')]","id(\"weidu1\")","//INPUT[@class='span1']","//INPUT[@name='weidu1']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div[last()-3]/input[last()-1]"]}},{"id":4,"index":4,"parentId":2,"type":0,"option":2,"title":"点击查询","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","//a[contains(., '查询')]","id(\"search\")","//A[@class='check']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div/a"]}},{"id":6,"index":5,"parentId":2,"type":1,"option":8,"title":"循环 - 不固定元素列表","sequence":[7,6],"isInLoop":true,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"]}},{"id":8,"index":6,"parentId":6,"type":0,"option":2,"title":"点击»","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"],"loopType":0}},{"id":7,"index":7,"parentId":6,"type":1,"option":8,"title":"循环采集数据","sequence":[10],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[1]","//tr[contains(., '震级(M)发震时刻(')]","//TR[@class='speed-tr-h1']","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]"]}},{"id":12,"index":8,"parentId":10,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[eval(\"self.test()\")]","allXPaths":["/td[1]","//td[contains(., '3.7')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-5]"],"exampleValues":[{"num":0,"value":"3.7"}],"unique_index":"/td[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/td[2]","allXPaths":["/td[2]","//td[contains(., '2023-11-30')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-4]"],"exampleValues":[{"num":0,"value":"2023-11-3003:44:10"}],"unique_index":"/td[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"arguments[0].innerText = \"123\"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数3_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '37.53')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-3]"],"exampleValues":[{"num":0,"value":"37.53"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数4_文本","desc":"","relativeXPath":"/td[4]","allXPaths":["/td[4]","//td[contains(., '112.47')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-2]"],"exampleValues":[{"num":0,"value":"112.47"}],"unique_index":"/td[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数5_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '28')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-1]"],"exampleValues":[{"num":0,"value":"28"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数6_链接文本","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"山西太原市清徐县"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数7_链接地址","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"https://news.ceic.ac.cn/CC20231130034410.html"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/th[1]","allXPaths":["/th[1]","//th[contains(., '震级(M)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-5]"],"exampleValues":[{"num":1,"value":"震级(M)"}],"unique_index":"/th[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数9_文本","desc":"","relativeXPath":"/th[2]","allXPaths":["/th[2]","//th[contains(., '发震时刻(UTC+8')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-4]"],"exampleValues":[{"num":1,"value":"发震时刻(UTC+8)"}],"unique_index":"/th[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/th[3]","allXPaths":["/th[3]","//th[contains(., '纬度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-3]"],"exampleValues":[{"num":1,"value":"纬度(°)"}],"unique_index":"/th[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/th[4]","allXPaths":["/th[4]","//th[contains(., '经度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-2]"],"exampleValues":[{"num":1,"value":"经度(°)"}],"unique_index":"/th[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数12_文本","desc":"","relativeXPath":"/th[5]","allXPaths":["/th[5]","//th[contains(., '深度(千米)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-1]"],"exampleValues":[{"num":1,"value":"深度(千米)"}],"unique_index":"/th[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数13_文本","desc":"","relativeXPath":"/th[6]","allXPaths":["/th[6]","//th[contains(., '参考位置')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th"],"exampleValues":[{"num":1,"value":"参考位置"}],"unique_index":"/th[6]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":5,"index":9,"parentId":2,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"def test():\n a = 1\n print(\"AMESSAGE:\",a)\n return a\nself.test =test","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":9,"index":10,"parentId":7,"type":2,"option":9,"title":"判断条件","sequence":[11,12],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":10,"parentId":9,"index":11,"type":3,"option":10,"title":"条件分支1","sequence":[8],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"39.78","code":"","waitTime":0},"position":0},{"id":11,"parentId":9,"index":12,"type":3,"option":10,"title":"条件分支2","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":0,"value":"","code":"","waitTime":0},"position":1}]} \ No newline at end of file diff --git a/ElectronJS/tasks/262.json b/ElectronJS/tasks/262.json new file mode 100644 index 0000000..07b252a --- /dev/null +++ b/ElectronJS/tasks/262.json @@ -0,0 +1 @@ +{"id":-2,"name":"EXEC自定义函数示例:中国地震台网——历史查询","url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","create_time":"12/12/2023, 5:45:12 PM","update_time":"12/12/2023, 5:45:12 PM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"k","containJudge":true,"desc":"https://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.ceic.ac.cn/history"},{"id":1,"name":"loopText_1","nodeId":2,"nodeName":"循环 - 文本列表","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"15\n25\n35","value":"15\n25\n35"},{"id":2,"name":"loopTimes_循环 - 单个元素_2","nodeId":5,"nodeName":"循环 - 单个元素","desc":"循环循环 - 单个元素执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"3.7"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"2023-11-3003:44:10"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.53"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"112.47"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"28"},{"id":5,"name":"参数6_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"山西太原市清徐县"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20231130034410.html"},{"id":7,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"震级(M)"},{"id":8,"name":"参数9_文本","desc":"","type":"text","recordASField":1,"exampleValue":"发震时刻(UTC+8)"},{"id":9,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"纬度(°)"},{"id":10,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"经度(°)"},{"id":11,"name":"参数12_文本","desc":"","type":"text","recordASField":1,"exampleValue":"深度(千米)"},{"id":12,"name":"参数13_文本","desc":"","type":"text","recordASField":1,"exampleValue":"参考位置"},{"id":13,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环 - 文本列表","sequence":[3,4,9,5],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":3,"pathList":"","textList":"15\n25\n35","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":3,"index":3,"parentId":2,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"weidu1\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[2]/input[1]","//input[contains(., '')]","id(\"weidu1\")","//INPUT[@class='span1']","//INPUT[@name='weidu1']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div[last()-3]/input[last()-1]"]}},{"id":4,"index":4,"parentId":2,"type":0,"option":2,"title":"点击查询","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","//a[contains(., '查询')]","id(\"search\")","//A[@class='check']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div/a"]}},{"id":6,"index":5,"parentId":2,"type":1,"option":8,"title":"循环 - 单个元素","sequence":[7,6],"isInLoop":true,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"]}},{"id":8,"index":6,"parentId":6,"type":0,"option":2,"title":"点击»","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"],"loopType":0}},{"id":7,"index":7,"parentId":6,"type":1,"option":8,"title":"循环采集数据","sequence":[10],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[1]","//tr[contains(., '震级(M)发震时刻(')]","//TR[@class='speed-tr-h1']","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]"]}},{"id":12,"index":8,"parentId":10,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[eval(\"self.test()\")]","allXPaths":["/td[1]","//td[contains(., '3.7')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-5]"],"exampleValues":[{"num":0,"value":"3.7"}],"unique_index":"/td[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/td[2]","allXPaths":["/td[2]","//td[contains(., '2023-11-30')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-4]"],"exampleValues":[{"num":0,"value":"2023-11-3003:44:10"}],"unique_index":"/td[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"arguments[0].innerText = \"123\"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数3_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '37.53')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-3]"],"exampleValues":[{"num":0,"value":"37.53"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数4_文本","desc":"","relativeXPath":"/td[4]","allXPaths":["/td[4]","//td[contains(., '112.47')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-2]"],"exampleValues":[{"num":0,"value":"112.47"}],"unique_index":"/td[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数5_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '28')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-1]"],"exampleValues":[{"num":0,"value":"28"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数6_链接文本","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"山西太原市清徐县"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数7_链接地址","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"https://news.ceic.ac.cn/CC20231130034410.html"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/th[1]","allXPaths":["/th[1]","//th[contains(., '震级(M)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-5]"],"exampleValues":[{"num":1,"value":"震级(M)"}],"unique_index":"/th[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数9_文本","desc":"","relativeXPath":"/th[2]","allXPaths":["/th[2]","//th[contains(., '发震时刻(UTC+8')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-4]"],"exampleValues":[{"num":1,"value":"发震时刻(UTC+8)"}],"unique_index":"/th[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/th[3]","allXPaths":["/th[3]","//th[contains(., '纬度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-3]"],"exampleValues":[{"num":1,"value":"纬度(°)"}],"unique_index":"/th[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/th[4]","allXPaths":["/th[4]","//th[contains(., '经度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-2]"],"exampleValues":[{"num":1,"value":"经度(°)"}],"unique_index":"/th[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数12_文本","desc":"","relativeXPath":"/th[5]","allXPaths":["/th[5]","//th[contains(., '深度(千米)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-1]"],"exampleValues":[{"num":1,"value":"深度(千米)"}],"unique_index":"/th[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数13_文本","desc":"","relativeXPath":"/th[6]","allXPaths":["/th[6]","//th[contains(., '参考位置')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th"],"exampleValues":[{"num":1,"value":"参考位置"}],"unique_index":"/th[6]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":5,"index":9,"parentId":2,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"def test():\n a = 1\n print(\"AMESSAGE:\",a)\n return a\nself.test =test","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":9,"index":10,"parentId":7,"type":2,"option":9,"title":"判断条件","sequence":[11,12],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":10,"parentId":9,"index":11,"type":3,"option":10,"title":"条件分支1","sequence":[8],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"39.78","code":"","waitTime":0},"position":0},{"id":11,"parentId":9,"index":12,"type":3,"option":10,"title":"条件分支2","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":0,"value":"","code":"","waitTime":0},"position":1}]} \ No newline at end of file diff --git a/ElectronJS/tasks/263.json b/ElectronJS/tasks/263.json new file mode 100644 index 0000000..f22889d --- /dev/null +++ b/ElectronJS/tasks/263.json @@ -0,0 +1 @@ +{"id":-2,"name":"EXEC自定义函数示例:中国地震台网——历史查询","url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","create_time":"12/12/2023, 5:47:05 PM","update_time":"12/12/2023, 5:47:05 PM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"k","containJudge":true,"desc":"https://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.ceic.ac.cn/history"},{"id":1,"name":"loopText_1","nodeId":2,"nodeName":"循环 - 文本列表","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"15\n25\n35","value":"15\n25\n35"},{"id":2,"name":"loopTimes_循环 - 单个元素_2","nodeId":5,"nodeName":"循环 - 单个元素","desc":"循环循环 - 单个元素执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"3.7"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"2023-11-3003:44:10"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.53"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"112.47"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"28"},{"id":5,"name":"参数6_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"山西太原市清徐县"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20231130034410.html"},{"id":7,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"震级(M)"},{"id":8,"name":"参数9_文本","desc":"","type":"text","recordASField":1,"exampleValue":"发震时刻(UTC+8)"},{"id":9,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"纬度(°)"},{"id":10,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"经度(°)"},{"id":11,"name":"参数12_文本","desc":"","type":"text","recordASField":1,"exampleValue":"深度(千米)"},{"id":12,"name":"参数13_文本","desc":"","type":"text","recordASField":1,"exampleValue":"参考位置"},{"id":13,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环 - 文本列表","sequence":[3,4,9,5],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":3,"pathList":"","textList":"15\n25\n35","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":3,"index":3,"parentId":2,"type":0,"option":4,"title":"输入文字1","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"weidu1\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[2]/input[1]","//input[contains(., '')]","id(\"weidu1\")","//INPUT[@class='span1']","//INPUT[@name='weidu1']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div[last()-3]/input[last()-1]"]}},{"id":4,"index":4,"parentId":2,"type":0,"option":2,"title":"点击查询","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","//a[contains(., '查询')]","id(\"search\")","//A[@class='check']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div/a"]}},{"id":6,"index":5,"parentId":2,"type":1,"option":8,"title":"循环 - 单个元素","sequence":[7,6],"isInLoop":true,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"]}},{"id":8,"index":6,"parentId":6,"type":0,"option":2,"title":"点击»","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"],"loopType":0}},{"id":7,"index":7,"parentId":6,"type":1,"option":8,"title":"循环采集数据","sequence":[10],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[1]","//tr[contains(., '震级(M)发震时刻(')]","//TR[@class='speed-tr-h1']","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]"]}},{"id":12,"index":8,"parentId":10,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[eval(\"self.test()\")]","allXPaths":["/td[1]","//td[contains(., '3.7')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-5]"],"exampleValues":[{"num":0,"value":"3.7"}],"unique_index":"/td[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/td[2]","allXPaths":["/td[2]","//td[contains(., '2023-11-30')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-4]"],"exampleValues":[{"num":0,"value":"2023-11-3003:44:10"}],"unique_index":"/td[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"arguments[0].innerText = \"123\"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数3_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '37.53')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-3]"],"exampleValues":[{"num":0,"value":"37.53"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数4_文本","desc":"","relativeXPath":"/td[4]","allXPaths":["/td[4]","//td[contains(., '112.47')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-2]"],"exampleValues":[{"num":0,"value":"112.47"}],"unique_index":"/td[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数5_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '28')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-1]"],"exampleValues":[{"num":0,"value":"28"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数6_链接文本","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"山西太原市清徐县"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数7_链接地址","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"https://news.ceic.ac.cn/CC20231130034410.html"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/th[1]","allXPaths":["/th[1]","//th[contains(., '震级(M)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-5]"],"exampleValues":[{"num":1,"value":"震级(M)"}],"unique_index":"/th[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数9_文本","desc":"","relativeXPath":"/th[2]","allXPaths":["/th[2]","//th[contains(., '发震时刻(UTC+8')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-4]"],"exampleValues":[{"num":1,"value":"发震时刻(UTC+8)"}],"unique_index":"/th[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/th[3]","allXPaths":["/th[3]","//th[contains(., '纬度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-3]"],"exampleValues":[{"num":1,"value":"纬度(°)"}],"unique_index":"/th[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/th[4]","allXPaths":["/th[4]","//th[contains(., '经度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-2]"],"exampleValues":[{"num":1,"value":"经度(°)"}],"unique_index":"/th[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数12_文本","desc":"","relativeXPath":"/th[5]","allXPaths":["/th[5]","//th[contains(., '深度(千米)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-1]"],"exampleValues":[{"num":1,"value":"深度(千米)"}],"unique_index":"/th[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数13_文本","desc":"","relativeXPath":"/th[6]","allXPaths":["/th[6]","//th[contains(., '参考位置')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th"],"exampleValues":[{"num":1,"value":"参考位置"}],"unique_index":"/th[6]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":5,"index":9,"parentId":2,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"def test():\n a = 1\n print(\"AMESSAGE:\",a)\n return a\nself.test =test","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":9,"index":10,"parentId":7,"type":2,"option":9,"title":"判断条件","sequence":[11,12],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":10,"parentId":9,"index":11,"type":3,"option":10,"title":"条件分支1","sequence":[8],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"39.78","code":"","waitTime":0},"position":0},{"id":11,"parentId":9,"index":12,"type":3,"option":10,"title":"条件分支2","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":0,"value":"","code":"","waitTime":0},"position":1}]} \ No newline at end of file diff --git a/ElectronJS/tasks/264.json b/ElectronJS/tasks/264.json new file mode 100644 index 0000000..7bbec8f --- /dev/null +++ b/ElectronJS/tasks/264.json @@ -0,0 +1 @@ +{"id":-2,"name":"EXEC自定义函数示例:中国地震台网——历史查询","url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","create_time":"12/12/2023, 5:48:23 PM","update_time":"12/12/2023, 5:48:31 PM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"k","containJudge":true,"desc":"https://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.ceic.ac.cn/history"},{"id":1,"name":"loopText_1","nodeId":2,"nodeName":"循环 - 文本列表","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"15\n25\n35","value":"15\n25\n35"},{"id":2,"name":"loopTimes_循环 - 单个元素_2","nodeId":5,"nodeName":"循环 - 单个元素","desc":"循环循环 - 单个元素执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"3.7"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"2023-11-3003:44:10"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.53"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"112.47"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"28"},{"id":5,"name":"参数6_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"山西太原市清徐县"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20231130034410.html"},{"id":7,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"震级(M)"},{"id":8,"name":"参数9_文本","desc":"","type":"text","recordASField":1,"exampleValue":"发震时刻(UTC+8)"},{"id":9,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"纬度(°)"},{"id":10,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"经度(°)"},{"id":11,"name":"参数12_文本","desc":"","type":"text","recordASField":1,"exampleValue":"深度(千米)"},{"id":12,"name":"参数13_文本","desc":"","type":"text","recordASField":1,"exampleValue":"参考位置"},{"id":13,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环 - 文本列表","sequence":[3,4,9,5],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":3,"pathList":"","textList":"15\n25\n35","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":3,"index":3,"parentId":2,"type":0,"option":4,"title":"输入文字1","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"weidu1\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[2]/input[1]","//input[contains(., '')]","id(\"weidu1\")","//INPUT[@class='span1']","//INPUT[@name='weidu1']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div[last()-3]/input[last()-1]"]}},{"id":4,"index":4,"parentId":2,"type":0,"option":2,"title":"点击查询","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","//a[contains(., '查询')]","id(\"search\")","//A[@class='check']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div/a"]}},{"id":6,"index":5,"parentId":2,"type":1,"option":8,"title":"循环 - 单个元素","sequence":[7,6],"isInLoop":true,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"]}},{"id":8,"index":6,"parentId":6,"type":0,"option":2,"title":"点击»","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"],"loopType":0}},{"id":7,"index":7,"parentId":6,"type":1,"option":8,"title":"循环采集数据","sequence":[10],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[1]","//tr[contains(., '震级(M)发震时刻(')]","//TR[@class='speed-tr-h1']","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]"]}},{"id":12,"index":8,"parentId":10,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[eval(\"self.test()\")]","allXPaths":["/td[1]","//td[contains(., '3.7')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-5]"],"exampleValues":[{"num":0,"value":"3.7"}],"unique_index":"/td[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/td[2]","allXPaths":["/td[2]","//td[contains(., '2023-11-30')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-4]"],"exampleValues":[{"num":0,"value":"2023-11-3003:44:10"}],"unique_index":"/td[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"arguments[0].innerText = \"123\"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数3_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '37.53')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-3]"],"exampleValues":[{"num":0,"value":"37.53"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数4_文本","desc":"","relativeXPath":"/td[4]","allXPaths":["/td[4]","//td[contains(., '112.47')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-2]"],"exampleValues":[{"num":0,"value":"112.47"}],"unique_index":"/td[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数5_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '28')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-1]"],"exampleValues":[{"num":0,"value":"28"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数6_链接文本","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"山西太原市清徐县"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数7_链接地址","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"https://news.ceic.ac.cn/CC20231130034410.html"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/th[1]","allXPaths":["/th[1]","//th[contains(., '震级(M)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-5]"],"exampleValues":[{"num":1,"value":"震级(M)"}],"unique_index":"/th[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数9_文本","desc":"","relativeXPath":"/th[2]","allXPaths":["/th[2]","//th[contains(., '发震时刻(UTC+8')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-4]"],"exampleValues":[{"num":1,"value":"发震时刻(UTC+8)"}],"unique_index":"/th[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/th[3]","allXPaths":["/th[3]","//th[contains(., '纬度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-3]"],"exampleValues":[{"num":1,"value":"纬度(°)"}],"unique_index":"/th[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/th[4]","allXPaths":["/th[4]","//th[contains(., '经度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-2]"],"exampleValues":[{"num":1,"value":"经度(°)"}],"unique_index":"/th[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数12_文本","desc":"","relativeXPath":"/th[5]","allXPaths":["/th[5]","//th[contains(., '深度(千米)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-1]"],"exampleValues":[{"num":1,"value":"深度(千米)"}],"unique_index":"/th[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数13_文本","desc":"","relativeXPath":"/th[6]","allXPaths":["/th[6]","//th[contains(., '参考位置')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th"],"exampleValues":[{"num":1,"value":"参考位置"}],"unique_index":"/th[6]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":5,"index":9,"parentId":2,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"def test():\n a = 1\n print(\"AMESSAGE:\",a)\n return a\nself.test =test","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":9,"index":10,"parentId":7,"type":2,"option":9,"title":"判断条件","sequence":[11,12],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":10,"parentId":9,"index":11,"type":3,"option":10,"title":"条件分支1","sequence":[8],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"39.78","code":"","waitTime":0},"position":0},{"id":11,"parentId":9,"index":12,"type":3,"option":10,"title":"条件分支2","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":0,"value":"","code":"","waitTime":0},"position":1}]} \ No newline at end of file diff --git a/ElectronJS/tasks/265.json b/ElectronJS/tasks/265.json new file mode 100644 index 0000000..019523d --- /dev/null +++ b/ElectronJS/tasks/265.json @@ -0,0 +1 @@ +{"id":-2,"name":"EXEC自定义函数示例:中国地震台网——历史查询","url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","create_time":"12/12/2023, 5:48:35 PM","update_time":"12/12/2023, 5:48:41 PM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"k","containJudge":true,"desc":"https://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.ceic.ac.cn/history"},{"id":1,"name":"loopText_1","nodeId":2,"nodeName":"循环 - 文本列表","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"15\n250\n35","value":"15\n250\n35"},{"id":2,"name":"loopTimes_循环 - 单个元素_2","nodeId":5,"nodeName":"循环 - 单个元素","desc":"循环循环 - 单个元素执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"3.7"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"2023-11-3003:44:10"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.53"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"112.47"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"28"},{"id":5,"name":"参数6_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"山西太原市清徐县"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20231130034410.html"},{"id":7,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"震级(M)"},{"id":8,"name":"参数9_文本","desc":"","type":"text","recordASField":1,"exampleValue":"发震时刻(UTC+8)"},{"id":9,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"纬度(°)"},{"id":10,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"经度(°)"},{"id":11,"name":"参数12_文本","desc":"","type":"text","recordASField":1,"exampleValue":"深度(千米)"},{"id":12,"name":"参数13_文本","desc":"","type":"text","recordASField":1,"exampleValue":"参考位置"},{"id":13,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.ceic.ac.cn/history","links":"https://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环 - 文本列表","sequence":[3,4,9,5],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":3,"pathList":"","textList":"15\n250\n35","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":3,"index":3,"parentId":2,"type":0,"option":4,"title":"输入文字1","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"weidu1\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[2]/input[1]","//input[contains(., '')]","id(\"weidu1\")","//INPUT[@class='span1']","//INPUT[@name='weidu1']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div[last()-3]/input[last()-1]"]}},{"id":4,"index":4,"parentId":2,"type":0,"option":2,"title":"点击查询","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","//a[contains(., '查询')]","id(\"search\")","//A[@class='check']","/html/body/div[last()-3]/div[last()-1]/div/div/div[last()-1]/form/div/a"]}},{"id":6,"index":5,"parentId":2,"type":1,"option":8,"title":"循环 - 单个元素","sequence":[7,6],"isInLoop":true,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"]}},{"id":8,"index":6,"parentId":6,"type":0,"option":2,"title":"点击»","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/ul[1]/li[10]/a[1]","//a[contains(., '»')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div/div/div/ul/li[last()-1]/a"],"loopType":0}},{"id":7,"index":7,"parentId":6,"type":1,"option":8,"title":"循环采集数据","sequence":[10],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[1]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table[1]/tbody[1]/tr[1]","//tr[contains(., '震级(M)发震时刻(')]","//TR[@class='speed-tr-h1']","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]"]}},{"id":12,"index":8,"parentId":10,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[eval(\"self.test()\")]","allXPaths":["/td[1]","//td[contains(., '3.7')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-5]"],"exampleValues":[{"num":0,"value":"3.7"}],"unique_index":"/td[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/td[2]","allXPaths":["/td[2]","//td[contains(., '2023-11-30')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-4]"],"exampleValues":[{"num":0,"value":"2023-11-3003:44:10"}],"unique_index":"/td[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"arguments[0].innerText = \"123\"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数3_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '37.53')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-3]"],"exampleValues":[{"num":0,"value":"37.53"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数4_文本","desc":"","relativeXPath":"/td[4]","allXPaths":["/td[4]","//td[contains(., '112.47')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-2]"],"exampleValues":[{"num":0,"value":"112.47"}],"unique_index":"/td[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数5_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '28')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td[last()-1]"],"exampleValues":[{"num":0,"value":"28"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数6_链接文本","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"山西太原市清徐县"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数7_链接地址","desc":"","relativeXPath":"/td[6]/a[1]","allXPaths":["/td[6]/a[1]","//a[contains(., '山西太原市清徐县')]","id(\"cid\")","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-19]/td/a"],"exampleValues":[{"num":0,"value":"https://news.ceic.ac.cn/CC20231130034410.html"}],"unique_index":"/td[6]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/th[1]","allXPaths":["/th[1]","//th[contains(., '震级(M)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-5]"],"exampleValues":[{"num":1,"value":"震级(M)"}],"unique_index":"/th[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数9_文本","desc":"","relativeXPath":"/th[2]","allXPaths":["/th[2]","//th[contains(., '发震时刻(UTC+8')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-4]"],"exampleValues":[{"num":1,"value":"发震时刻(UTC+8)"}],"unique_index":"/th[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/th[3]","allXPaths":["/th[3]","//th[contains(., '纬度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-3]"],"exampleValues":[{"num":1,"value":"纬度(°)"}],"unique_index":"/th[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/th[4]","allXPaths":["/th[4]","//th[contains(., '经度(°)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-2]"],"exampleValues":[{"num":1,"value":"经度(°)"}],"unique_index":"/th[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数12_文本","desc":"","relativeXPath":"/th[5]","allXPaths":["/th[5]","//th[contains(., '深度(千米)')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th[last()-1]"],"exampleValues":[{"num":1,"value":"深度(千米)"}],"unique_index":"/th[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数13_文本","desc":"","relativeXPath":"/th[6]","allXPaths":["/th[6]","//th[contains(., '参考位置')]","/html/body/div[last()-3]/div[last()-1]/div/div/div/div/div[last()-1]/table/tbody/tr[last()-20]/th"],"exampleValues":[{"num":1,"value":"参考位置"}],"unique_index":"/th[6]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":5,"index":9,"parentId":2,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"def test():\n a = 1\n print(\"AMESSAGE:\",a)\n return a\nself.test =test","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":9,"index":10,"parentId":7,"type":2,"option":9,"title":"判断条件","sequence":[11,12],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0}},{"id":10,"parentId":9,"index":11,"type":3,"option":10,"title":"条件分支1","sequence":[8],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":1,"value":"39.78","code":"","waitTime":0},"position":0},{"id":11,"parentId":9,"index":12,"type":3,"option":10,"title":"条件分支2","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"class":0,"value":"","code":"","waitTime":0},"position":1}]} \ No newline at end of file diff --git a/ElectronJS/tasks/266.json b/ElectronJS/tasks/266.json new file mode 100644 index 0000000..24d2424 --- /dev/null +++ b/ElectronJS/tasks/266.json @@ -0,0 +1 @@ +{"id":266,"name":"高级搜索-招标采购信息搜索","url":"https://www.chinabidding.cn/search/searchgj/zbcg?keywords=12","links":"https://www.chinabidding.cn/search/searchgj/zbcg?keywords=12","create_time":"12/12/2023, 6:00:52 PM","update_time":"12/12/2023, 6:08:57 PM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://www.chinabidding.cn/search/searchgj/zbcg?keywords=12","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.chinabidding.cn/search/searchgj/zbcg?keywords=12","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.chinabidding.cn/search/searchgj/zbcg?keywords=12"},{"id":1,"name":"loopTimes_循环点击单个元素_1","nodeId":2,"nodeName":"循环点击单个元素","desc":"循环循环点击单个元素执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"济源市中医院急诊科急救设备采购项目成交结果公告"},{"id":1,"name":"参数2_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"/public/bidagency/index.html#/infoDetails?fid=1693858951806977"},{"id":2,"name":"参数3_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"/public/search/searchadvzbxx/test/images/souc_11.jpg"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"收藏"},{"id":4,"name":"参数5_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://cdn.chinabidding.cn/public/search/searchadvzbxx/test/images/souc_hua_11.jpg"},{"id":5,"name":"参数6_文本","desc":"","type":"text","recordASField":1,"exampleValue":"已收藏"},{"id":6,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"河南"},{"id":7,"name":"参数9_文本","desc":"","type":"text","recordASField":1,"exampleValue":"医疗卫生"},{"id":8,"name":"参数10_文本","desc":"","type":"text","recordASField":1,"exampleValue":"2023-12-12"},{"id":9,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"您搜索的关键词包含“”,搜索结果可能有偏差!如果信息没有搜索到,请换成“”关键词再次搜索。"},{"id":10,"name":"参数12_文本","desc":"","type":"text","recordASField":1,"exampleValue":"数字、字母或特殊字符"},{"id":11,"name":"参数13_文本","desc":"","type":"text","recordASField":1,"exampleValue":"文字"},{"id":12,"name":"参数14_文本","desc":"","type":"text","recordASField":1,"exampleValue":"\"\"及其后面的字词均被忽略,因为采购与招标网的查询限制在38个汉字以内。"},{"id":13,"name":"参数15_文本","desc":"","type":"text","recordASField":1,"exampleValue":"集团有"},{"id":14,"name":"参数16_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"/public/2020/img/searchgj/icon_gb.png"},{"id":15,"name":"参数17_文本","desc":"","type":"text","recordASField":1,"exampleValue":"广告"},{"id":16,"name":"参数18_文本","desc":"","type":"text","recordASField":1,"exampleValue":"360织语即时通讯-安全的企业内部沟通工具"},{"id":17,"name":"参数19_文本","desc":"","type":"text","recordASField":1,"exampleValue":"广告"},{"id":18,"name":"参数20_文本","desc":"","type":"text","recordASField":1,"exampleValue":"全国"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.chinabidding.cn/search/searchgj/zbcg?keywords=12","links":"https://www.chinabidding.cn/search/searchgj/zbcg?keywords=12","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环点击单个元素","sequence":[4,3],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"pages\"]/a[4]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[5]/div[1]/div[11]/table[1]/tbody[1]/tr[1]/td[1]/div[2]/a[4]","//a[contains(., '后一页')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/div/a[last()-2]"]}},{"id":4,"index":3,"parentId":2,"type":0,"option":2,"title":"点击后一页","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[5]/div[1]/div[11]/table[1]/tbody[1]/tr[1]/td[1]/div[2]/a[4]","//a[contains(., '后一页')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/div/a[last()-2]"]}},{"id":3,"index":4,"parentId":2,"type":1,"option":8,"title":"循环采集数据","sequence":[5],"isInLoop":true,"position":0,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[5]/div[1]/div[11]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[5]/div[1]/div[11]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]","//tr[contains(., '')]","id(\"resultPrompt\")","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-31]"]}},{"id":5,"index":5,"parentId":3,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"参数1_链接文本","desc":"","relativeXPath":"/td[2]/a[1]","allXPaths":["/td[2]/a[1]","//a[contains(., '济源市中医院急诊科急')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-29]/td[last()-5]/a"],"exampleValues":[{"num":0,"value":"济源市中医院急诊科急救设备采购项目成交结果公告"}],"unique_index":"/td[2]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数2_链接地址","desc":"","relativeXPath":"/td[2]/a[1]","allXPaths":["/td[2]/a[1]","//a[contains(., '济源市中医院急诊科急')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-29]/td[last()-5]/a"],"exampleValues":[{"num":0,"value":"/public/bidagency/index.html#/infoDetails?fid=1693858951806977"}],"unique_index":"/td[2]/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":4,"contentType":1,"relative":true,"name":"参数3_图片地址","desc":"","relativeXPath":"/td[3]/img[1]","allXPaths":["/td[3]/img[1]","//img[contains(., '')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-29]/td[last()-4]/img"],"exampleValues":[{"num":0,"value":"/public/search/searchadvzbxx/test/images/souc_11.jpg"}],"unique_index":"/td[3]/img[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数4_文本","desc":"","relativeXPath":"/td[3]/span[1]","allXPaths":["/td[3]/span[1]","//span[contains(., '收藏')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-29]/td[last()-4]/span"],"exampleValues":[{"num":0,"value":"收藏"}],"unique_index":"/td[3]/span[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":4,"contentType":1,"relative":true,"name":"参数5_图片地址","desc":"","relativeXPath":"/td[4]/img[1]","allXPaths":["/td[4]/img[1]","//img[contains(., '')]","//IMG[@class='active']","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-29]/td[last()-3]/img"],"exampleValues":[{"num":0,"value":"https://cdn.chinabidding.cn/public/search/searchadvzbxx/test/images/souc_hua_11.jpg"}],"unique_index":"/td[4]/img[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数6_文本","desc":"","relativeXPath":"/td[4]/span[1]","allXPaths":["/td[4]/span[1]","//span[contains(., '已收藏')]","//SPAN[@class='active']","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-29]/td[last()-3]/span"],"exampleValues":[{"num":0,"value":"已收藏"}],"unique_index":"/td[4]/span[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/td[5]","allXPaths":["/td[5]","//td[contains(., '河南')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-29]/td[last()-2]"],"exampleValues":[{"num":0,"value":"河南"}],"unique_index":"/td[5]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数9_文本","desc":"","relativeXPath":"/td[6]","allXPaths":["/td[6]","//td[contains(., '医疗卫生')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-29]/td[last()-1]"],"exampleValues":[{"num":0,"value":"医疗卫生"}],"unique_index":"/td[6]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数10_文本","desc":"","relativeXPath":"/td[7]","allXPaths":["/td[7]","//td[contains(., '2023-12-1')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-29]/td"],"exampleValues":[{"num":0,"value":"2023-12-12"}],"unique_index":"/td[7]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/td[1]/div[1]/h4[1]","allXPaths":["/td[1]/div[1]/h4[1]","//h4[contains(., '')]","//H4[@class='promptText']","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-31]/td/div/h4[last()-1]"],"exampleValues":[{"num":1,"value":"您搜索的关键词包含“”,搜索结果可能有偏差!如果信息没有搜索到,请换成“”关键词再次搜索。"}],"unique_index":"/td[1]/div[1]/h4[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数12_文本","desc":"","relativeXPath":"/td[1]/div[1]/h4[1]/span[1]","allXPaths":["/td[1]/div[1]/h4[1]/span[1]","//span[contains(., '数字、字母或特殊字符')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-31]/td/div/h4[last()-1]/span[last()-1]"],"exampleValues":[{"num":1,"value":"数字、字母或特殊字符"}],"unique_index":"/td[1]/div[1]/h4[1]/span[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数13_文本","desc":"","relativeXPath":"/td[1]/div[1]/h4[1]/span[2]","allXPaths":["/td[1]/div[1]/h4[1]/span[2]","//span[contains(., '文字')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-31]/td/div/h4[last()-1]/span"],"exampleValues":[{"num":1,"value":"文字"}],"unique_index":"/td[1]/div[1]/h4[1]/span[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数14_文本","desc":"","relativeXPath":"/td[1]/div[1]/h4[2]","allXPaths":["/td[1]/div[1]/h4[2]","//h4[contains(., '')]","//H4[@class='promptText2']","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-31]/td/div/h4"],"exampleValues":[{"num":1,"value":"\"\"及其后面的字词均被忽略,因为采购与招标网的查询限制在38个汉字以内。"}],"unique_index":"/td[1]/div[1]/h4[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数15_文本","desc":"","relativeXPath":"/td[1]/div[1]/h4[2]/span[1]","allXPaths":["/td[1]/div[1]/h4[2]/span[1]","//span[contains(., '集团有')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-31]/td/div/h4/span"],"exampleValues":[{"num":1,"value":"集团有"}],"unique_index":"/td[1]/div[1]/h4[2]/span[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":4,"contentType":1,"relative":true,"name":"参数16_图片地址","desc":"","relativeXPath":"/td[1]/div[1]/div[1]/img[1]","allXPaths":["/td[1]/div[1]/div[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-31]/td/div/div/img"],"exampleValues":[{"num":1,"value":"/public/2020/img/searchgj/icon_gb.png"}],"unique_index":"/td[1]/div[1]/div[1]/img[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数17_文本","desc":"","relativeXPath":"/td[2]/div[1]/span[1]","allXPaths":["/td[2]/div[1]/span[1]","//span[contains(., '广告')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-30]/td[last()-4]/div/span[last()-1]"],"exampleValues":[{"num":2,"value":"广告"}],"unique_index":"/td[2]/div[1]/span[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数18_文本","desc":"","relativeXPath":"/td[2]/div[1]/span[2]","allXPaths":["/td[2]/div[1]/span[2]","//span[contains(., '360织语即时通讯-')]","//SPAN[@class='advTitle']","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-30]/td[last()-4]/div/span"],"exampleValues":[{"num":2,"value":"360织语即时通讯-安全的企业内部沟通工具"}],"unique_index":"/td[2]/div[1]/span[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数19_文本","desc":"","relativeXPath":"/td[3]","allXPaths":["/td[3]","//td[contains(., '广告')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-30]/td[last()-3]"],"exampleValues":[{"num":2,"value":"广告"}],"unique_index":"/td[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数20_文本","desc":"","relativeXPath":"/td[4]","allXPaths":["/td[4]","//td[contains(., '全国')]","/html/body/div[last()-10]/div[last()-2]/div/table/tbody/tr/td/table/tbody/tr[last()-30]/td[last()-2]"],"exampleValues":[{"num":2,"value":"全国"}],"unique_index":"/td[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/267.json b/ElectronJS/tasks/267.json new file mode 100644 index 0000000..f01da5d --- /dev/null +++ b/ElectronJS/tasks/267.json @@ -0,0 +1 @@ +{"id":267,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"12/13/2023, 2:14:40 AM","update_time":"12/13/2023, 2:14:40 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.jd.com"},{"id":1,"name":"inputText_1","nodeName":"输入文字","nodeId":2,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"text","exampleValue":"1","value":"1"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"1","index":0,"allXPaths":["/html/body/div[4]/div[1]/div[2]/div[1]/input[1]","//input[contains(., '')]","id(\"key\")","//INPUT[@class='text']","/html/body/div[last()-6]/div/div[last()-2]/div/input"]}},{"id":3,"index":3,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search-link\"]/i[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[4]/div[1]/div[2]/div[1]/a[1]/i[1]","//i[contains(., '')]","/html/body/div[last()-6]/div/div[last()-2]/div/a/i"]}},{"id":-1,"index":4,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search-link\"]/i[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[4]/div[1]/div[2]/div[1]/a[1]/i[1]","//i[contains(., '')]","/html/body/div[last()-6]/div/div[last()-2]/div/a/i"]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/268.json b/ElectronJS/tasks/268.json new file mode 100644 index 0000000..4cda18b --- /dev/null +++ b/ElectronJS/tasks/268.json @@ -0,0 +1 @@ +{"id":268,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"12/13/2023, 2:16:08 AM","update_time":"12/13/2023, 3:07:50 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.jd.com"}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n \n \n \n \n \n 京东首页\n \t\t\t\t\t\t\t\t\t\t\t海外 \t\t\t\t\t\t\t\t\t\t\t\t\t\t \t\t\t\t\t北京上海天津重庆河北山西河南辽宁吉林黑龙江内蒙古江苏山东安徽浙江福建湖北湖南广东广西江西四川海南贵州云南西藏陕西甘肃青海宁夏新疆港澳台湾钓鱼岛海外 \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t 地区专享版本 \t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t中國港澳 \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t中國台灣 \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t京东全球 \t\t\t\t\t \t\t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t Available Sites \t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tGlobal Site \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tСайт России \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tSitus Indonesia \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tSitio de España \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\t เว็บไซต์ประเทศไทย \t\t\t\t\t\t \t\t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t\t\n \n \n 你好,请登录  免费注册\n \n \n \n 我的订单\n \n \n \n \n \n 我的京东\n \n \n \n \n \n \n 京东会员\n \n \n \n \n \n 企业采购\n \n \n \n \n \n 客户服务\n \n \n \n \n \n \n 网站导航\n \n \n \n \n \n \n 手机京东\n \n \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n 网站无障碍\n \n \n \n \n \n \n\n \n \n \n (function (window) {\n window.data = window.data || {}\n window.data['cms_header'] = {\n setting: [{\"NAME\":\"手机\",\"URL\":\"//\",\"ANCHOR\":\"\",\"property\":\"\",\"CUSTOM1\":\"#050505\",\"CUSTOM2\":\"\",\"CUSTOM3\":\"\"}]\n }\n })(window)\n \n \n #search-2014 .text {border-color: #050505;}#search-2014 .button {background: #050505;} 京东 手机 全部分类◇ 搜索 >0 我的购物车 \n \n\n \n\n \n \n 顶通组件占位手机分类热门推荐苹果华为荣耀小米vivoOPPO运营商手机卡营业厅充话费配件充电器数据线手机壳贴膜移动电源创意配件热门分类全部手机5G手机苹果 iPhone 11iPhone XS Max华为Mate40 Pro 4Gnova 8 Pro 无充Nova8SE 乐活版Mate 40 RSNova 9P50 Pro 4G华为智选手机荣耀荣耀V30 PRO荣耀30 Pro荣耀X10 Max荣耀Play4 Pro小米小米10Redmi K30vivoS10 ProX60Y70t iQOO 8 iQOO Neo5 iQOO Z3OPPOReno 6OPPO K9 Find X3品牌中国移动中国联通中国电信精选店铺京东通信北京移动广东移动宽带专区50M300M优选品牌Anker罗马仕品胜倍思绿联亿色毕亚兹斯泰克热卖爆款移动电源原装充电器散热背夹扩展坞苹果数据线氮化镓Type C信号放大器手游周边王者荣耀手机散热器吃鸡神器弯头线游戏手柄王座同屏器新奇好物氮化镓PD快充双向快充创意配件配件频道海量配件低至9.包邮机身存储16GB8GB4GB分辨率全高清FHD+高清HD+屏幕尺寸5.0英寸及以下5.0~5.49英寸5.5~5.99英寸6.0~6.24英寸有新机游戏手机手机营业厅手机好店以旧换新企业购热卖推荐人气新品限时特惠配件专区摩斯维 适用华为mate40pro手机壳Mate40 Pro保护套真素皮超薄epro全包防摔马特男女 【买家推荐!石墨黑】真皮质感丨贈全屏膜¥59.000度 联想拯救者Y90钢化膜手机膜全屏防蓝光电竞磨砂防反光游戏保护膜防汗防指纹疏油玻璃贴膜 拯救者Y90(AG悦享版)¥99.00漫步者(EDIFIER)W820NB经典版 头戴蓝牙主动降噪耳机 金标认证 蓝牙5.2 手机电脑笔记本耳机 云岩白¥279.00闪魔 苹果13钢化膜 iphone13Promax手机膜mini全屏无边高清抗指纹保护贴膜 苹果13/13Pro【加强版】2片+神器¥19.80声阔Soundcore超能小彩蛋 LifeP3主动降噪真无线TWS入耳式蓝牙耳机适用苹果/华为/小米手机蓝30H续航版¥349.00\n \n \n\n \n \n \n\n \n\n \n \n window.pageConfig = window.pageConfig || {}\n window.pageConfig.o2JSConfig = {\n useTplInJs: true,\n pathRule: function (path) {\n return '//static.360buyimg.com/mtd/pc/cms' + '/floors/' + path + '.min.js'\n }\n }\n \n seajs.use(['//static.360buyimg.com/mtd/pc/base/1.0.1/channel.js'])\n \n seajs.use(['//wl.jd.com/wl.js'])\n \n \n \n !(function () {\n var testObject = {}\n if (!(Object.setPrototypeOf || testObject.__proto__)) {\n var nativeGetPrototypeOf = Object.getPrototypeOf\n Object.getPrototypeOf = function (object) {\n return object.__proto__ || nativeGetPrototypeOf.call(Object, object)\n }\n }\n })()\n \n \n \n \n \n \n // nerv-create-class 用 'nervjs'\n window.nervjs = Nerv\n // nerv-create-class\n !(function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e(require(\"nervjs\")):\"function\"==typeof define&&define.amd?define([\"nervjs\"],e):t.NervCreateClass=e(t.nervjs)})(this,(function(t){\"use strict\";function e(t){return t===undefined||null===t}function n(){}function r(t){return\"function\"==typeof t}function o(t){return t===undefined}function i(t,n){for(var r in n)e(n[r])||(t[r]=n[r]);return t}function a(t){for(var e in t){var n=t[e];\"function\"!=typeof n||n.__bound||1===g[e]||((t[e]=n.bind(t)).__bound=!0)}}function c(t,e){void 0===e&&(e={});for(var n=0,r=t.length;n wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n };\n return throttled;\n }\n // Context\n var LingAtomScrollContext = Nerv.createContext({\n scrollTop: 0,\n windowHeight: 0,\n bodyHeight: 0\n })\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n function genComponentElement (type, props, children) {\n \n return Nerv.createElement(\n Lc[type] ? Lc[type].component : 'div',\n props,\n children\n )\n \n }\n \n \n window.Lc = window.Lc || {}\n Lc['Page'] = { component: 'div' }\n \n \n function EventEmitter () {\n var eventEmitterPool = {}\n var eventEmitter = {\n on: function (eventName, handler) {\n eventEmitterPool[eventName] = eventEmitterPool[eventName] || []\n eventEmitterPool[eventName].push(handler)\n },\n trigger: function (eventName) {\n var handlers = eventEmitterPool[eventName] || []\n var args = Array.prototype.slice.call(arguments, 1)\n for (var i = 0; i < handlers.length; i++) {\n handlers[i].apply(this, args)\n }\n },\n off: function (eventName, handler) {\n if (!eventEmitterPool[eventName]) return\n if (!handler) {\n eventEmitterPool[eventName] = []\n return\n }\n var handlers = eventEmitterPool[eventName] || []\n for (var i = 0; i < handlers.length; i++) {\n if (handlers[i] === handler) {\n eventEmitterPool[eventName].splice(i, 1)\n break\n }\n }\n }\n }\n return eventEmitter\n }\n var eventEmitter = EventEmitter()\n\n !function () {\n var downloadedBundles = [\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a6__5ee34e5afc685b3ecdd0f087.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a7__5ee34e58fc685b3ecdd0f078.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a8__5ee34e5afc685b3ecdd0f08a.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a9__5fa90cbc7e292cb70199df98.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd594__5ee34e59fc685b3ecdd0f07e.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5aa__5ee34e5bfc685b3ecdd0f094.js\"]\n var body = document.body || document.documentElement\n var Wrap = function (props) {\n return props.children\n }\n // Lazyload Component\n var LazyLoadComponent = NervCreateClass({\n // loading loaded\n status: '',\n getInitialState: function () {\n return {\n status: 'initial'\n }\n },\n updateOffsetTop: function () {\n if (this.state.status !== 'initial') return\n var node = Nerv.findDOMNode(this)\n var rect = node.getBoundingClientRect()\n var winHeight = this.props.__context.windowHeight\n var canLoad = rect.top < winHeight * 1.5 && rect.top + rect.height > -winHeight * 0.5\n if (canLoad) {\n this.downloadScript()\n }\n },\n delayLoaded: function () {\n var that = this\n setTimeout(function () {\n that.setState({ status: 'loaded' })\n }, 500)\n },\n downloadScript: function () {\n var that = this\n var myItem = this.props.item\n if (!myItem.reactBundle || downloadedBundles.indexOf(myItem.reactBundle) !== -1) {\n if (Lc[myItem.type]) {\n this.setState({ status: 'loading' })\n this.delayLoaded()\n } else {\n eventEmitter.on(myItem.type, function () {\n that.setState({ status: 'loading' })\n that.delayLoaded()\n })\n }\n return\n }\n myItem.reactBundle = myItem.reactBundle && myItem.reactBundle.replace('storage.jd.com', 'storage.360buyimg.com')\n downloadedBundles.push(myItem.reactBundle)\n var element = document.createElement('script')\n element.src = myItem.reactBundle\n element.charset = 'UTF-8'\n body.appendChild(element)\n element.onload = function () {\n that.setState({ status: 'loading' })\n that.delayLoaded()\n eventEmitter.trigger(myItem.type)\n }\n },\n componentDidMount: function () {\n this.updateOffsetTop()\n },\n componentWillReceiveProps: function (nextProps) {\n this.updateOffsetTop()\n },\n shouldComponentUpdate: function (nextProps, nextState) {\n return this.state.status !== nextState.status\n },\n componentDidCatch: function (error, info) {\n // console.log(error)\n // 上报组件渲染错误\n // @see //talos30011-prelb.o2athena.svc.n.jd.local/api-docs#null%2Fpaths%2F~1report%2Fpost\n var xhr = new XMLHttpRequest()\n xhr.open('POST', 'https://atom-log.3.cn/report', true)\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')\n xhr.send('platform=h5&url=' + location.href + '&cname=' + this.props.item.type + '&project=' + globalData.projectId)\n },\n getWrappedElement: function (extraProps) {\n if (this.WrappedElement) {\n return this.WrappedElement\n }\n var item = this.props.item\n var children = item.props.content || this.props.children || null\n var WrappedElement = genComponentElement(item.type, Object.assign({}, item.props, extraProps), children)\n this.WrappedElement = WrappedElement\n return WrappedElement\n },\n render: function () {\n var that = this\n var status = this.state.status\n // if (status === 'initial' || status === 'loading') {\n if (status === 'initial') {\n return Nerv.createElement(\n 'div',\n {\n style: {\n padding: '10px',\n backgroundClip: 'content-box',\n minHeight: '256px',\n height: '100%',\n backgroundColor: '#e3e4e5'\n }\n }\n // status === 'loading' ?\n // Nerv.createElement(\n // 'div',\n // {\n // style: {\n // width: 0,\n // height: 0,\n // overflow: 'hidden'\n // }\n // },\n // that.getWrappedElement()\n // ) : null\n )\n } else {\n // return that.getWrappedElement()\n // 缺点是多了一层 div\n this.cc = this.cc || that.getWrappedElement()\n return Nerv.createElement(\n 'div',\n status === 'loading' ? {\n style: {\n padding: '10px',\n backgroundClip: 'content-box',\n minHeight: '256px',\n height: '100%',\n backgroundColor: '#e3e4e5'\n }\n } : {},\n this.cc\n )\n }\n }\n })\n\n function createTree (tree) {\n tree = tree.filter(function (item) {\n return item.isShow === undefined || item.isShow === true\n })\n\n return tree.map(function (item) {\n var hasChildren = item.childrens && item.childrens.length\n hasChildren && (item.props.children = createTree(item.childrens))\n if (hasChildren) {\n return genComponentElement(item.type, item.props, item.props.content)\n } else {\n return Nerv.createElement(\n LingAtomScrollContext.Consumer,\n {},\n function (context) {\n return Nerv.createElement(\n LazyLoadComponent,\n {\n item: item,\n __context: context\n }\n )\n }\n )\n }\n })\n }\n\n var App = NervCreateClass({\n getInitialState: function () {\n return {\n scrollTop: 0,\n windowHeight: window.innerHeight,\n bodyHeight: document.body.clientHeight\n }\n },\n componentDidMount: function () {\n var that = this\n window.onscroll = throttle(function () {\n var bodyScrollHeight = document.documentElement.scrollTop || document.body.scrollTop\n that.setState({\n scrollTop: bodyScrollHeight\n })\n }, 200)\n window.onresize = function () {\n var windowInnerHeight = window.innerHeight\n if (windowInnerHeight === that.state.windowHeight) return\n that.setState({\n windowHeight: windowInnerHeight\n })\n }\n function onElementHeightChange (elm, callback) {\n var lastHeight = elm.clientHeight\n var newHeight\n (function run () {\n newHeight = elm.clientHeight\n if (lastHeight !== newHeight) {\n callback(newHeight)\n }\n lastHeight = newHeight\n if (elm.onElementHeightChangeTimer) {\n clearTimeout(elm.onElementHeightChangeTimer)\n }\n elm.onElementHeightChangeTimer = setTimeout(run, 200)\n })()\n }\n onElementHeightChange(document.body, function (h) {\n that.setState({ bodyHeight: h })\n })\n },\n render: function () {\n return Nerv.createElement(\n LingAtomScrollContext.Provider,\n {\n value: this.state\n },\n createTree(window.o2PageConfig.data)\n )\n }\n })\n\n Nerv.render(\n Nerv.createElement(App),\n document.querySelector('#app')\n )\n }()\n \n \n\n\n\n\n ✖ ✍操作台(点此拖动,左上角调整大小) \n ● 已选中1个元素,您可以:\n 确认采集 取消选择 Path: /html/body \n"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环点击每个元素","sequence":[3,4],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div/a","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":""}},{"id":3,"index":3,"parentId":2,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":"不滚动","scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":""}},{"id":4,"index":4,"parentId":2,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":1,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"参数1_文本","desc":"","extractType":0,"relativeXPath":"/html/body","allXPaths":["/html/body","//body[contains(., '')]","/html/body"],"exampleValues":[{"num":0,"value":"\n \n \n \n \n \n 京东首页\n \t\t\t\t\t\t\t\t\t\t\t海外 \t\t\t\t\t\t\t\t\t\t\t\t\t\t \t\t\t\t\t北京上海天津重庆河北山西河南辽宁吉林黑龙江内蒙古江苏山东安徽浙江福建湖北湖南广东广西江西四川海南贵州云南西藏陕西甘肃青海宁夏新疆港澳台湾钓鱼岛海外 \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t 地区专享版本 \t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t中國港澳 \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t中國台灣 \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t京东全球 \t\t\t\t\t \t\t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t Available Sites \t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tGlobal Site \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tСайт России \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tSitus Indonesia \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tSitio de España \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\t เว็บไซต์ประเทศไทย \t\t\t\t\t\t \t\t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t\t\n \n \n 你好,请登录  免费注册\n \n \n \n 我的订单\n \n \n \n \n \n 我的京东\n \n \n \n \n \n \n 京东会员\n \n \n \n \n \n 企业采购\n \n \n \n \n \n 客户服务\n \n \n \n \n \n \n 网站导航\n \n \n \n \n \n \n 手机京东\n \n \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n 网站无障碍\n \n \n \n \n \n \n\n \n \n \n (function (window) {\n window.data = window.data || {}\n window.data['cms_header'] = {\n setting: [{\"NAME\":\"手机\",\"URL\":\"//\",\"ANCHOR\":\"\",\"property\":\"\",\"CUSTOM1\":\"#050505\",\"CUSTOM2\":\"\",\"CUSTOM3\":\"\"}]\n }\n })(window)\n \n \n #search-2014 .text {border-color: #050505;}#search-2014 .button {background: #050505;} 京东 手机 全部分类◇ 搜索 >0 我的购物车 \n \n\n \n\n \n \n 顶通组件占位手机分类热门推荐苹果华为荣耀小米vivoOPPO运营商手机卡营业厅充话费配件充电器数据线手机壳贴膜移动电源创意配件热门分类全部手机5G手机苹果 iPhone 11iPhone XS Max华为Mate40 Pro 4Gnova 8 Pro 无充Nova8SE 乐活版Mate 40 RSNova 9P50 Pro 4G华为智选手机荣耀荣耀V30 PRO荣耀30 Pro荣耀X10 Max荣耀Play4 Pro小米小米10Redmi K30vivoS10 ProX60Y70t iQOO 8 iQOO Neo5 iQOO Z3OPPOReno 6OPPO K9 Find X3品牌中国移动中国联通中国电信精选店铺京东通信北京移动广东移动宽带专区50M300M优选品牌Anker罗马仕品胜倍思绿联亿色毕亚兹斯泰克热卖爆款移动电源原装充电器散热背夹扩展坞苹果数据线氮化镓Type C信号放大器手游周边王者荣耀手机散热器吃鸡神器弯头线游戏手柄王座同屏器新奇好物氮化镓PD快充双向快充创意配件配件频道海量配件低至9.包邮机身存储16GB8GB4GB分辨率全高清FHD+高清HD+屏幕尺寸5.0英寸及以下5.0~5.49英寸5.5~5.99英寸6.0~6.24英寸有新机游戏手机手机营业厅手机好店以旧换新企业购热卖推荐人气新品限时特惠配件专区摩斯维 适用华为mate40pro手机壳Mate40 Pro保护套真素皮超薄epro全包防摔马特男女 【买家推荐!石墨黑】真皮质感丨贈全屏膜¥59.000度 联想拯救者Y90钢化膜手机膜全屏防蓝光电竞磨砂防反光游戏保护膜防汗防指纹疏油玻璃贴膜 拯救者Y90(AG悦享版)¥99.00漫步者(EDIFIER)W820NB经典版 头戴蓝牙主动降噪耳机 金标认证 蓝牙5.2 手机电脑笔记本耳机 云岩白¥279.00闪魔 苹果13钢化膜 iphone13Promax手机膜mini全屏无边高清抗指纹保护贴膜 苹果13/13Pro【加强版】2片+神器¥19.80声阔Soundcore超能小彩蛋 LifeP3主动降噪真无线TWS入耳式蓝牙耳机适用苹果/华为/小米手机蓝30H续航版¥349.00\n \n \n\n \n \n \n\n \n\n \n \n window.pageConfig = window.pageConfig || {}\n window.pageConfig.o2JSConfig = {\n useTplInJs: true,\n pathRule: function (path) {\n return '//static.360buyimg.com/mtd/pc/cms' + '/floors/' + path + '.min.js'\n }\n }\n \n seajs.use(['//static.360buyimg.com/mtd/pc/base/1.0.1/channel.js'])\n \n seajs.use(['//wl.jd.com/wl.js'])\n \n \n \n !(function () {\n var testObject = {}\n if (!(Object.setPrototypeOf || testObject.__proto__)) {\n var nativeGetPrototypeOf = Object.getPrototypeOf\n Object.getPrototypeOf = function (object) {\n return object.__proto__ || nativeGetPrototypeOf.call(Object, object)\n }\n }\n })()\n \n \n \n \n \n \n // nerv-create-class 用 'nervjs'\n window.nervjs = Nerv\n // nerv-create-class\n !(function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e(require(\"nervjs\")):\"function\"==typeof define&&define.amd?define([\"nervjs\"],e):t.NervCreateClass=e(t.nervjs)})(this,(function(t){\"use strict\";function e(t){return t===undefined||null===t}function n(){}function r(t){return\"function\"==typeof t}function o(t){return t===undefined}function i(t,n){for(var r in n)e(n[r])||(t[r]=n[r]);return t}function a(t){for(var e in t){var n=t[e];\"function\"!=typeof n||n.__bound||1===g[e]||((t[e]=n.bind(t)).__bound=!0)}}function c(t,e){void 0===e&&(e={});for(var n=0,r=t.length;n wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n };\n return throttled;\n }\n // Context\n var LingAtomScrollContext = Nerv.createContext({\n scrollTop: 0,\n windowHeight: 0,\n bodyHeight: 0\n })\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n function genComponentElement (type, props, children) {\n \n return Nerv.createElement(\n Lc[type] ? Lc[type].component : 'div',\n props,\n children\n )\n \n }\n \n \n window.Lc = window.Lc || {}\n Lc['Page'] = { component: 'div' }\n \n \n function EventEmitter () {\n var eventEmitterPool = {}\n var eventEmitter = {\n on: function (eventName, handler) {\n eventEmitterPool[eventName] = eventEmitterPool[eventName] || []\n eventEmitterPool[eventName].push(handler)\n },\n trigger: function (eventName) {\n var handlers = eventEmitterPool[eventName] || []\n var args = Array.prototype.slice.call(arguments, 1)\n for (var i = 0; i < handlers.length; i++) {\n handlers[i].apply(this, args)\n }\n },\n off: function (eventName, handler) {\n if (!eventEmitterPool[eventName]) return\n if (!handler) {\n eventEmitterPool[eventName] = []\n return\n }\n var handlers = eventEmitterPool[eventName] || []\n for (var i = 0; i < handlers.length; i++) {\n if (handlers[i] === handler) {\n eventEmitterPool[eventName].splice(i, 1)\n break\n }\n }\n }\n }\n return eventEmitter\n }\n var eventEmitter = EventEmitter()\n\n !function () {\n var downloadedBundles = [\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a6__5ee34e5afc685b3ecdd0f087.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a7__5ee34e58fc685b3ecdd0f078.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a8__5ee34e5afc685b3ecdd0f08a.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a9__5fa90cbc7e292cb70199df98.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd594__5ee34e59fc685b3ecdd0f07e.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5aa__5ee34e5bfc685b3ecdd0f094.js\"]\n var body = document.body || document.documentElement\n var Wrap = function (props) {\n return props.children\n }\n // Lazyload Component\n var LazyLoadComponent = NervCreateClass({\n // loading loaded\n status: '',\n getInitialState: function () {\n return {\n status: 'initial'\n }\n },\n updateOffsetTop: function () {\n if (this.state.status !== 'initial') return\n var node = Nerv.findDOMNode(this)\n var rect = node.getBoundingClientRect()\n var winHeight = this.props.__context.windowHeight\n var canLoad = rect.top < winHeight * 1.5 && rect.top + rect.height > -winHeight * 0.5\n if (canLoad) {\n this.downloadScript()\n }\n },\n delayLoaded: function () {\n var that = this\n setTimeout(function () {\n that.setState({ status: 'loaded' })\n }, 500)\n },\n downloadScript: function () {\n var that = this\n var myItem = this.props.item\n if (!myItem.reactBundle || downloadedBundles.indexOf(myItem.reactBundle) !== -1) {\n if (Lc[myItem.type]) {\n this.setState({ status: 'loading' })\n this.delayLoaded()\n } else {\n eventEmitter.on(myItem.type, function () {\n that.setState({ status: 'loading' })\n that.delayLoaded()\n })\n }\n return\n }\n myItem.reactBundle = myItem.reactBundle && myItem.reactBundle.replace('storage.jd.com', 'storage.360buyimg.com')\n downloadedBundles.push(myItem.reactBundle)\n var element = document.createElement('script')\n element.src = myItem.reactBundle\n element.charset = 'UTF-8'\n body.appendChild(element)\n element.onload = function () {\n that.setState({ status: 'loading' })\n that.delayLoaded()\n eventEmitter.trigger(myItem.type)\n }\n },\n componentDidMount: function () {\n this.updateOffsetTop()\n },\n componentWillReceiveProps: function (nextProps) {\n this.updateOffsetTop()\n },\n shouldComponentUpdate: function (nextProps, nextState) {\n return this.state.status !== nextState.status\n },\n componentDidCatch: function (error, info) {\n // console.log(error)\n // 上报组件渲染错误\n // @see //talos30011-prelb.o2athena.svc.n.jd.local/api-docs#null%2Fpaths%2F~1report%2Fpost\n var xhr = new XMLHttpRequest()\n xhr.open('POST', 'https://atom-log.3.cn/report', true)\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')\n xhr.send('platform=h5&url=' + location.href + '&cname=' + this.props.item.type + '&project=' + globalData.projectId)\n },\n getWrappedElement: function (extraProps) {\n if (this.WrappedElement) {\n return this.WrappedElement\n }\n var item = this.props.item\n var children = item.props.content || this.props.children || null\n var WrappedElement = genComponentElement(item.type, Object.assign({}, item.props, extraProps), children)\n this.WrappedElement = WrappedElement\n return WrappedElement\n },\n render: function () {\n var that = this\n var status = this.state.status\n // if (status === 'initial' || status === 'loading') {\n if (status === 'initial') {\n return Nerv.createElement(\n 'div',\n {\n style: {\n padding: '10px',\n backgroundClip: 'content-box',\n minHeight: '256px',\n height: '100%',\n backgroundColor: '#e3e4e5'\n }\n }\n // status === 'loading' ?\n // Nerv.createElement(\n // 'div',\n // {\n // style: {\n // width: 0,\n // height: 0,\n // overflow: 'hidden'\n // }\n // },\n // that.getWrappedElement()\n // ) : null\n )\n } else {\n // return that.getWrappedElement()\n // 缺点是多了一层 div\n this.cc = this.cc || that.getWrappedElement()\n return Nerv.createElement(\n 'div',\n status === 'loading' ? {\n style: {\n padding: '10px',\n backgroundClip: 'content-box',\n minHeight: '256px',\n height: '100%',\n backgroundColor: '#e3e4e5'\n }\n } : {},\n this.cc\n )\n }\n }\n })\n\n function createTree (tree) {\n tree = tree.filter(function (item) {\n return item.isShow === undefined || item.isShow === true\n })\n\n return tree.map(function (item) {\n var hasChildren = item.childrens && item.childrens.length\n hasChildren && (item.props.children = createTree(item.childrens))\n if (hasChildren) {\n return genComponentElement(item.type, item.props, item.props.content)\n } else {\n return Nerv.createElement(\n LingAtomScrollContext.Consumer,\n {},\n function (context) {\n return Nerv.createElement(\n LazyLoadComponent,\n {\n item: item,\n __context: context\n }\n )\n }\n )\n }\n })\n }\n\n var App = NervCreateClass({\n getInitialState: function () {\n return {\n scrollTop: 0,\n windowHeight: window.innerHeight,\n bodyHeight: document.body.clientHeight\n }\n },\n componentDidMount: function () {\n var that = this\n window.onscroll = throttle(function () {\n var bodyScrollHeight = document.documentElement.scrollTop || document.body.scrollTop\n that.setState({\n scrollTop: bodyScrollHeight\n })\n }, 200)\n window.onresize = function () {\n var windowInnerHeight = window.innerHeight\n if (windowInnerHeight === that.state.windowHeight) return\n that.setState({\n windowHeight: windowInnerHeight\n })\n }\n function onElementHeightChange (elm, callback) {\n var lastHeight = elm.clientHeight\n var newHeight\n (function run () {\n newHeight = elm.clientHeight\n if (lastHeight !== newHeight) {\n callback(newHeight)\n }\n lastHeight = newHeight\n if (elm.onElementHeightChangeTimer) {\n clearTimeout(elm.onElementHeightChangeTimer)\n }\n elm.onElementHeightChangeTimer = setTimeout(run, 200)\n })()\n }\n onElementHeightChange(document.body, function (h) {\n that.setState({ bodyHeight: h })\n })\n },\n render: function () {\n return Nerv.createElement(\n LingAtomScrollContext.Provider,\n {\n value: this.state\n },\n createTree(window.o2PageConfig.data)\n )\n }\n })\n\n Nerv.render(\n Nerv.createElement(App),\n document.querySelector('#app')\n )\n }()\n \n \n\n\n\n\n ✖ ✍操作台(点此拖动,左上角调整大小) \n ● 已选中1个元素,您可以:\n 确认采集 取消选择 Path: /html/body \n"}],"unique_index":"dm351g9ekwlq2nym1s","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/269.json b/ElectronJS/tasks/269.json new file mode 100644 index 0000000..3f73d23 --- /dev/null +++ b/ElectronJS/tasks/269.json @@ -0,0 +1 @@ +{"id":269,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"12/13/2023, 3:19:13 AM","update_time":"12/13/2023, 3:27:32 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.jd.com"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,7],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":-1,"index":2,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"newTab":1,"maxWaitTime":10,"paras":[],"alertHandleType":0}},{"id":-1,"index":3,"parentId":0,"type":1,"option":8,"title":"循环点击单个元素","sequence":[4],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"LeftSide_menu_list__qXCeM\")]/div[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":0,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]","//div[contains(., '/手机/数码')]","//DIV[@class='LeftSide_menu_item__SBMWC LeftSide_text_space__2UhbG ']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]"]}},{"id":-1,"index":4,"parentId":3,"type":0,"option":2,"title":"点击手机/数码","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"newTab":1,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]","//div[contains(., '/手机/数码')]","//DIV[@class='LeftSide_menu_item__SBMWC LeftSide_text_space__2UhbG ']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]"]}},{"id":-1,"index":5,"parentId":0,"type":0,"option":2,"title":"点击手机/数码","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"LeftSide_menu_list__qXCeM\")]/div[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":"不滚动","scrollCount":1,"scrollWaitTime":1,"clickWay":0,"newTab":1,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]","//div[contains(., '/手机/数码')]","//DIV[@class='LeftSide_menu_item__SBMWC LeftSide_text_space__2UhbG ']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]"]}},{"id":-1,"index":6,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"newTab":1,"maxWaitTime":10,"paras":[],"alertHandleType":0}},{"id":2,"index":7,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":"不滚动","scrollCount":1,"scrollWaitTime":1,"clickWay":1,"newTab":"0","maxWaitTime":10,"paras":[],"alertHandleType":0}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/270.json b/ElectronJS/tasks/270.json new file mode 100644 index 0000000..a67ee96 --- /dev/null +++ b/ElectronJS/tasks/270.json @@ -0,0 +1 @@ +{"id":270,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"12/13/2023, 3:41:58 AM","update_time":"12/13/2023, 3:43:29 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.jd.com"}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n \n \n \n \n \n 京东首页\n \t\t\t\t\t\t\t\t\t\t\t海外 \t\t\t\t\t\t\t\t\t\t\t\t\t\t \t\t\t\t\t北京上海天津重庆河北山西河南辽宁吉林黑龙江内蒙古江苏山东安徽浙江福建湖北湖南广东广西江西四川海南贵州云南西藏陕西甘肃青海宁夏新疆港澳台湾钓鱼岛海外 \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t 地区专享版本 \t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t中國港澳 \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t中國台灣 \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t京东全球 \t\t\t\t\t \t\t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t Available Sites \t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tGlobal Site \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tСайт России \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tSitus Indonesia \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tSitio de España \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\t เว็บไซต์ประเทศไทย \t\t\t\t\t\t \t\t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t\t\n \n \n 你好,请登录  免费注册\n \n \n \n 我的订单\n \n \n \n \n \n 我的京东\n \n \n \n \n \n \n 京东会员\n \n \n \n \n \n 企业采购\n \n \n \n \n \n 客户服务\n \n \n \n \n \n \n 网站导航\n \n \n \n \n \n \n 手机京东\n \n \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n 网站无障碍\n \n \n \n \n \n \n\n \n \n \n (function (window) {\n window.data = window.data || {}\n window.data['cms_header'] = {\n setting: [{\"NAME\":\"手机\",\"URL\":\"//\",\"ANCHOR\":\"\",\"property\":\"\",\"CUSTOM1\":\"#050505\",\"CUSTOM2\":\"\",\"CUSTOM3\":\"\"}]\n }\n })(window)\n \n \n #search-2014 .text {border-color: #050505;}#search-2014 .button {background: #050505;} 京东 手机 全部分类◇ 搜索 >0 我的购物车 \n \n\n \n\n \n \n 顶通组件占位手机分类热门推荐苹果华为荣耀小米vivoOPPO运营商手机卡营业厅充话费配件充电器数据线手机壳贴膜移动电源创意配件热门分类全部手机5G手机苹果 iPhone 11iPhone XS Max华为Mate40 Pro 4Gnova 8 Pro 无充Nova8SE 乐活版Mate 40 RSNova 9P50 Pro 4G华为智选手机荣耀荣耀V30 PRO荣耀30 Pro荣耀X10 Max荣耀Play4 Pro小米小米10Redmi K30vivoS10 ProX60Y70t iQOO 8 iQOO Neo5 iQOO Z3OPPOReno 6OPPO K9 Find X3品牌中国移动中国联通中国电信精选店铺京东通信北京移动广东移动宽带专区50M300M优选品牌Anker罗马仕品胜倍思绿联亿色毕亚兹斯泰克热卖爆款移动电源原装充电器散热背夹扩展坞苹果数据线氮化镓Type C信号放大器手游周边王者荣耀手机散热器吃鸡神器弯头线游戏手柄王座同屏器新奇好物氮化镓PD快充双向快充创意配件配件频道海量配件低至9.包邮机身存储16GB8GB4GB分辨率全高清FHD+高清HD+屏幕尺寸5.0英寸及以下5.0~5.49英寸5.5~5.99英寸6.0~6.24英寸有新机游戏手机手机营业厅手机好店以旧换新企业购热卖推荐人气新品限时特惠配件专区摩斯维 适用华为mate40pro手机壳Mate40 Pro保护套真素皮超薄epro全包防摔马特男女 【买家推荐!石墨黑】真皮质感丨贈全屏膜¥59.000度 联想拯救者Y90钢化膜手机膜全屏防蓝光电竞磨砂防反光游戏保护膜防汗防指纹疏油玻璃贴膜 拯救者Y90(AG悦享版)¥99.00漫步者(EDIFIER)W820NB经典版 头戴蓝牙主动降噪耳机 金标认证 蓝牙5.2 手机电脑笔记本耳机 云岩白¥279.00闪魔 苹果13钢化膜 iphone13Promax手机膜mini全屏无边高清抗指纹保护贴膜 苹果13/13Pro【加强版】2片+神器¥19.80声阔Soundcore超能小彩蛋 LifeP3主动降噪真无线TWS入耳式蓝牙耳机适用苹果/华为/小米手机蓝30H续航版¥349.00\n \n \n\n \n \n \n\n \n\n \n \n window.pageConfig = window.pageConfig || {}\n window.pageConfig.o2JSConfig = {\n useTplInJs: true,\n pathRule: function (path) {\n return '//static.360buyimg.com/mtd/pc/cms' + '/floors/' + path + '.min.js'\n }\n }\n \n seajs.use(['//static.360buyimg.com/mtd/pc/base/1.0.1/channel.js'])\n \n seajs.use(['//wl.jd.com/wl.js'])\n \n \n \n !(function () {\n var testObject = {}\n if (!(Object.setPrototypeOf || testObject.__proto__)) {\n var nativeGetPrototypeOf = Object.getPrototypeOf\n Object.getPrototypeOf = function (object) {\n return object.__proto__ || nativeGetPrototypeOf.call(Object, object)\n }\n }\n })()\n \n \n \n \n \n \n // nerv-create-class 用 'nervjs'\n window.nervjs = Nerv\n // nerv-create-class\n !(function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e(require(\"nervjs\")):\"function\"==typeof define&&define.amd?define([\"nervjs\"],e):t.NervCreateClass=e(t.nervjs)})(this,(function(t){\"use strict\";function e(t){return t===undefined||null===t}function n(){}function r(t){return\"function\"==typeof t}function o(t){return t===undefined}function i(t,n){for(var r in n)e(n[r])||(t[r]=n[r]);return t}function a(t){for(var e in t){var n=t[e];\"function\"!=typeof n||n.__bound||1===g[e]||((t[e]=n.bind(t)).__bound=!0)}}function c(t,e){void 0===e&&(e={});for(var n=0,r=t.length;n wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n };\n return throttled;\n }\n // Context\n var LingAtomScrollContext = Nerv.createContext({\n scrollTop: 0,\n windowHeight: 0,\n bodyHeight: 0\n })\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n function genComponentElement (type, props, children) {\n \n return Nerv.createElement(\n Lc[type] ? Lc[type].component : 'div',\n props,\n children\n )\n \n }\n \n \n window.Lc = window.Lc || {}\n Lc['Page'] = { component: 'div' }\n \n \n function EventEmitter () {\n var eventEmitterPool = {}\n var eventEmitter = {\n on: function (eventName, handler) {\n eventEmitterPool[eventName] = eventEmitterPool[eventName] || []\n eventEmitterPool[eventName].push(handler)\n },\n trigger: function (eventName) {\n var handlers = eventEmitterPool[eventName] || []\n var args = Array.prototype.slice.call(arguments, 1)\n for (var i = 0; i < handlers.length; i++) {\n handlers[i].apply(this, args)\n }\n },\n off: function (eventName, handler) {\n if (!eventEmitterPool[eventName]) return\n if (!handler) {\n eventEmitterPool[eventName] = []\n return\n }\n var handlers = eventEmitterPool[eventName] || []\n for (var i = 0; i < handlers.length; i++) {\n if (handlers[i] === handler) {\n eventEmitterPool[eventName].splice(i, 1)\n break\n }\n }\n }\n }\n return eventEmitter\n }\n var eventEmitter = EventEmitter()\n\n !function () {\n var downloadedBundles = [\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a6__5ee34e5afc685b3ecdd0f087.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a7__5ee34e58fc685b3ecdd0f078.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a8__5ee34e5afc685b3ecdd0f08a.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a9__5fa90cbc7e292cb70199df98.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd594__5ee34e59fc685b3ecdd0f07e.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5aa__5ee34e5bfc685b3ecdd0f094.js\"]\n var body = document.body || document.documentElement\n var Wrap = function (props) {\n return props.children\n }\n // Lazyload Component\n var LazyLoadComponent = NervCreateClass({\n // loading loaded\n status: '',\n getInitialState: function () {\n return {\n status: 'initial'\n }\n },\n updateOffsetTop: function () {\n if (this.state.status !== 'initial') return\n var node = Nerv.findDOMNode(this)\n var rect = node.getBoundingClientRect()\n var winHeight = this.props.__context.windowHeight\n var canLoad = rect.top < winHeight * 1.5 && rect.top + rect.height > -winHeight * 0.5\n if (canLoad) {\n this.downloadScript()\n }\n },\n delayLoaded: function () {\n var that = this\n setTimeout(function () {\n that.setState({ status: 'loaded' })\n }, 500)\n },\n downloadScript: function () {\n var that = this\n var myItem = this.props.item\n if (!myItem.reactBundle || downloadedBundles.indexOf(myItem.reactBundle) !== -1) {\n if (Lc[myItem.type]) {\n this.setState({ status: 'loading' })\n this.delayLoaded()\n } else {\n eventEmitter.on(myItem.type, function () {\n that.setState({ status: 'loading' })\n that.delayLoaded()\n })\n }\n return\n }\n myItem.reactBundle = myItem.reactBundle && myItem.reactBundle.replace('storage.jd.com', 'storage.360buyimg.com')\n downloadedBundles.push(myItem.reactBundle)\n var element = document.createElement('script')\n element.src = myItem.reactBundle\n element.charset = 'UTF-8'\n body.appendChild(element)\n element.onload = function () {\n that.setState({ status: 'loading' })\n that.delayLoaded()\n eventEmitter.trigger(myItem.type)\n }\n },\n componentDidMount: function () {\n this.updateOffsetTop()\n },\n componentWillReceiveProps: function (nextProps) {\n this.updateOffsetTop()\n },\n shouldComponentUpdate: function (nextProps, nextState) {\n return this.state.status !== nextState.status\n },\n componentDidCatch: function (error, info) {\n // console.log(error)\n // 上报组件渲染错误\n // @see //talos30011-prelb.o2athena.svc.n.jd.local/api-docs#null%2Fpaths%2F~1report%2Fpost\n var xhr = new XMLHttpRequest()\n xhr.open('POST', 'https://atom-log.3.cn/report', true)\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')\n xhr.send('platform=h5&url=' + location.href + '&cname=' + this.props.item.type + '&project=' + globalData.projectId)\n },\n getWrappedElement: function (extraProps) {\n if (this.WrappedElement) {\n return this.WrappedElement\n }\n var item = this.props.item\n var children = item.props.content || this.props.children || null\n var WrappedElement = genComponentElement(item.type, Object.assign({}, item.props, extraProps), children)\n this.WrappedElement = WrappedElement\n return WrappedElement\n },\n render: function () {\n var that = this\n var status = this.state.status\n // if (status === 'initial' || status === 'loading') {\n if (status === 'initial') {\n return Nerv.createElement(\n 'div',\n {\n style: {\n padding: '10px',\n backgroundClip: 'content-box',\n minHeight: '256px',\n height: '100%',\n backgroundColor: '#e3e4e5'\n }\n }\n // status === 'loading' ?\n // Nerv.createElement(\n // 'div',\n // {\n // style: {\n // width: 0,\n // height: 0,\n // overflow: 'hidden'\n // }\n // },\n // that.getWrappedElement()\n // ) : null\n )\n } else {\n // return that.getWrappedElement()\n // 缺点是多了一层 div\n this.cc = this.cc || that.getWrappedElement()\n return Nerv.createElement(\n 'div',\n status === 'loading' ? {\n style: {\n padding: '10px',\n backgroundClip: 'content-box',\n minHeight: '256px',\n height: '100%',\n backgroundColor: '#e3e4e5'\n }\n } : {},\n this.cc\n )\n }\n }\n })\n\n function createTree (tree) {\n tree = tree.filter(function (item) {\n return item.isShow === undefined || item.isShow === true\n })\n\n return tree.map(function (item) {\n var hasChildren = item.childrens && item.childrens.length\n hasChildren && (item.props.children = createTree(item.childrens))\n if (hasChildren) {\n return genComponentElement(item.type, item.props, item.props.content)\n } else {\n return Nerv.createElement(\n LingAtomScrollContext.Consumer,\n {},\n function (context) {\n return Nerv.createElement(\n LazyLoadComponent,\n {\n item: item,\n __context: context\n }\n )\n }\n )\n }\n })\n }\n\n var App = NervCreateClass({\n getInitialState: function () {\n return {\n scrollTop: 0,\n windowHeight: window.innerHeight,\n bodyHeight: document.body.clientHeight\n }\n },\n componentDidMount: function () {\n var that = this\n window.onscroll = throttle(function () {\n var bodyScrollHeight = document.documentElement.scrollTop || document.body.scrollTop\n that.setState({\n scrollTop: bodyScrollHeight\n })\n }, 200)\n window.onresize = function () {\n var windowInnerHeight = window.innerHeight\n if (windowInnerHeight === that.state.windowHeight) return\n that.setState({\n windowHeight: windowInnerHeight\n })\n }\n function onElementHeightChange (elm, callback) {\n var lastHeight = elm.clientHeight\n var newHeight\n (function run () {\n newHeight = elm.clientHeight\n if (lastHeight !== newHeight) {\n callback(newHeight)\n }\n lastHeight = newHeight\n if (elm.onElementHeightChangeTimer) {\n clearTimeout(elm.onElementHeightChangeTimer)\n }\n elm.onElementHeightChangeTimer = setTimeout(run, 200)\n })()\n }\n onElementHeightChange(document.body, function (h) {\n that.setState({ bodyHeight: h })\n })\n },\n render: function () {\n return Nerv.createElement(\n LingAtomScrollContext.Provider,\n {\n value: this.state\n },\n createTree(window.o2PageConfig.data)\n )\n }\n })\n\n Nerv.render(\n Nerv.createElement(App),\n document.querySelector('#app')\n )\n }()\n \n \n\n\n\n\n ✖ ✍操作台(点此拖动,左上角调整大小) \n ● 已选中1个元素,您可以:\n 确认采集 取消选择 Path: /html/body \n"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":1,"option":8,"title":"循环点击每个元素","sequence":[3,4],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div/a","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","textList":"","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":""}},{"id":3,"index":3,"parentId":2,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"newTab":0,"maxWaitTime":10,"paras":[],"alertHandleType":0,"allXPaths":""}},{"id":4,"index":4,"parentId":2,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"参数1_文本","desc":"","extractType":0,"relativeXPath":"/html/body","allXPaths":["/html/body","//body[contains(., '')]","/html/body"],"exampleValues":[{"num":0,"value":"\n \n \n \n \n \n 京东首页\n \t\t\t\t\t\t\t\t\t\t\t海外 \t\t\t\t\t\t\t\t\t\t\t\t\t\t \t\t\t\t\t北京上海天津重庆河北山西河南辽宁吉林黑龙江内蒙古江苏山东安徽浙江福建湖北湖南广东广西江西四川海南贵州云南西藏陕西甘肃青海宁夏新疆港澳台湾钓鱼岛海外 \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t 地区专享版本 \t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t中國港澳 \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t中國台灣 \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t京东全球 \t\t\t\t\t \t\t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t Available Sites \t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tGlobal Site \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tСайт России \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tSitus Indonesia \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\tSitio de España \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\t \t\t\t\t\t\t เว็บไซต์ประเทศไทย \t\t\t\t\t\t \t\t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t\t\n \n \n 你好,请登录  免费注册\n \n \n \n 我的订单\n \n \n \n \n \n 我的京东\n \n \n \n \n \n \n 京东会员\n \n \n \n \n \n 企业采购\n \n \n \n \n \n 客户服务\n \n \n \n \n \n \n 网站导航\n \n \n \n \n \n \n 手机京东\n \n \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n 网站无障碍\n \n \n \n \n \n \n\n \n \n \n (function (window) {\n window.data = window.data || {}\n window.data['cms_header'] = {\n setting: [{\"NAME\":\"手机\",\"URL\":\"//\",\"ANCHOR\":\"\",\"property\":\"\",\"CUSTOM1\":\"#050505\",\"CUSTOM2\":\"\",\"CUSTOM3\":\"\"}]\n }\n })(window)\n \n \n #search-2014 .text {border-color: #050505;}#search-2014 .button {background: #050505;} 京东 手机 全部分类◇ 搜索 >0 我的购物车 \n \n\n \n\n \n \n 顶通组件占位手机分类热门推荐苹果华为荣耀小米vivoOPPO运营商手机卡营业厅充话费配件充电器数据线手机壳贴膜移动电源创意配件热门分类全部手机5G手机苹果 iPhone 11iPhone XS Max华为Mate40 Pro 4Gnova 8 Pro 无充Nova8SE 乐活版Mate 40 RSNova 9P50 Pro 4G华为智选手机荣耀荣耀V30 PRO荣耀30 Pro荣耀X10 Max荣耀Play4 Pro小米小米10Redmi K30vivoS10 ProX60Y70t iQOO 8 iQOO Neo5 iQOO Z3OPPOReno 6OPPO K9 Find X3品牌中国移动中国联通中国电信精选店铺京东通信北京移动广东移动宽带专区50M300M优选品牌Anker罗马仕品胜倍思绿联亿色毕亚兹斯泰克热卖爆款移动电源原装充电器散热背夹扩展坞苹果数据线氮化镓Type C信号放大器手游周边王者荣耀手机散热器吃鸡神器弯头线游戏手柄王座同屏器新奇好物氮化镓PD快充双向快充创意配件配件频道海量配件低至9.包邮机身存储16GB8GB4GB分辨率全高清FHD+高清HD+屏幕尺寸5.0英寸及以下5.0~5.49英寸5.5~5.99英寸6.0~6.24英寸有新机游戏手机手机营业厅手机好店以旧换新企业购热卖推荐人气新品限时特惠配件专区摩斯维 适用华为mate40pro手机壳Mate40 Pro保护套真素皮超薄epro全包防摔马特男女 【买家推荐!石墨黑】真皮质感丨贈全屏膜¥59.000度 联想拯救者Y90钢化膜手机膜全屏防蓝光电竞磨砂防反光游戏保护膜防汗防指纹疏油玻璃贴膜 拯救者Y90(AG悦享版)¥99.00漫步者(EDIFIER)W820NB经典版 头戴蓝牙主动降噪耳机 金标认证 蓝牙5.2 手机电脑笔记本耳机 云岩白¥279.00闪魔 苹果13钢化膜 iphone13Promax手机膜mini全屏无边高清抗指纹保护贴膜 苹果13/13Pro【加强版】2片+神器¥19.80声阔Soundcore超能小彩蛋 LifeP3主动降噪真无线TWS入耳式蓝牙耳机适用苹果/华为/小米手机蓝30H续航版¥349.00\n \n \n\n \n \n \n\n \n\n \n \n window.pageConfig = window.pageConfig || {}\n window.pageConfig.o2JSConfig = {\n useTplInJs: true,\n pathRule: function (path) {\n return '//static.360buyimg.com/mtd/pc/cms' + '/floors/' + path + '.min.js'\n }\n }\n \n seajs.use(['//static.360buyimg.com/mtd/pc/base/1.0.1/channel.js'])\n \n seajs.use(['//wl.jd.com/wl.js'])\n \n \n \n !(function () {\n var testObject = {}\n if (!(Object.setPrototypeOf || testObject.__proto__)) {\n var nativeGetPrototypeOf = Object.getPrototypeOf\n Object.getPrototypeOf = function (object) {\n return object.__proto__ || nativeGetPrototypeOf.call(Object, object)\n }\n }\n })()\n \n \n \n \n \n \n // nerv-create-class 用 'nervjs'\n window.nervjs = Nerv\n // nerv-create-class\n !(function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e(require(\"nervjs\")):\"function\"==typeof define&&define.amd?define([\"nervjs\"],e):t.NervCreateClass=e(t.nervjs)})(this,(function(t){\"use strict\";function e(t){return t===undefined||null===t}function n(){}function r(t){return\"function\"==typeof t}function o(t){return t===undefined}function i(t,n){for(var r in n)e(n[r])||(t[r]=n[r]);return t}function a(t){for(var e in t){var n=t[e];\"function\"!=typeof n||n.__bound||1===g[e]||((t[e]=n.bind(t)).__bound=!0)}}function c(t,e){void 0===e&&(e={});for(var n=0,r=t.length;n wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n };\n return throttled;\n }\n // Context\n var LingAtomScrollContext = Nerv.createContext({\n scrollTop: 0,\n windowHeight: 0,\n bodyHeight: 0\n })\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n function genComponentElement (type, props, children) {\n \n return Nerv.createElement(\n Lc[type] ? Lc[type].component : 'div',\n props,\n children\n )\n \n }\n \n \n window.Lc = window.Lc || {}\n Lc['Page'] = { component: 'div' }\n \n \n function EventEmitter () {\n var eventEmitterPool = {}\n var eventEmitter = {\n on: function (eventName, handler) {\n eventEmitterPool[eventName] = eventEmitterPool[eventName] || []\n eventEmitterPool[eventName].push(handler)\n },\n trigger: function (eventName) {\n var handlers = eventEmitterPool[eventName] || []\n var args = Array.prototype.slice.call(arguments, 1)\n for (var i = 0; i < handlers.length; i++) {\n handlers[i].apply(this, args)\n }\n },\n off: function (eventName, handler) {\n if (!eventEmitterPool[eventName]) return\n if (!handler) {\n eventEmitterPool[eventName] = []\n return\n }\n var handlers = eventEmitterPool[eventName] || []\n for (var i = 0; i < handlers.length; i++) {\n if (handlers[i] === handler) {\n eventEmitterPool[eventName].splice(i, 1)\n break\n }\n }\n }\n }\n return eventEmitter\n }\n var eventEmitter = EventEmitter()\n\n !function () {\n var downloadedBundles = [\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a6__5ee34e5afc685b3ecdd0f087.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a7__5ee34e58fc685b3ecdd0f078.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a8__5ee34e5afc685b3ecdd0f08a.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5a9__5fa90cbc7e292cb70199df98.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd594__5ee34e59fc685b3ecdd0f07e.js\",\"//storage.360buyimg.com/quark-platform/component/standard/5cd436279a6ea5003becd5aa__5ee34e5bfc685b3ecdd0f094.js\"]\n var body = document.body || document.documentElement\n var Wrap = function (props) {\n return props.children\n }\n // Lazyload Component\n var LazyLoadComponent = NervCreateClass({\n // loading loaded\n status: '',\n getInitialState: function () {\n return {\n status: 'initial'\n }\n },\n updateOffsetTop: function () {\n if (this.state.status !== 'initial') return\n var node = Nerv.findDOMNode(this)\n var rect = node.getBoundingClientRect()\n var winHeight = this.props.__context.windowHeight\n var canLoad = rect.top < winHeight * 1.5 && rect.top + rect.height > -winHeight * 0.5\n if (canLoad) {\n this.downloadScript()\n }\n },\n delayLoaded: function () {\n var that = this\n setTimeout(function () {\n that.setState({ status: 'loaded' })\n }, 500)\n },\n downloadScript: function () {\n var that = this\n var myItem = this.props.item\n if (!myItem.reactBundle || downloadedBundles.indexOf(myItem.reactBundle) !== -1) {\n if (Lc[myItem.type]) {\n this.setState({ status: 'loading' })\n this.delayLoaded()\n } else {\n eventEmitter.on(myItem.type, function () {\n that.setState({ status: 'loading' })\n that.delayLoaded()\n })\n }\n return\n }\n myItem.reactBundle = myItem.reactBundle && myItem.reactBundle.replace('storage.jd.com', 'storage.360buyimg.com')\n downloadedBundles.push(myItem.reactBundle)\n var element = document.createElement('script')\n element.src = myItem.reactBundle\n element.charset = 'UTF-8'\n body.appendChild(element)\n element.onload = function () {\n that.setState({ status: 'loading' })\n that.delayLoaded()\n eventEmitter.trigger(myItem.type)\n }\n },\n componentDidMount: function () {\n this.updateOffsetTop()\n },\n componentWillReceiveProps: function (nextProps) {\n this.updateOffsetTop()\n },\n shouldComponentUpdate: function (nextProps, nextState) {\n return this.state.status !== nextState.status\n },\n componentDidCatch: function (error, info) {\n // console.log(error)\n // 上报组件渲染错误\n // @see //talos30011-prelb.o2athena.svc.n.jd.local/api-docs#null%2Fpaths%2F~1report%2Fpost\n var xhr = new XMLHttpRequest()\n xhr.open('POST', 'https://atom-log.3.cn/report', true)\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')\n xhr.send('platform=h5&url=' + location.href + '&cname=' + this.props.item.type + '&project=' + globalData.projectId)\n },\n getWrappedElement: function (extraProps) {\n if (this.WrappedElement) {\n return this.WrappedElement\n }\n var item = this.props.item\n var children = item.props.content || this.props.children || null\n var WrappedElement = genComponentElement(item.type, Object.assign({}, item.props, extraProps), children)\n this.WrappedElement = WrappedElement\n return WrappedElement\n },\n render: function () {\n var that = this\n var status = this.state.status\n // if (status === 'initial' || status === 'loading') {\n if (status === 'initial') {\n return Nerv.createElement(\n 'div',\n {\n style: {\n padding: '10px',\n backgroundClip: 'content-box',\n minHeight: '256px',\n height: '100%',\n backgroundColor: '#e3e4e5'\n }\n }\n // status === 'loading' ?\n // Nerv.createElement(\n // 'div',\n // {\n // style: {\n // width: 0,\n // height: 0,\n // overflow: 'hidden'\n // }\n // },\n // that.getWrappedElement()\n // ) : null\n )\n } else {\n // return that.getWrappedElement()\n // 缺点是多了一层 div\n this.cc = this.cc || that.getWrappedElement()\n return Nerv.createElement(\n 'div',\n status === 'loading' ? {\n style: {\n padding: '10px',\n backgroundClip: 'content-box',\n minHeight: '256px',\n height: '100%',\n backgroundColor: '#e3e4e5'\n }\n } : {},\n this.cc\n )\n }\n }\n })\n\n function createTree (tree) {\n tree = tree.filter(function (item) {\n return item.isShow === undefined || item.isShow === true\n })\n\n return tree.map(function (item) {\n var hasChildren = item.childrens && item.childrens.length\n hasChildren && (item.props.children = createTree(item.childrens))\n if (hasChildren) {\n return genComponentElement(item.type, item.props, item.props.content)\n } else {\n return Nerv.createElement(\n LingAtomScrollContext.Consumer,\n {},\n function (context) {\n return Nerv.createElement(\n LazyLoadComponent,\n {\n item: item,\n __context: context\n }\n )\n }\n )\n }\n })\n }\n\n var App = NervCreateClass({\n getInitialState: function () {\n return {\n scrollTop: 0,\n windowHeight: window.innerHeight,\n bodyHeight: document.body.clientHeight\n }\n },\n componentDidMount: function () {\n var that = this\n window.onscroll = throttle(function () {\n var bodyScrollHeight = document.documentElement.scrollTop || document.body.scrollTop\n that.setState({\n scrollTop: bodyScrollHeight\n })\n }, 200)\n window.onresize = function () {\n var windowInnerHeight = window.innerHeight\n if (windowInnerHeight === that.state.windowHeight) return\n that.setState({\n windowHeight: windowInnerHeight\n })\n }\n function onElementHeightChange (elm, callback) {\n var lastHeight = elm.clientHeight\n var newHeight\n (function run () {\n newHeight = elm.clientHeight\n if (lastHeight !== newHeight) {\n callback(newHeight)\n }\n lastHeight = newHeight\n if (elm.onElementHeightChangeTimer) {\n clearTimeout(elm.onElementHeightChangeTimer)\n }\n elm.onElementHeightChangeTimer = setTimeout(run, 200)\n })()\n }\n onElementHeightChange(document.body, function (h) {\n that.setState({ bodyHeight: h })\n })\n },\n render: function () {\n return Nerv.createElement(\n LingAtomScrollContext.Provider,\n {\n value: this.state\n },\n createTree(window.o2PageConfig.data)\n )\n }\n })\n\n Nerv.render(\n Nerv.createElement(App),\n document.querySelector('#app')\n )\n }()\n \n \n\n\n\n\n ✖ ✍操作台(点此拖动,左上角调整大小) \n ● 已选中1个元素,您可以:\n 确认采集 取消选择 Path: /html/body \n"}],"unique_index":"xqma7qqbzfrlq2r0zcc","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/271.json b/ElectronJS/tasks/271.json new file mode 100644 index 0000000..0edb69f --- /dev/null +++ b/ElectronJS/tasks/271.json @@ -0,0 +1 @@ +{"id":271,"name":"弹窗示例","url":"https://easyspider.cn/test_pages/alert_test.html","links":"https://easyspider.cn/test_pages/alert_test.html","create_time":"12/13/2023, 3:51:03 AM","update_time":"12/13/2023, 3:53:47 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://easyspider.cn/test_pages/alert_test.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://easyspider.cn/test_pages/alert_test.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://easyspider.cn/test_pages/alert_test.html"}],"outputParameters":[],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,6],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://easyspider.cn/test_pages/alert_test.html","links":"https://easyspider.cn/test_pages/alert_test.html","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":-1,"index":2,"parentId":0,"type":0,"option":2,"title":"点击点击我","sequence":[],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/button[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"alertHandleType":2,"allXPaths":["/html/body/button[1]","//button[contains(., '点击我')]","/html/body/button"]}},{"id":-1,"index":3,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"参数1_文本","desc":"","extractType":0,"relativeXPath":"/html/body[1]/p[eval(\"self.a+1\")]","allXPaths":["//html[1]","//html[contains(., '弹窗示例')]","/html"],"exampleValues":[{"num":0,"value":"\n 弹窗示例\n \n \n function showAlert() {\n alert('你已经点击了按钮!');\n }\n \n\n\n\n#wrapperToolkitIframe{\n position: absolute;\n top:0;\n}\n.toolcannotdrag{\n background-color: navy;\n width: 100%;\n text-align: center;\n font-size: 13px;\n height: 26px !important;\n padding-top: 8px !important;\n color: white;\n}\n\n\n点击我\n\n\n ✖ ✍操作台(点此拖动,左上角调整大小) \n ● 已选中1个元素,您可以:\n 确认采集 取消选择 Path: //html \n"}],"unique_index":"d8of3rzoypelpr7n0qm","iframe":false,"default":"12345","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"alert(eval(\"self.a+2+int('1')\"))","afterJSWaitTime":0,"downloadPic":0}]}},{"id":-1,"index":4,"parentId":0,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":"5","code":"self.a = 1\nself.b = \"45\"","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":-1,"index":5,"parentId":0,"type":0,"option":5,"title":"自定义操作","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"codeMode":0,"code":"console.log(\"Field[\"参数1_文本\"]Field[\"参数1_文本\"]\")","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":2,"index":6,"parentId":0,"type":0,"option":2,"title":"点击点击我","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":3,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/button[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"newTab":1,"maxWaitTime":10,"paras":[],"alertHandleType":2,"allXPaths":["/html/body/button[1]","//button[contains(., '点击我')]","/html/body/button"]}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/272.json b/ElectronJS/tasks/272.json new file mode 100644 index 0000000..da3b7e0 --- /dev/null +++ b/ElectronJS/tasks/272.json @@ -0,0 +1 @@ +{"id":272,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"12/13/2023, 4:39:20 AM","update_time":"12/13/2023, 4:39:20 AM","version":"0.6.0","saveThreshold":10,"quitWaitTime":60,"environment":0,"maximizeWindow":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"pauseKey":"p","containJudge":false,"desc":"https://www.jd.com","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.jd.com","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.jd.com"},{"id":1,"name":"inputText_1","nodeName":"输入文字","nodeId":2,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"text","exampleValue":"123","value":"123"},{"id":2,"name":"loopText_2","nodeId":3,"nodeName":"循环","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"123124\nt\na\nb\nc","value":"123124\nt\na\nb\nc"}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"/手机/数码"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"/"},{"id":2,"name":"参数3_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"手机"},{"id":3,"name":"参数4_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://shouji.jd.com/"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"/"},{"id":5,"name":"参数6_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"数码"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://shuma.jd.com/"},{"id":7,"name":"参数8_文本","desc":"","type":"text","recordASField":1,"exampleValue":"/"},{"id":8,"name":"参数9_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"厨具"},{"id":9,"name":"参数10_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://channel.jd.com/kitchenware.html"},{"id":10,"name":"参数11_文本","desc":"","type":"text","recordASField":1,"exampleValue":"/"},{"id":11,"name":"参数12_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"工业品"},{"id":12,"name":"参数13_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://pro.jd.com/mall/active/2u2DR1dUiK34csAE3DqmcG8aXvUK/index.html"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"123","index":0,"allXPaths":["/html/body/div[4]/div[1]/div[2]/div[1]/input[1]","//input[contains(., '')]","id(\"key\")","//INPUT[@class='text']","/html/body/div[last()-6]/div/div[last()-2]/div/input"]}},{"id":3,"index":3,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[4,5,7],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":3,"pathList":"","textList":"123124\nt\na\nb\nc","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[4]/div[1]/div[2]/div[1]/input[1]","//input[contains(., '')]","id(\"key\")","//INPUT[@class='text']","/html/body/div[last()-6]/div/div[last()-2]/div/input"]}},{"id":4,"index":4,"parentId":3,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"123124","index":0,"allXPaths":["/html/body/div[4]/div[1]/div[2]/div[1]/input[1]","//input[contains(., '')]","id(\"key\")","//INPUT[@class='text']","/html/body/div[last()-6]/div/div[last()-2]/div/input"]}},{"id":5,"index":5,"parentId":3,"type":1,"option":8,"title":"循环采集数据","sequence":[6],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]","//div[contains(., '/手机/数码')]","//DIV[@class='LeftSide_menu_item__SBMWC LeftSide_text_space__2UhbG ']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]"]}},{"id":7,"index":6,"parentId":5,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":0,"relative":true,"name":"参数1_文本","desc":"","extractType":0,"relativeXPath":"","allXPaths":"","exampleValues":[{"num":0,"value":"/手机/数码"}],"unique_index":"latwwzlw98elq2t2bcm","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}},{"id":6,"index":7,"parentId":3,"type":1,"option":8,"title":"循环采集数据","sequence":[8],"isInLoop":true,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"loopType":1,"pathList":"","code":"","waitTime":0,"exitCount":0,"exitElement":"//body","historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]","//div[contains(., '/手机/数码')]","//DIV[@class='LeftSide_menu_item__SBMWC LeftSide_text_space__2UhbG ']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]"]}},{"id":8,"index":8,"parentId":6,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"newLine":1,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数2_文本","desc":"","relativeXPath":"/span[1]","allXPaths":["/span[1]","//span[contains(., '/')]","//SPAN[@class='LeftSide_cate_menu_line__vzQu9 LeftSide_fore0__r2Yrl']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]/span[last()-1]"],"exampleValues":[{"num":0,"value":"/"}],"unique_index":"/span[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数3_链接文本","desc":"","relativeXPath":"/a[1]","allXPaths":["/a[1]","//a[contains(., '手机')]","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]/a[last()-1]"],"exampleValues":[{"num":0,"value":"手机"}],"unique_index":"/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数4_链接地址","desc":"","relativeXPath":"/a[1]","allXPaths":["/a[1]","//a[contains(., '手机')]","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]/a[last()-1]"],"exampleValues":[{"num":0,"value":"https://shouji.jd.com/"}],"unique_index":"/a[1]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数5_文本","desc":"","relativeXPath":"/span[2]","allXPaths":["/span[2]","//span[contains(., '/')]","//SPAN[@class='LeftSide_cate_menu_line__vzQu9 undefined']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]/span"],"exampleValues":[{"num":0,"value":"/"}],"unique_index":"/span[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数6_链接文本","desc":"","relativeXPath":"/a[2]","allXPaths":["/a[2]","//a[contains(., '数码')]","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]/a"],"exampleValues":[{"num":0,"value":"数码"}],"unique_index":"/a[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数7_链接地址","desc":"","relativeXPath":"/a[2]","allXPaths":["/a[2]","//a[contains(., '数码')]","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-12]/a"],"exampleValues":[{"num":0,"value":"https://shuma.jd.com/"}],"unique_index":"/a[2]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数8_文本","desc":"","relativeXPath":"/span[3]","allXPaths":["/span[3]","//span[contains(., '/')]","//SPAN[@class='LeftSide_cate_menu_line__vzQu9 undefined']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-9]/span"],"exampleValues":[{"num":3,"value":"/"}],"unique_index":"/span[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数9_链接文本","desc":"","relativeXPath":"/a[3]","allXPaths":["/a[3]","//a[contains(., '厨具')]","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-9]/a"],"exampleValues":[{"num":3,"value":"厨具"}],"unique_index":"/a[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数10_链接地址","desc":"","relativeXPath":"/a[3]","allXPaths":["/a[3]","//a[contains(., '厨具')]","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-9]/a"],"exampleValues":[{"num":3,"value":"https://channel.jd.com/kitchenware.html"}],"unique_index":"/a[3]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":1,"relative":true,"name":"参数11_文本","desc":"","relativeXPath":"/span[4]","allXPaths":["/span[4]","//span[contains(., '/')]","//SPAN[@class='LeftSide_cate_menu_line__vzQu9 undefined']","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-8]/span"],"exampleValues":[{"num":4,"value":"/"}],"unique_index":"/span[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数12_链接文本","desc":"","relativeXPath":"/a[4]","allXPaths":["/a[4]","//a[contains(., '工业品')]","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-8]/a"],"exampleValues":[{"num":4,"value":"工业品"}],"unique_index":"/a[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":2,"contentType":0,"relative":true,"name":"参数13_链接地址","desc":"","relativeXPath":"/a[4]","allXPaths":["/a[4]","//a[contains(., '工业品')]","/html/body/div[last()-5]/div/div[last()-4]/div/div[last()-2]/div/div/div/div[last()-1]/div[last()-8]/a"],"exampleValues":[{"num":4,"value":"https://pro.jd.com/mall/active/2u2DR1dUiK34csAE3DqmcG8aXvUK/index.html"}],"unique_index":"/a[4]","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}}]} \ No newline at end of file diff --git a/ExecuteStage/.vscode/launch.json b/ExecuteStage/.vscode/launch.json index deedd8e..39df455 100644 --- a/ExecuteStage/.vscode/launch.json +++ b/ExecuteStage/.vscode/launch.json @@ -12,7 +12,7 @@ "justMyCode": false, // "args": ["--ids", "[7]", "--read_type", "remote", "--headless", "0"] // "args": ["--ids", "[9]", "--read_type", "remote", "--headless", "0", "--saved_file_name", "YOUTUBE"] - "args": ["--ids", "[20]", "--headless", "0", "--user_data", "0", "--keyboard", "0", + "args": ["--ids", "[38]", "--headless", "0", "--user_data", "0", "--keyboard", "0", "--read_type", "remote"] // "args": "--ids '[97]' --user_data 1 --server_address http://localhost:8074 --config_folder '/Users/naibo/Documents/EasySpider/ElectronJS/' --headless 0 --read_type remote --config_file_name config.json --saved_file_name" } diff --git a/ExecuteStage/easyspider_executestage.py b/ExecuteStage/easyspider_executestage.py index 9d1fd1e..5e3e308 100644 --- a/ExecuteStage/easyspider_executestage.py +++ b/ExecuteStage/easyspider_executestage.py @@ -121,7 +121,7 @@ class BrowserThread(Thread): "will start from the last step, before we already collected", self.startSteps, " items.") else: self.print_and_log("此模式下,任务ID", self.id, - "将从头开始执行,如果需要从上次退出的步骤开始执行,请在保存任务时设置是否从上次保存位置开始执行为“是”。") + "将从头F开始执行,如果需要从上次退出的步骤开始执行,请在保存任务时设置是否从上次保存位置开始执行为“是”。") self.print_and_log("In this mode, task ID", self.id, "will start from the beginning, if you want to start from the last step, please set the option 'start from the last step' to 'yes' when saving the task.") stealth_path = driver_path[:driver_path.find( @@ -325,11 +325,17 @@ class BrowserThread(Thread): # 如果(不)固定元素列表循环中只有一个提取数据操作,且提取数据操作的提取内容为元素截图,那么可以快速提取 if len(node["sequence"]) == 1 and self.procedure[node["sequence"][0]]["option"] == 3 and (int(node["parameters"]["loopType"]) == 1 or int(node["parameters"]["loopType"]) == 2): paras = self.procedure[node["sequence"][0]]["parameters"]["paras"] - waitElement = self.procedure[node["sequence"][0]]["parameters"]["waitElement"] - node["parameters"]["quickExtractable"] = True # 先假设可以快速提取 + try: + waitElement = self.procedure[node["sequence"][0]]["parameters"]["waitElement"] + except: + waitElement = "" + if node["parameters"]["iframe"]: + node["parameters"]["quickExtractable"] = False # 如果是iframe,那么不可以快速提取 + else: + node["parameters"]["quickExtractable"] = True # 先假设可以快速提取 for para in paras: optimizable = detect_optimizable(para, ignoreWaitElement=False, waitElement=waitElement) - if para["iframe"]: # 如果是iframe,那么不可以快速提取 + if para["iframe"] and not para["relative"]: # 如果是iframe,那么不可以快速提取 optimizable = False if not optimizable: # 如果有一个不满足优化条件,那么就不能快速提取 node["parameters"]["quickExtractable"] = False @@ -911,7 +917,6 @@ class BrowserThread(Thread): self.event.wait() # 等待事件结束 # 对判断条件的处理 - def judgeExecute(self, node, loopElement, clickPath="", index=0): executeBranchId = 0 # 要执行的BranchId for i in node["sequence"]: @@ -1513,11 +1518,19 @@ class BrowserThread(Thread): click_way = int(para["clickWay"]) except: click_way = 0 + try: + newTab = int(para["newTab"]) + except: + newTab = 1 try: if click_way == 0: # 用selenium的点击方法 try: actions = ActionChains(self.browser) # 实例化一个action对象 - actions.click(element).perform() + if newTab == 1: # 在新标签页打开 + # Ctrl + Click + actions.key_down(Keys.CONTROL).click(element).key_up(Keys.CONTROL).perform() + else: + actions.click(element).perform() except Exception as e: self.browser.execute_script("arguments[0].scrollIntoView();", element) try: diff --git a/Extension/manifest_v3/src/content-scripts/global.js b/Extension/manifest_v3/src/content-scripts/global.js index 4bfe3e8..88cc3be 100644 --- a/Extension/manifest_v3/src/content-scripts/global.js +++ b/Extension/manifest_v3/src/content-scripts/global.js @@ -22,6 +22,8 @@ export var global = { iframe: false, }; + + export function isInIframe() { try { return window.self !== window.parent; @@ -261,6 +263,13 @@ export function clearParameters(deal = true) //清空参数列表 global.app._data.selectStatus = false; } +export function LANG(zh, en) { + if (global.lang == "zh") { + return zh; + } else { + return en; + } +} function parameterName(value){ if (global.lang == 'zh'){ return value; diff --git a/Extension/manifest_v3/src/content-scripts/messageInteraction.js b/Extension/manifest_v3/src/content-scripts/messageInteraction.js index 679c585..ada912b 100644 --- a/Extension/manifest_v3/src/content-scripts/messageInteraction.js +++ b/Extension/manifest_v3/src/content-scripts/messageInteraction.js @@ -1,6 +1,7 @@ //实现与后台和流程图部分的交互 -import {getElementXPaths, global, readXPath, isInIframe, clearEl} from "./global.js"; +import {getElementXPaths, global, readXPath, isInIframe, clearEl, LANG} from "./global.js"; +import {trial, createNotification} from "./trail.js"; global.ws = new WebSocket("ws://localhost:8084"); global.ws.onopen = function () { @@ -24,26 +25,30 @@ global.ws.onmessage = function (evt) { createNotification(LANG(evt["msg_zh"], evt["msg_en"]), evt["level"]); } else if (evt["type"] == "cancelSelection") { //试运行点击元素后取消选中元素 clearEl(); + } else if (evt["type"] == "trial"){ + trial(evt); } }; -function LANG(zh, en) { - if (global.lang == "zh") { - return zh; - } else { - return en; - } -} -export function input(value) { + +export function input(value, batch=false) { + let type = "inputText"; + let useLoop = false; + if (batch) { + type = "batchInputText"; + useLoop = true; + } let message = { - "type": "inputText", + "type": type, "history": history.length, //记录history的长度 "tabIndex": -1, "xpath": readXPath(global.nodeList[0]["node"], 0), "allXPaths": getElementXPaths(global.nodeList[0]["node"]), "iframe": global.iframe, "value": value, + "useLoop": useLoop, //是否使用循环内元素 + "loopType": 3, //循环类型,3为文本列表 }; window.stop(); let message_action = { @@ -171,63 +176,6 @@ export function collectSingle() { // createNotification(LANG("采集成功", "Collect successfully"), "success"); } -function createNotification(text, type="info") { - // 创建通知元素 - let notification = document.createElement('div'); - notification.className = 'notification_of_easyspider'; // 使用 class 方便后续添加样式 - notification.setAttribute("data-timestamp", new Date().getTime()); // 用于清除通知 - // 设置通知文本 - notification.innerText = text; - - // 定义与添加样式 - let cssText = ` - position: fixed; - bottom: 20px; /* 距底部20px */ - right: -320px; /* 初始位置在屏幕右侧,假设通知框宽度320px */ - min-width: 300px; - padding: 10px 20px; - color: white; - z-index: 2147483641; - border-radius: 4px; - text-align: center; - font-size: 15px; - box-shadow: 0 2px 6px rgba(0,0,0,0.3); - transition: right 0.5s ease-in-out; /* 动画效果 */ - `; - notification.style.cssText = cssText; - - if (type === "success") { - notification.style.backgroundColor = 'rgb(103, 194, 58)'; - } else if (type === "info") { - notification.style.backgroundColor = '#00a8ff'; - } else if (type === "warning") { - notification.style.backgroundColor = 'rgb(230, 162, 60)'; - } else if (type === "error") { - notification.style.backgroundColor = '#ff6b6b'; - } - - // 将通知添加到页面中 - document.body.appendChild(notification); - - // 触发动画,通知从右向左滑入 - setTimeout(function () { - notification.style.right = '20px'; // 调整距离左边的位置 - }, 100); - // let removeXPathText = text.split("是否正确:")[0].split("is correct:")[0]; - // let timeoutInterval = 1500 * removeXPathText.length / 5; - let timeoutInterval = 1500 * text.length / 5; - // 设置退出动画,通知从右向左滑出 - setTimeout(function () { - notification.style.right = '-320px'; // 向左退出 - // 确定动画结束后移除通知 - notification.addEventListener('transitionend', function () { - if (notification.parentNode === document.body) { - document.body.removeChild(notification); // 避免移除已经不存在的元素 - } - }); - }, timeoutInterval + 500); // 通知停留时间加上动画时间 -} - setInterval(function () { let notifications = document.getElementsByClassName("notification_of_easyspider"); for (let i = 0; i < notifications.length; i++) { diff --git a/Extension/manifest_v3/src/content-scripts/toolkit.vue b/Extension/manifest_v3/src/content-scripts/toolkit.vue index b7cfe57..b8ce327 100644 --- a/Extension/manifest_v3/src/content-scripts/toolkit.vue +++ b/Extension/manifest_v3/src/content-scripts/toolkit.vue @@ -36,7 +36,8 @@ v-on:mousedown="selectDescendents">选中子元素
-

● Mouse move to smiling face ☺ to see operation help.

-

● When your mouse moves to the element, please right-click your +

● Mouse move to smiling face ☺ to see operation help.

+

● When your mouse moves to the element, please right-click your mouse button or press F7 on the keyboard to select it.

-

● If this toolbox blocks the page element, you can click the × button in the +

● If this toolbox blocks the page element, you can click the × button in the lower right corner of this toolbox to close it.

● When clicked with the left mouse button, the page will also respond, but this click operation will not be recorded in the task flow. Similarly, if you want to input in a text box but do not want the action to be recorded , you can move the mouse to the text box and press F9 on the keyboard to input.

● If you accidentally left-click on an element and cause the page to jump, simply go back or switch back to the tab.

@@ -193,7 +194,8 @@
-
Input Text +
Input Text + @@ -362,6 +364,7 @@ export default { el: '#realcontent', data: { lang: global.lang, + batch: false, //是否为批量输入模式 option: 0, list: {nl: global.nodeList, opp: global.outputParameters}, valTable: [], // 用来存储转换后的参数列表 @@ -578,7 +581,8 @@ export default { // global.nodeList[0]["node"].click(); //点击元素 clearEl(); }, - setInput: function () { //输入文字 + setInput: function (batch=false) { //输入文字 + this.batch = batch; this.page = 1; this.$nextTick(function () { //下一时刻获得焦点 document.getElementById("WTextBox").focus(); @@ -591,7 +595,7 @@ export default { // } else{ // global.nodeList[0]["node"].setAttribute("value", ""); // 先设置为空,再设置输入 box内容 // } - input(this.text); // 设置输入 + input(this.text, this.batch); // 设置输入 this.text = ""; clearEl(); }, diff --git a/Extension/manifest_v3/src/content-scripts/trail.js b/Extension/manifest_v3/src/content-scripts/trail.js new file mode 100644 index 0000000..4d9f3da --- /dev/null +++ b/Extension/manifest_v3/src/content-scripts/trail.js @@ -0,0 +1,150 @@ +import {LANG} from "./global.js"; + +//试运行操作标记 +export function trial(evt) { + let node = JSON.parse(evt["message"]["message"]["node"]); + let parentNode = JSON.parse(evt["message"]["message"]["parentNode"]); + let parameters = node.parameters; + let type = evt["message"]["message"]["type"]; + console.log("parameters", parameters); + if (type == 0) { + let option = node.option; + console.log("option", option); + if (option == 2 || option == 4 || option == 6 || option == 7) { + let xpath = parameters.xpath; + if (parameters.useLoop && option != 4 && option != 6) { + let parentXPath = parentNode.parameters.xpath; + xpath = parentXPath + xpath; + } + let element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + // if (element != null) { + // //移动到元素位置 + // element.scrollIntoView({block: "center", inline: "center"}); + // } + } else if (option == 10) { //条件分支 + let condition = parameters.class; + let result = 0; + let additionalInfo = ""; + if (condition == 0) { //无条件 + result = 1; + } else if (condition == 1) { //当前页面包含文本 + let value = parameters.value; + let element = document.getElementsByTagName("body")[0]; + let bodyText = element.innerText; + let outcome = bodyText.indexOf(value) >= 0; + if (outcome) { + result = 1; + } + } else if (condition == 2) { //当前页面包含元素,xpath + let xpath = parameters.value; + let element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + if (element != null) { + result = 1; + } + } else if (condition == 3) { //当前循环项包含文本,xpath + let value = parameters.value; + let xpath = parentNode.parameters.xpath; + let element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + if (element != null) { + let elementText = element.innerText; + let outcome = elementText.indexOf(value) >= 0; + if (outcome) { + result = 1; + } + } + if(result == 0){ + additionalInfo = LANG(",注意只会检索第一个匹配到的循环项", ", note that only the first matching loop item will be retrieved"); + } + } else if (condition == 4) { //当前循环项包含元素,xpath + let xpath = parentNode.parameters.xpath; + let value = parameters.value; + // full_path = "(" + parentPath + ")" + \ + // "[" + str(index + 1) + "]" + \ + // relativeXPath + content_type + xpath = "(" + xpath + ")" + "[" + "1" + "]" + value; + let element = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + if (element != null) { + result = 1; + } + if(result == 0){ + additionalInfo = LANG(",注意只会检索第一个匹配到的循环项", ", note that only the first matching loop item will be retrieved"); + } + } else if (condition == 5 || condition == 7) { //从主程序传入的结果 + result = evt["message"]["message"]["result"]; + if(condition == 7 && result == 0){ + additionalInfo = LANG(",注意只会检索第一个匹配到的循环项", ", note that only the first matching loop item will be retrieved"); + } + } else { + result = 2; + } + + if (result == 0) { + createNotification(LANG("当前页面下,条件分支“" + node.title + "”的条件未满足" + additionalInfo, "The condition of the conditional branch: " + node.title + " is not met on the current page" + additionalInfo), "warning"); + } else if (result == 1) { + createNotification(LANG("当前页面下,条件分支“" + node.title + "”的条件已满足" + additionalInfo, "The condition of the conditional branch: " + node.title + " is met on the current page" + additionalInfo), "success"); + } else if (result == 2) { + createNotification(LANG("不支持此条件判断类型的动态调试,请在任务正式调用阶段测试是否有效。", "Dynamic debugging of this condition judgment type is not supported. Please test whether it is valid in the formal call stage."), "info"); + } + } + + } + +} + +export function createNotification(text, type = "info") { + // 创建通知元素 + let notification = document.createElement('div'); + notification.className = 'notification_of_easyspider'; // 使用 class 方便后续添加样式 + notification.setAttribute("data-timestamp", new Date().getTime()); // 用于清除通知 + // 设置通知文本 + notification.innerText = text; + + // 定义与添加样式 + let cssText = ` + position: fixed; + bottom: 20px; /* 距底部20px */ + right: -320px; /* 初始位置在屏幕右侧,假设通知框宽度320px */ + min-width: 300px; + padding: 10px 20px; + color: white; + z-index: 2147483641; + border-radius: 4px; + text-align: center; + font-size: 15px; + box-shadow: 0 2px 6px rgba(0,0,0,0.3); + transition: right 0.5s ease-in-out; /* 动画效果 */ + `; + notification.style.cssText = cssText; + + if (type === "success") { + notification.style.backgroundColor = 'rgb(103, 194, 58)'; + } else if (type === "info") { + notification.style.backgroundColor = '#00a8ff'; + } else if (type === "warning") { + notification.style.backgroundColor = 'rgb(230, 162, 60)'; + } else if (type === "error") { + notification.style.backgroundColor = '#ff6b6b'; + notification.style.bottom = '70px'; + } + + // 将通知添加到页面中 + document.body.appendChild(notification); + + // 触发动画,通知从右向左滑入 + setTimeout(function () { + notification.style.right = '20px'; // 调整距离左边的位置 + }, 100); + // let removeXPathText = text.split("是否正确:")[0].split("is correct:")[0]; + // let timeoutInterval = 1500 * removeXPathText.length / 5; + let timeoutInterval = 1500 * text.length / 5; + // 设置退出动画,通知从右向左滑出 + setTimeout(function () { + notification.style.right = '-320px'; // 向左退出 + // 确定动画结束后移除通知 + notification.addEventListener('transitionend', function () { + if (notification.parentNode === document.body) { + document.body.removeChild(notification); // 避免移除已经不存在的元素 + } + }); + }, timeoutInterval + 500); // 通知停留时间加上动画时间 +} \ No newline at end of file diff --git a/Extension/manifest_v3/src/style/toolkit.css b/Extension/manifest_v3/src/style/toolkit.css index f731273..a0f91f3 100644 --- a/Extension/manifest_v3/src/style/toolkit.css +++ b/Extension/manifest_v3/src/style/toolkit.css @@ -164,7 +164,8 @@ position: sticky; top: 0px; margin-bottom: 0px; - background-color: azure; + /*background-color: azure;*/ + background-color: aliceblue; z-index: 1000; }