From a3ed52a54df1809d68898303fcad234a6f899920 Mon Sep 17 00:00:00 2001 From: naibo Date: Thu, 10 Aug 2023 21:34:50 +0800 Subject: [PATCH] Bug fix --- .../Code/easyspider_executestage.py | 1095 +++++++++++------ .../EasySpider_windows_x64/Code/utils.py | 157 ++- .../execution_instances/0.json | 1 - .../execution_instances/1.json | 1 - .../execution_instances/10.json | 1 - .../execution_instances/2.json | 1 - .../execution_instances/3.json | 1 - .../execution_instances/4.json | 1 - .../execution_instances/5.json | 1 - .../execution_instances/6.json | 1 - .../execution_instances/7.json | 1 - .../execution_instances/8.json | 1 - .../execution_instances/9.json | 1 - .../EasySpider_windows_x64/tasks/205.json | 1 + .../EasySpider_windows_x64/tasks/206.json | 1 + ElectronJS/EasySpider_en.crx | Bin 208114 -> 208114 bytes ElectronJS/EasySpider_zh.crx | Bin 208112 -> 208112 bytes ElectronJS/tasks/205.json | 1 + ElectronJS/tasks/206.json | 1 + ExecuteStage/.vscode/launch.json | 2 +- ExecuteStage/easyspider_executestage.py | 7 +- 21 files changed, 860 insertions(+), 416 deletions(-) delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/0.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/1.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/10.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/2.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/3.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/4.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/5.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/6.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/7.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/8.json delete mode 100644 .temp_to_pub/EasySpider_windows_x64/execution_instances/9.json create mode 100644 .temp_to_pub/EasySpider_windows_x64/tasks/205.json create mode 100644 .temp_to_pub/EasySpider_windows_x64/tasks/206.json create mode 100644 ElectronJS/tasks/205.json create mode 100644 ElectronJS/tasks/206.json diff --git a/.temp_to_pub/EasySpider_windows_x64/Code/easyspider_executestage.py b/.temp_to_pub/EasySpider_windows_x64/Code/easyspider_executestage.py index 17a8ba6..a101350 100644 --- a/.temp_to_pub/EasySpider_windows_x64/Code/easyspider_executestage.py +++ b/.temp_to_pub/EasySpider_windows_x64/Code/easyspider_executestage.py @@ -1,5 +1,28 @@ # -*- coding: utf-8 -*- # import atexit +from utils import download_image, get_output_code, isnotnull, lowercase_tags_in_xpath, myMySQL, new_line, on_press_creator, on_release_creator, replace_field_values, write_to_csv, write_to_excel, write_to_json +from myChrome import MyChrome +from threading import Thread, Event +from PIL import Image +from commandline_config import Config +import os +import csv +from openpyxl import load_workbook, Workbook +import random +from selenium.webdriver import ActionChains +from selenium.webdriver.support.ui import Select +from selenium.webdriver.common.desired_capabilities import DesiredCapabilities +from selenium.common.exceptions import StaleElementReferenceException, InvalidSelectorException +from selenium.common.exceptions import TimeoutException +from selenium.common.exceptions import NoSuchElementException +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.support.ui import WebDriverWait +from selenium import webdriver +from selenium.webdriver.common.action_chains import ActionChains +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.chrome.options import Options +from pynput.keyboard import Key, Listener from datetime import datetime import io # 遇到错误退出时应执行的代码 import json @@ -13,47 +36,34 @@ import sys # import hashlib import time import requests +from ddddocr import DdddOcr from urllib.parse import urljoin from lxml import etree -# import undetected_chromedriver as uc -from pynput.keyboard import Key, Listener -from selenium.webdriver.chrome.options import Options -from selenium.webdriver.common.keys import Keys -from selenium.webdriver.common.action_chains import ActionChains -from selenium import webdriver -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from selenium.webdriver.common.by import By -from selenium.common.exceptions import NoSuchElementException -from selenium.common.exceptions import TimeoutException -from selenium.common.exceptions import StaleElementReferenceException, InvalidSelectorException -from selenium.webdriver.common.desired_capabilities import DesiredCapabilities -from selenium.webdriver.support.ui import Select -from selenium.webdriver import ActionChains -from selenium.webdriver.common.by import By -import random +import onnxruntime +onnxruntime.set_default_logger_severity(3) # 隐藏onnxruntime的日志 +import undetected_chromedriver as uc # import pandas as pd -from openpyxl import load_workbook, Workbook # import numpy -import csv -import os -from commandline_config import Config -import pytesseract -from PIL import Image +# import pytesseract # import uuid -from threading import Thread, Event -from myChrome import MyChrome if sys.platform != "darwin": from myChrome import MyUCChrome -from utils import download_image, get_output_code, isnull, lowercase_tags_in_xpath, myMySQL, new_line, on_press_creator, on_release_creator, write_to_csv, write_to_excel desired_capabilities = DesiredCapabilities.CHROME desired_capabilities["pageLoadStrategy"] = "none" + class BrowserThread(Thread): def __init__(self, browser_t, id, service, version, event, saveName, config): Thread.__init__(self) + self.logs = io.StringIO() + try: + self.log = bool(service["recordLog"]) + except: + self.log = True self.browser = browser_t self.config = config + self.version = version + self.totalSteps = 0 self.id = id self.event = event try: @@ -62,32 +72,51 @@ class BrowserThread(Thread): now = datetime.now() # 将时间格式化为精确到秒的字符串 self.saveName = now.strftime("%Y_%m_%d_%H_%M_%S") - self.log = "" self.OUTPUT = "" self.SAVED = False self.BREAK = False + self.CONTINUE = False # 名称设定 - if saveName != "": # 命令行覆盖保存名称 + if saveName != "": # 命令行覆盖保存名称 self.saveName = saveName # 保存文件的名字 now = datetime.now().strftime("%Y_%m_%d_%H_%M_%S") self.saveName = self.saveName.replace("current_time", now) - print("Save Name for task ID", i, "is:", self.saveName) - print("任务ID", i, "的保存文件名为:", self.saveName) + self.print_and_log("任务ID", i, "的保存文件名为:", self.saveName) + self.print_and_log("Save Name for task ID", i, "is:", self.saveName) if not os.path.exists("Data/Task_" + str(i)): os.mkdir("Data/Task_" + str(i)) if not os.path.exists("Data/Task_" + str(i) + "/" + self.saveName): - os.mkdir("Data/Task_" + str(i) + "/" + self.saveName) # 创建保存文件夹用来保存截图 - + os.mkdir("Data/Task_" + str(i) + "/" + + self.saveName) # 创建保存文件夹用来保存截图 + self.getDataStep = 0 + self.startSteps = 0 + try: + startFromExit = service["startFromExit"] # 从上次退出的步骤开始 + if startFromExit == 1: + with open("Data/Task_" + str(self.id) + "/" + self.saveName + '_steps.txt', 'r', encoding='utf-8-sig') as file_obj: + self.startSteps = int(file_obj.read()) # 读取已执行步数 + except: + pass + if self.startSteps != 0: + self.print_and_log("此模式下,任务ID", self.id, "将从上次退出的步骤开始执行,之前已采集条数为", + self.startSteps, "条。") + self.print_and_log("In this mode, task ID", self.id, + "will start from the last step, before we already collected", self.startSteps, " items.") + else: + self.print_and_log("此模式下,任务ID", self.id, + "将从头开始执行,如果需要从上次退出的步骤开始执行,请在保存任务时设置是否从上次保存位置开始执行为“是”。") + 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( "chromedriver")] + "stealth.min.js" with open(stealth_path, 'r') as f: js = f.read() - print("Loading stealth.min.js") + self.print_and_log("Loading stealth.min.js") self.browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': js}) # TMALL 反扒 WebDriverWait(self.browser, 10) - self.browser.get('about:blank') + # self.browser.get('about:blank') self.procedure = service["graph"] # 程序执行流程 try: self.maxViewLength = service["maxViewLength"] # 最大显示长度 @@ -98,19 +127,21 @@ class BrowserThread(Thread): except: self.outputFormat = "csv" try: + self.task_version = service["version"] # 任务版本 if service["version"] >= "0.3.1": # 0.3.1及以上版本以上的EasySpider兼容从0.3.1版本开始的所有版本 pass else: # 0.3.1以下版本的EasySpider不兼容0.3.1及以上版本的EasySpider if service["version"] != version: - print("版本不一致,请使用" + - service["version"] + "版本的EasySpider运行该任务!") - print("Version not match, please use EasySpider " + - service["version"] + " to run this task!") + self.print_and_log("版本不一致,请使用" + + service["version"] + "版本的EasySpider运行该任务!") + self.print_and_log("Version not match, please use EasySpider " + + service["version"] + " to run this task!") self.browser.quit() sys.exit() except: # 0.2.0版本没有version字段,所以直接退出 - print("版本不一致,请使用v0.2.0版本的EasySpider运行该任务!") - print("Version not match, please use EasySpider v0.2.0 to run this task!") + self.print_and_log("版本不一致,请使用v0.2.0版本的EasySpider运行该任务!") + self.print_and_log( + "Version not match, please use EasySpider v0.2.0 to run this task!") self.browser.quit() sys.exit() try: @@ -118,39 +149,36 @@ class BrowserThread(Thread): except: self.save_threshold = 10 self.links = list( - filter(isnull, service["links"].split("\n"))) # 要执行的link的列表 + filter(isnotnull, service["links"].split("\n"))) # 要执行的link的列表 self.OUTPUT = [] # 采集的数据 self.writeMode = 1 # 写入模式,0为新建,1为追加 - if self.outputFormat == "csv" or self.outputFormat == "txt": + if self.outputFormat == "csv" or self.outputFormat == "txt" or self.outputFormat == "xlsx": if not os.path.exists("Data/Task_" + str(self.id) + "/" + self.saveName + '.' + self.outputFormat): self.OUTPUT.append([]) # 添加表头 self.writeMode = 0 - elif self.outputFormat == "xlsx": - if not os.path.exists("Data/Task_" + str(self.id) + "/" + self.saveName + '.xlsx'): - self.OUTPUT.append([]) # 添加表头 - self.writeMode = 0 + elif self.outputFormat == "json": + self.writeMode = 3 # JSON模式无需判断是否存在文件 elif self.outputFormat == "mysql": self.mysql = myMySQL(config["mysql_config_path"]) self.mysql.create_table(self.saveName, service["outputParameters"]) self.writeMode = 2 - if self.writeMode == 1: - print("追加模式") - print("Append Mode") - elif self.writeMode == 0: - print("新建模式") - print("New Mode") + if self.writeMode == 0: + self.print_and_log("新建模式|Create Mode") + elif self.writeMode == 1: + self.print_and_log("追加模式|Append Mode") elif self.writeMode == 2: - print("MySQL模式") - print("MySQL Mode") + self.print_and_log("MySQL模式|MySQL Mode") + elif self.writeMode == 3: + self.print_and_log("JSON模式|JSON Mode") self.containJudge = service["containJudge"] # 是否含有判断语句 self.outputParameters = {} + self.service = service self.outputParametersTypes = [] - self.outputParametersRecord = [] # 字段是否被记录 + self.outputParametersRecord = [] # 字段是否被记录 self.dataNotFoundKeys = {} # 记录没有找到数据的key - self.log = "" # 记下现在总共开了多少个标签页 self.history = {"index": 0, "handle": None} # 记录页面现在所以在的历史记录的位置 self.SAVED = False # 记录是否已经存储了 - for para in service["outputParameters"]: # 初始化输出参数 + for para in service["outputParameters"]: # 初始化输出参数 if para["name"] not in self.outputParameters.keys(): self.outputParameters[para["name"]] = "" self.dataNotFoundKeys[para["name"]] = False @@ -159,7 +187,8 @@ class BrowserThread(Thread): except: self.outputParametersTypes.append("text") try: - self.outputParametersRecord.append(bool(para["recordASField"])) + self.outputParametersRecord.append( + bool(para["recordASField"])) except: self.outputParametersRecord.append(True) # 文件叠加的时候不添加表头 @@ -168,6 +197,11 @@ class BrowserThread(Thread): self.OUTPUT[0].append(para["name"]) self.urlId = 0 # 全局记录变量 self.preprocess() # 预处理,优化提取数据流程 + try: + self.inputExcel = service["inputExcel"] # 输入Excel + except: + self.inputExcel = "" + self.readFromExcel() # 读取Excel获得参数值 # 检测如果没有复杂的操作,优化提取数据流程 def preprocess(self): @@ -176,87 +210,205 @@ class BrowserThread(Thread): iframe = node["parameters"]["iframe"] except: node["parameters"]["iframe"] = False + try: node["parameters"]["xpath"] = lowercase_tags_in_xpath( node["parameters"]["xpath"]) except: pass + try: + node["parameters"]["waitElementIframeIndex"] = int( + node["parameters"]["waitElementIframeIndex"]) + except: + node["parameters"]["waitElement"] = "" + node["parameters"]["waitElementTime"] = 10 + node["parameters"]["waitElementIframeIndex"] = 0 if node["option"] == 1: # 打开网页操作 try: cookies = node["parameters"]["cookies"] except: node["parameters"]["cookies"] = "" - if node["option"] == 3: # 提取数据操作 + if node["option"] == 2: # 点击操作 + if node["parameters"]["useLoop"]: + if self.task_version <= "0.3.5": + # 0.3.5及以下版本的EasySpider下的循环点击不支持相对XPath + node["parameters"]["xpath"] = "" + self.print_and_log("您的任务版本号为" + self.task_version + + ",循环点击不支持相对XPath写法,已自动切换为纯循环的XPath") + elif node["option"] == 3: # 提取数据操作 + node["parameters"]["recordASField"] = 0 paras = node["parameters"]["paras"] + try: + clear = node["parameters"]["clear"] + except: + node["parameters"]["clear"] = 0 for para in paras: try: iframe = para["iframe"] except: para["iframe"] = False try: - para["relativeXPath"] = lowercase_tags_in_xpath(para["relativeXPath"]) + para["relativeXPath"] = lowercase_tags_in_xpath( + para["relativeXPath"]) except: pass + try: + node["parameters"]["recordASField"] += para["recordASField"] + except: + node["parameters"]["recordASField"] += 1 + if para["contentType"] == 8: + self.print_and_log( + "默认的ddddocr识别功能如果觉得不好用,可以自行修改源码get_content函数->contentType == 8的位置换成自己想要的OCR模型然后自己编译运行;或者可以先设置采集内容类型为“元素截图”把图片保存下来,然后用自定义操作调用自己写的程序,程序的功能是读取这个最新生成的图片,然后用好用的模型,如PaddleOCR把图片识别出来,然后把返回值返回给程序作为参数输出。") + self.print_and_log("If you think the default ddddocr function is not good enough, you can modify the source code get_content function -> contentType == 8 position to your own OCR model and then compile and run it; or you can first set the content type of the crawler to \"Element Screenshot\" to save the picture, and then call your own program with custom operations. The function of the program is to read the latest generated picture, then use a good model, such as PaddleOCR to recognize the picture, and then return the return value as a parameter output to the program.") if para["beforeJS"] == "" and para["afterJS"] == "" and para["contentType"] <= 1 and para["nodeType"] <= 2: para["optimizable"] = True else: para["optimizable"] = False + elif node["option"] == 4: # 输入文字 + try: + index = node["parameters"]["index"] # 索引值 + except: + node["parameters"]["index"] = 0 + elif node["option"] == 5: # 自定义操作 + try: + clear = node["parameters"]["clear"] + except: + node["parameters"]["clear"] = 0 + elif node["option"] == 7: # 移动到元素 + if node["parameters"]["useLoop"]: + if self.task_version <= "0.3.5": + # 0.3.5及以下版本的EasySpider下的循环点击不支持相对XPath + node["parameters"]["xpath"] = "" + self.print_and_log("您的任务版本号为" + self.task_version + + ",循环点击不支持相对XPath写法,已自动切换为纯循环的XPath") + self.print_and_log("预处理完成|Preprocess completed") + + def readFromExcel(self): + if self.inputExcel == "": + return 0 + try: + workbook = load_workbook(self.inputExcel) + except: + self.print_and_log("读取Excel失败,将会使用默认参数执行任务,请检查文件路径是否正确:", + os.path.abspath(self.inputExcel)) + self.print_and_log("Failed to read Excel, will execute the task with default parameters, please check if the file path is correct: ", + os.path.abspath(self.inputExcel)) + time.sleep(5) + return 0 + + sheet_name_list = workbook.sheetnames + sheet = workbook[sheet_name_list[0]] + data = [] + + for row in sheet.iter_rows(values_only=True): + data.append(list(row)) + + result = list(zip(*data)) + result_dict = {} + for row in result: + key = row[0] + values = [str(val) for val in row[1:] if val is not None] + result_dict.setdefault(key, []).extend([values]) + + data = {} + for key, arr in result_dict.items(): + result = [] + for cols in zip(*arr): + result.append("~".join(cols)) + data[key] = result + + try: + if "urlList_0" in data.keys(): + self.links = data["urlList_0"] + except: + pass + task = self.service + for key, value in data.items(): + for i in range(len(task["inputParameters"])): + if key == task["inputParameters"][i]["name"]: + nodeId = int(task["inputParameters"][i]["nodeId"]) + node = task["graph"][nodeId] + value = "\r\n".join(value) + if node["option"] == 1: + node["parameters"]["links"] = value + elif node["option"] == 4: + node["parameters"]["value"] = value + elif node["option"] == 8 and node["parameters"]["loopType"] == 0: + node["parameters"]["exitCount"] = int(value) + elif node["option"] == 8: + node["parameters"]["textList"] = value + break + self.print_and_log("已从Excel读取输入参数,覆盖了原有输入参数。") + self.print_and_log( + "Already read input parameters from Excel and overwrite the original input parameters.") def run(self): # 挨个执行程序 for i in range(len(self.links)): - print("正在执行第", i + 1, "/ ", len(self.links), "个链接") - print("Executing link", i + 1, "/ ", len(self.links)) + self.print_and_log("正在执行第", i + 1, "/ ", len(self.links), "个链接") + self.print_and_log("Executing link", i + 1, + "/ ", len(self.links)) self.executeNode(0) self.urlId = self.urlId + 1 files = os.listdir("Data/Task_" + str(self.id) + "/" + self.saveName) # 如果目录为空,则删除该目录 if not files: os.rmdir("Data/Task_" + str(self.id) + "/" + self.saveName) - print("Done!") - print("执行完成!") - self.recordLog("Done!") + self.print_and_log("Done!") + self.print_and_log("执行完成!") self.saveData(exit=True) if self.outputFormat == "mysql": self.mysql.close() - def recordLog(self, str=""): - self.log = self.log + str + "\n" + def recordLog(self, *args, **kwargs): + now = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") + print(now + ":", *args, file=self.logs, **kwargs) - # 控制台打印log函数 + # 定义一个自定义的 print 函数,它将内容同时打印到屏幕和文件中 + def print_and_log(self, *args, **kwargs): + now = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") + # 将内容打印到屏幕 + print(*args, **kwargs) - def Log(self, text, text2=""): - switch = False - if switch: - print(text, text2) - - # @atexit.register - # def clean(self): - # self.saveData(exit=True) - # self.browser.quit() - # sys.exit(0) + # 将内容写入文件 + print(now + ":", *args, file=self.logs, **kwargs) def saveData(self, exit=False): # 每save_threshold条保存一次 if exit == True or len(self.OUTPUT) >= self.save_threshold: # 写入日志 - with open("Data/Task_" + str(self.id) + "/" + self.saveName + '_log.txt', 'a', encoding='utf-8-sig') as file_obj: - file_obj.write(self.log) + # self.recordLog("持久化存储数据/Persistently store data") + if self.log: + with open("Data/Task_" + str(self.id) + "/" + self.saveName + '.log', 'a', encoding='utf-8-sig') as file_obj: + file_obj.write(self.logs.getvalue()) + file_obj.close() + # 写入已执行步数 + with open("Data/Task_" + str(self.id) + "/" + self.saveName + '_steps.txt', 'w', encoding='utf-8-sig') as file_obj: + file_obj.write(str(self.totalSteps + 1)) file_obj.close() # 写入数据 if self.outputFormat == "csv" or self.outputFormat == "txt": file_name = "Data/Task_" + \ - str(self.id) + "/" + self.saveName + '.' + self.outputFormat - write_to_csv(file_name, self.OUTPUT, self.outputParametersRecord) + str(self.id) + "/" + self.saveName + \ + '.' + self.outputFormat + write_to_csv(file_name, self.OUTPUT, + self.outputParametersRecord) elif self.outputFormat == "xlsx": file_name = "Data/Task_" + \ str(self.id) + "/" + self.saveName + '.xlsx' - write_to_excel(file_name, self.OUTPUT, self.outputParametersTypes, self.outputParametersRecord) + write_to_excel( + file_name, self.OUTPUT, self.outputParametersTypes, self.outputParametersRecord) + elif self.outputFormat == "json": + file_name = "Data/Task_" + \ + str(self.id) + "/" + self.saveName + '.json' + write_to_json(file_name, self.OUTPUT, self.outputParametersTypes, self.outputParametersRecord, self.outputParameters.keys()) elif self.outputFormat == "mysql": - self.mysql.write_to_mysql(self.OUTPUT, self.outputParametersRecord, self.outputParametersTypes) - + self.mysql.write_to_mysql( + self.OUTPUT, self.outputParametersRecord, self.outputParametersTypes) + self.OUTPUT = [] - self.log = "" + self.logs.truncate(0) # 清空日志 + self.logs.seek(0) # 清空日志 def scrollDown(self, para, rt=""): try: @@ -264,11 +416,14 @@ class BrowserThread(Thread): except: pass scrollType = int(para["scrollType"]) + try: + para["scrollCount"] = int(para["scrollCount"]) + except: + para["scrollCount"] = 1 try: if scrollType != 0 and para["scrollCount"] > 0: # 控制屏幕向下滚动 if scrollType == 1 or scrollType == 2: for i in range(para["scrollCount"]): - self.Log("Wait for set second after screen scrolling") body = self.browser.find_element( By.CSS_SELECTOR, "body", iframe=para["iframe"]) if scrollType == 1: @@ -279,37 +434,53 @@ class BrowserThread(Thread): time.sleep(para["scrollWaitTime"]) # 下拉完等待 except: pass + self.print_and_log("向下滚动,第", i + 1, "次。") + self.print_and_log( + "Scroll down, the", i + 1, "time.") elif scrollType == 3: bodyText = "" i = 0 while True: - newBodyText = self.browser.page_source + newBodyText = self.browser.find_element( + By.CSS_SELECTOR, "body", iframe=False).text + if para["iframe"]: # 如果标记了iframe + iframes = self.browser.find_elements( + By.CSS_SELECTOR, "iframe", iframe=False) + for iframe in iframes: + self.browser.switch_to.default_content() + self.browser.switch_to.frame(iframe) + iframe_text = super(self.browser.__class__, self.browser).find_element( + By.CSS_SELECTOR, "body").text # 用super调用父类的方法 + newBodyText += iframe_text + self.browser.switch_to.default_content() if newBodyText == bodyText: - print("页面已检测不到新内容,停止滚动。") - print("No new content detected on the page, stop scrolling.") + self.print_and_log("页面已检测不到新内容,停止滚动。") + self.print_and_log( + "No new content detected on the page, stop scrolling.") break else: bodyText = newBodyText body = self.browser.find_element( By.CSS_SELECTOR, "body", iframe=para["iframe"]) body.send_keys(Keys.END) - print("滚动到底部,第", i + 1, "次。") - print("Scroll to the bottom, the", i + 1, "time.") + self.print_and_log("滚动到底部,第", i + 1, "次。") + self.print_and_log( + "Scroll to the bottom, the", i + 1, "time.") i = i + 1 try: time.sleep(para["scrollWaitTime"]) # 下拉完等待 except: pass except: - self.Log('Time out after set seconds when scrolling. ') - self.recordLog('Time out after set seconds when scrolling') + self.print_and_log('Time out after set seconds when scrolling. ') try: self.browser.execute_script('window.stop()') except: pass if scrollType != 0 and para["scrollCount"] > 0: # 控制屏幕向下滚动 for i in range(para["scrollCount"]): - self.Log("Wait for set second after screen scrolling") + self.print_and_log( + "Wait for set second after screen scrolling") body = self.browser.find_element( By.CSS_SELECTOR, "body", iframe=para["iframe"]) if scrollType == 1: @@ -329,15 +500,9 @@ class BrowserThread(Thread): return "" if max_wait_time == 0: max_wait_time = 999999 - # print(codeMode, code) + # self.print_and_log(codeMode, code) # 将value中的Field[""]替换为outputParameters中的键值 - pattern = r'Field\["([^"]+)"\]' - try: - replaced_text = re.sub( - pattern, lambda match: self.outputParameters.get(match.group(1), ''), code) - except: - replaced_text = code - code = replaced_text + code = replace_field_values(code, self.outputParameters) if iframe and self.browser.iframe_env == False: # 获取所有的 iframe self.browser.switch_to.default_content() @@ -352,7 +517,7 @@ class BrowserThread(Thread): self.browser.iframe_env = True break except: - print("Iframe switch failed") + self.print_and_log("Iframe switch failed") elif not iframe and self.browser.iframe_env == True: self.browser.switch_to.default_content() self.browser.iframe_env = False @@ -374,6 +539,25 @@ class BrowserThread(Thread): except: output = "" self.recordLog("JavaScript execution failed") + elif int(codeMode) == 5: + try: + output = exec(code) + self.recordLog("执行下面的代码:" + code) + self.recordLog("Execute the following code:" + code) + except Exception as e: + self.print_and_log("执行下面的代码时出错:" + code, ",错误为:", e) + self.print_and_log("Error executing the following code:" + + code, ", error is:", e) + elif int(codeMode) == 6: + try: + output = eval(code) + self.recordLog("获得下面的代码返回值:" + code) + self.recordLog( + "Get the return value of the following code:" + code) + except Exception as e: + self.print_and_log("获得下面的代码返回值时出错:" + code, ",错误为:", e) + self.print_and_log( + "Error executing and getting return value the following code:" + code, ", error is:", e) elif int(codeMode) == 1: self.recordLog("Execute System Call:" + code) self.recordLog("执行系统命令:" + code) @@ -384,25 +568,34 @@ class BrowserThread(Thread): code, capture_output=True, text=True, timeout=max_wait_time, shell=True) # 输出命令返回值 output = output.stdout - print(output) + self.print_and_log(output) except subprocess.TimeoutExpired: # 命令执行时间超过指定值,抛出异常 self.recordLog("Command timed out") self.recordLog("命令执行超时") except Exception as e: - print(e) # 打印异常信息 + self.print_and_log(e) # 打印异常信息 self.recordLog("Command execution failed") self.recordLog("命令执行失败") - return str(output) + try: + output = str(output) + except: + output = "无法转换为字符串|Unable to convert to string" + self.print_and_log("无法转换为字符串|Unable to convert to string", output) + return output def customOperation(self, node, loopValue, loopPath, index): paras = node["parameters"] + if paras["clear"] == 1: + self.clearOutputParameters() codeMode = int(paras["codeMode"]) code = paras["code"] output = "" max_wait_time = int(paras["waitTime"]) if codeMode == 2: # 使用循环的情况下,传入的clickPath就是实际的xpath try: + loopPath = replace_field_values( + loopPath, self.outputParameters) elements = self.browser.find_elements( By.XPATH, loopPath, iframe=paras["iframe"]) element = elements[index] @@ -410,27 +603,45 @@ class BrowserThread(Thread): codeMode, code, max_wait_time, element, iframe=paras["iframe"]) except: output = "" - print("JavaScript execution failed") + self.print_and_log("JavaScript execution failed") elif codeMode == 3: self.BREAK = True - else: # 0 1 + self.recordLog("跳出循环|Break the loop") + elif codeMode == 4: + self.CONTINUE = True + self.recordLog("跳过本次循环|Skip this loop") + else: # 0 1 5 6 output = self.execute_code( codeMode, code, max_wait_time, iframe=paras["iframe"]) recordASField = bool(paras["recordASField"]) - if recordASField: - print("操作<" + node["title"] + ">的返回值为:" + output) - print("The return value of operation <" + node["title"] + "> is: " + output) + # if recordASField: + # self.print_and_log("操作<" + node["title"] + ">的返回值为:" + output) + # self.print_and_log("The return value of operation <" + node["title"] + "> is: " + output) self.outputParameters[node["title"]] = output if recordASField: - line = new_line(self.outputParameters, self.maxViewLength, self.outputParametersRecord) + line = new_line(self.outputParameters, + self.maxViewLength, self.outputParametersRecord) self.OUTPUT.append(line) def switchSelect(self, para, loopValue): - optionMode = int(para["optionMode"]) + optionMode = para["optionMode"] optionValue = para["optionValue"] + if para["useLoop"]: + index = para["index"] + if index != 0: + try: + optionValue = loopValue.split("~")[index - 1] + except: + self.print_and_log("取值失败,可能是因为取值索引超出范围,将使用整个文本值") + self.print_and_log( + "Failed to get value, maybe because the index is out of range, will use the entire text value") + else: + optionValue = loopValue + optionMode = 1 try: + xpath = replace_field_values(para["xpath"], self.outputParameters) dropdown = Select(self.browser.find_element( - By.XPATH, para["xpath"], iframe=para["iframe"])) + By.XPATH, xpath, iframe=para["iframe"])) try: if optionMode == 0: # 获取当前选中的选项索引 @@ -446,62 +657,103 @@ class BrowserThread(Thread): dropdown.select_by_value(optionValue) elif optionMode == 3: dropdown.select_by_visible_text(optionValue) + # self.recordLog("切换到下拉框选项|Change to drop-down box option:", xpath) except: - print("切换下拉框选项失败:", para["xpath"], - para["optionMode"], para["optionValue"]) - print("Failed to change drop-down box option:", - para["xpath"], para["optionMode"], para["optionValue"]) + self.print_and_log("切换下拉框选项失败:", xpath, + para["optionMode"], para["optionValue"]) + self.print_and_log("Failed to change drop-down box option:", + xpath, para["optionMode"], para["optionValue"]) except: - print("找不到下拉框元素:", para["xpath"]) - print("Cannot find drop-down box element:", para["xpath"]) + self.print_and_log("找不到下拉框元素:", xpath) + self.print_and_log("Cannot find drop-down box element:", xpath) def moveToElement(self, para, loopElement=None, loopPath="", index=0): time.sleep(0.1) # 移动之前等待0.1秒 + loopPath = replace_field_values(loopPath, self.outputParameters) + xpath = replace_field_values(para["xpath"], self.outputParameters) if para["useLoop"]: # 使用循环的情况下,传入的clickPath就是实际的xpath - path = loopPath + if xpath == "": + path = loopPath + else: + path = "(" + loopPath + ")" + \ + "[" + str(index + 1) + "]" + \ + xpath + index = 0 # 如果是相对循环内元素的点击,在定位到元素后,index应该重置为0 # element = loopElement else: index = 0 - path = para["xpath"] # 不然使用元素定义的xpath - # element = self.browser.find_element( - # By.XPATH, path, iframe=para["iframe"]) + path = xpath # 不然使用元素定义的xpath + path = replace_field_values(path, self.outputParameters) try: elements = self.browser.find_elements( By.XPATH, path, iframe=para["iframe"]) element = elements[index] try: ActionChains(self.browser).move_to_element(element).perform() + # self.recordLog("移动到元素|Move to element:", path) except: - print("移动鼠标到元素失败:", para["xpath"]) - print("Failed to move mouse to element:", para["xpath"]) + self.print_and_log("移动鼠标到元素失败:", xpath) + self.print_and_log("Failed to move mouse to element:", xpath) except: - print("找不到元素:", para["xpath"]) - print("Cannot find element:", para["xpath"]) + self.print_and_log("找不到元素:", xpath) + self.print_and_log("Cannot find element:", xpath) # 执行节点关键函数部分 def executeNode(self, nodeId, loopValue="", loopPath="", index=0): node = self.procedure[nodeId] - WebDriverWait(self.browser, 10).until - # 等待元素出现才进行操作,10秒内未出现则报错 - (EC.visibility_of_element_located( - (By.XPATH, node["parameters"]["xpath"]))) - + # WebDriverWait(self.browser, 10).until + # # 等待元素出现才进行操作,10秒内未出现则报错 + # (EC.visibility_of_element_located( + # (By.XPATH, node["parameters"]["xpath"]))) + try: + if node["parameters"]["waitElement"] != "": + waitElement = replace_field_values( + node["parameters"]["waitElement"], self.outputParameters) + waitElementTime = float(node["parameters"]["waitElementTime"]) + waitElementIframeIndex = node["parameters"]["waitElementInIframe"] + self.print_and_log("等待元素出现:", waitElement) + self.print_and_log( + "Waiting for element to appear:", waitElement) + if waitElementIframeIndex > 0: + iframes = self.browser.find_elements( + By.CSS_SELECTOR, "iframe", iframe=False) + iframe = iframes[waitElementIframeIndex - 1] + self.browser.switch_to.frame(iframe) + WebDriverWait(self.browser, waitElementTime).until( + EC.presence_of_element_located((By.XPATH, waitElement)) + ) + if waitElementIframeIndex > 0: + self.browser.switch_to.default_content() + except Exception as e: + if waitElement != "": + self.print_and_log("等待元素出现超时:", waitElement, ",将继续执行。") + self.print_and_log("Timeout waiting for element to appear:", + waitElement, ", will continue to execute.") + self.print_and_log(e) + self.recordLog("Wait element not found") + self.recordLog("执行节点|Execute node:", node["title"]) # 根据不同选项执行不同操作 if node["option"] == 0 or node["option"] == 10: # root操作,条件分支操作 for i in node["sequence"]: # 从根节点开始向下读取 self.executeNode(i, loopValue, loopPath, index) elif node["option"] == 1: # 打开网页操作 - self.recordLog("openPage") - self.openPage(node["parameters"], loopValue) + if not (nodeId == 1 and self.service["cloudflare"] == 1): + self.openPage(node["parameters"], loopValue) elif node["option"] == 2: # 点击元素 - self.recordLog("Click") self.clickElement(node["parameters"], loopValue, loopPath, index) elif node["option"] == 3: # 提取数据 - self.recordLog("getData") - self.getData(node["parameters"], loopValue, node["isInLoop"], - parentPath=loopPath, index=index) - self.saveData() + # 针对提取数据操作,设置操作开始的步骤,用于不小心关闭后的恢复的增量采集 + if self.totalSteps >= self.startSteps: + self.getData(node["parameters"], loopValue, node["isInLoop"], + parentPath=loopPath, index=index) + self.saveData() + else: + # self.getDataStep += 1 + self.print_and_log("跳过第" + str(self.totalSteps) + "次提取数据。") + self.print_and_log( + "Skip the " + str(self.totalSteps) + "th data extraction.") + self.totalSteps += 1 # 总步数加一 elif node["option"] == 4: # 输入文字 self.inputInfo(node["parameters"], loopValue) elif node["option"] == 5: # 自定义操作 @@ -512,10 +764,8 @@ class BrowserThread(Thread): elif node["option"] == 7: # 鼠标移动到元素上 self.moveToElement(node["parameters"], loopValue, loopPath, index) elif node["option"] == 8: # 循环 - self.recordLog("loop") self.loopExecute(node, loopValue, loopPath, index) # 执行循环 elif node["option"] == 9: # 条件分支 - self.recordLog("judge") self.judgeExecute(node, loopValue, loopPath, index) # 执行完之后进行等待 @@ -531,7 +781,6 @@ class BrowserThread(Thread): time.sleep(waitTime) elif waitType == 1: # 随机等待时间 time.sleep(random.uniform(waitTime * 0.5, waitTime * 1.5)) - self.Log("Wait seconds after node executing: ", waitTime) self.event.wait() # 等待事件结束 # 对判断条件的处理 @@ -548,33 +797,41 @@ class BrowserThread(Thread): try: bodyText = self.browser.find_element( By.CSS_SELECTOR, "body", iframe=cnode["parameters"]["iframe"]).text - if bodyText.find(cnode["parameters"]["value"]) >= 0: + value = replace_field_values( + cnode["parameters"]["value"], self.outputParameters) + if bodyText.find(value) >= 0: executeBranchId = i break except: # 找不到元素下一个条件 continue elif tType == 2: # 当前页面包含元素 try: - if self.browser.find_element(By.XPATH, cnode["parameters"]["value"], iframe=cnode["parameters"]["iframe"]): + xpath = replace_field_values( + cnode["parameters"]["value"], self.outputParameters) + if self.browser.find_element(By.XPATH, xpath, iframe=cnode["parameters"]["iframe"]): executeBranchId = i break except: # 找不到元素或者xpath写错了,下一个条件 continue elif tType == 3: # 当前循环元素包括文本 try: - if loopElement.text.find(cnode["parameters"]["value"]) >= 0: + value = replace_field_values( + cnode["parameters"]["value"], self.outputParameters) + if loopElement.text.find(value) >= 0: executeBranchId = i break except: # 找不到元素或者xpath写错了,下一个条件 continue elif tType == 4: # 当前循环元素包括元素 try: - if loopElement.find_element(By.XPATH, cnode["parameters"]["value"][1:]): + xpath = replace_field_values( + cnode["parameters"]["value"][1:], self.outputParameters) + if loopElement.find_element(By.XPATH, xpath): executeBranchId = i break except: # 找不到元素或者xpath写错了,下一个条件 continue - elif tType <= 7: # JS命令返回值 + elif tType <= 8: # JS命令返回值 if tType == 5: # JS命令返回值等于 output = self.execute_code( 0, cnode["parameters"]["code"], cnode["parameters"]["waitTime"], iframe=cnode["parameters"]["iframe"]) @@ -584,6 +841,9 @@ class BrowserThread(Thread): elif tType == 7: # 针对当前循环项的JS命令返回值 output = self.execute_code( 2, cnode["parameters"]["code"], cnode["parameters"]["waitTime"], loopElement, iframe=cnode["parameters"]["iframe"]) + elif tType == 8: # 针对当前循环项的System命令返回值 + output = self.execute_code( + 6, cnode["parameters"]["code"], cnode["parameters"]["waitTime"], loopElement, iframe=cnode["parameters"]["iframe"]) try: if output.find("rue") != -1: # 如果返回值中包含true code = 1 @@ -597,12 +857,13 @@ class BrowserThread(Thread): # rt.end() if executeBranchId != 0: self.executeNode(executeBranchId, loopElement, clickPath, index) + else: + self.recordLog( + "判断条件内所有条件分支的条件都不满足|None of the conditions in the judgment condition are met") # 对循环的处理 def loopExecute(self, node, loopValue, clickPath="", index=0): time.sleep(0.1) # 第一次执行循环的时候强制等待1秒 - # self.Log("循环执行前等待0.1秒") - self.Log("Wait 0.1 second before loop") thisHandle = self.browser.current_window_handle # 记录本次循环内的标签页的ID thisHistoryLength = self.browser.execute_script( 'return history.length') # 记录本次循环内的history的length @@ -615,57 +876,73 @@ class BrowserThread(Thread): while True: # do while循环 try: finished = False - newBodyText = self.browser.page_source - if newBodyText == bodyText: # 如果页面内容无变化 - print("页面已检测不到新内容,停止循环。") - print("No new content detected on the page, stop loop.") - finished = True - break - else: - bodyText = newBodyText + # newBodyText = self.browser.page_source + # newBodyText = self.browser.find_element(By.XPATH, "//body").text + if node["parameters"]["exitCount"] == 0: + newBodyText = self.browser.find_element( + By.CSS_SELECTOR, "body", iframe=False).text + if node["parameters"]["iframe"]: # 如果标记了iframe + iframes = self.browser.find_elements( + By.CSS_SELECTOR, "iframe", iframe=False) + for iframe in iframes: + self.browser.switch_to.default_content() + self.browser.switch_to.frame(iframe) + iframe_text = super(self.browser.__class__, self.browser).find_element( + By.CSS_SELECTOR, "body").text # 用super调用父类的方法 + newBodyText += iframe_text + self.browser.switch_to.default_content() + + if newBodyText == bodyText: # 如果页面内容无变化 + self.print_and_log("页面已检测不到新内容,停止循环。") + self.print_and_log( + "No new content detected on the page, stop loop.") + finished = True + break + else: + self.print_and_log("检测到页面变化,继续循环。") + self.print_and_log( + "Page changed detected, continue loop.") + bodyText = newBodyText + xpath = replace_field_values( + node["parameters"]["xpath"], self.outputParameters) + # self.recordLog("循环元素|Loop element:", xpath) element = self.browser.find_element( - By.XPATH, node["parameters"]["xpath"], iframe=node["parameters"]["iframe"]) + By.XPATH, xpath, iframe=node["parameters"]["iframe"]) for i in node["sequence"]: # 挨个执行操作 self.executeNode( - i, element, node["parameters"]["xpath"], 0) - if self.BREAK: # 如果有break操作,下面的操作不执行 + i, element, xpath, 0) + if self.BREAK or self.CONTINUE: # 如果有break操作,下面的操作不执行 + self.CONTINUE = False break - if self.BREAK: # 如果有break操作,退出循环 + if self.BREAK: # 如果有break操作,退出循环 self.BREAK = False finished = True break finished = True - self.Log("Click: ", node["parameters"]["xpath"]) - self.recordLog("Click:" + node["parameters"]["xpath"]) except NoSuchElementException: # except: - print("Single loop element not found: ", - node["parameters"]["xpath"]) - print("找不到要循环的单个元素: ", node["parameters"]["xpath"]) - self.recordLog( - "Single loop element not found: " + node["parameters"]["xpath"]) + self.print_and_log("Single loop element not found: ", + xpath) + self.print_and_log("找不到要循环的单个元素: ", xpath) for i in node["sequence"]: # 不带点击元素的把剩余的如提取数据的操作执行一遍 if node["option"] != 2: self.executeNode( - i, None, node["parameters"]["xpath"], 0) + i, None, xpath, 0) finished = True break # 如果找不到元素,退出循环 finally: if not finished: - print("\n\n-------Retrying-------\n\n") - self.Log("-------Retrying-------: ", - node["parameters"]["xpath"]) - self.recordLog("ClickNotFound:" + - node["parameters"]["xpath"]) + self.print_and_log("\n\n-------Retrying-------\n\n") + self.print_and_log("-------Retrying-------: ", + node["parameters"]["xpath"]) for i in node["sequence"]: # 不带点击元素的把剩余的如提取数据的操作执行一遍 if node["option"] != 2: self.executeNode( - i, None, node["parameters"]["xpath"], 0) + i, None, xpath, 0) break # 如果找不到元素,退出循环 count = count + 1 - self.Log("Page: ", count) - self.recordLog("Page:" + str(count)) - # print(node["parameters"]["exitCount"], "-------") + self.print_and_log("Page: ", count) + # self.print_and_log(node["parameters"]["exitCount"], "-------") if node["parameters"]["exitCount"] == count: # 如果达到设置的退出循环条件的话 break if int(node["parameters"]["breakMode"]) > 0: # 如果设置了退出循环的脚本条件 @@ -676,30 +953,43 @@ class BrowserThread(Thread): break elif int(node["parameters"]["loopType"]) == 1: # 不固定元素列表 try: + xpath = replace_field_values( + node["parameters"]["xpath"], self.outputParameters) elements = self.browser.find_elements(By.XPATH, - node["parameters"]["xpath"], iframe=node["parameters"]["iframe"]) + xpath, iframe=node["parameters"]["iframe"]) + # self.recordLog("循环元素|Loop element:", xpath) if len(elements) == 0: - print("Loop element not found: ", - node["parameters"]["xpath"]) - print("找不到循环元素: ", node["parameters"]["xpath"]) - self.recordLog("pathNotFound: " + - node["parameters"]["xpath"]) + self.print_and_log("Loop element not found: ", + xpath) + self.print_and_log("找不到循环元素: ", xpath) for index in range(len(elements)): for i in node["sequence"]: # 挨个顺序执行循环里所有的操作 self.executeNode(i, elements[index], - node["parameters"]["xpath"], index) - if self.BREAK: + xpath, index) + if self.BREAK or self.CONTINUE: # 如果有break操作,下面的操作不执行 + self.CONTINUE = False break if self.BREAK: self.BREAK = False break - if self.browser.current_window_handle != thisHandle: # 如果执行完一次循环之后标签页的位置发生了变化 - while True: # 一直关闭窗口直到当前标签页 - self.browser.close() # 关闭使用完的标签页 - self.browser.switch_to.window( - self.browser.window_handles[-1]) - if self.browser.current_window_handle == thisHandle: - break + try: + changed_handle = self.browser.current_window_handle != thisHandle + except: # 如果网页被意外关闭了的情况下 + self.browser.switch_to.window( + self.browser.window_handles[-1]) + changed_handle = self.browser.window_handles[-1] != thisHandle + if changed_handle: # 如果执行完一次循环之后标签页的位置发生了变化 + try: + while True: # 一直关闭窗口直到当前标签页 + self.browser.close() # 关闭使用完的标签页 + self.browser.switch_to.window( + self.browser.window_handles[-1]) + if self.browser.current_window_handle == thisHandle: + break + except Exception as e: + self.print_and_log("关闭标签页发生错误:", e) + self.print_and_log( + "Error occurred while closing tab: ", e) if self.history["index"] != thisHistoryLength and self.history[ "handle"] == self.browser.current_window_handle: # 如果执行完一次循环之后历史记录发生了变化,注意当前页面的判断 difference = thisHistoryLength - \ @@ -711,8 +1001,8 @@ class BrowserThread(Thread): # else: # time.sleep(2) # 切换历史记录等待: - self.Log("Change history back time or:", - node["parameters"]["historyWait"]) + self.recordLog("Change history back time or: ", + node["parameters"]["historyWait"]) try: self.browser.execute_script('window.stop()') except: @@ -724,31 +1014,44 @@ class BrowserThread(Thread): if code <= 0: break except NoSuchElementException: - print("Loop element not found: ", node["parameters"]["xpath"]) - print("找不到循环元素: ", node["parameters"]["xpath"]) - self.recordLog("pathNotFound: " + node["parameters"]["xpath"]) + self.print_and_log("Loop element not found: ", xpath) + self.print_and_log("找不到循环元素: ", xpath) except Exception as e: raise elif int(node["parameters"]["loopType"]) == 2: # 固定元素列表 # 千万不要忘了分割!! for path in node["parameters"]["pathList"].split("\n"): try: + path = replace_field_values(path, self.outputParameters) element = self.browser.find_element( By.XPATH, path, iframe=node["parameters"]["iframe"]) + # self.recordLog("循环元素|Loop element:", path) for i in node["sequence"]: # 挨个执行操作 self.executeNode(i, element, path, 0) - if self.BREAK: + if self.BREAK or self.CONTINUE: # 如果有break操作,下面的操作不执行 + self.CONTINUE = False break if self.BREAK: self.BREAK = False break - if self.browser.current_window_handle != thisHandle: # 如果执行完一次循环之后标签页的位置发生了变化 - while True: # 一直关闭窗口直到当前标签页 - self.browser.close() # 关闭使用完的标签页 - self.browser.switch_to.window( - self.browser.window_handles[-1]) - if self.browser.current_window_handle == thisHandle: - break + try: + changed_handle = self.browser.current_window_handle != thisHandle + except: # 如果网页被意外关闭了的情况下 + self.browser.switch_to.window( + self.browser.window_handles[-1]) + changed_handle = self.browser.window_handles[-1] != thisHandle + if changed_handle: # 如果执行完一次循环之后标签页的位置发生了变化 + try: + while True: # 一直关闭窗口直到当前标签页 + self.browser.close() # 关闭使用完的标签页 + self.browser.switch_to.window( + self.browser.window_handles[-1]) + if self.browser.current_window_handle == thisHandle: + break + except Exception as e: + self.print_and_log("关闭标签页发生错误:", e) + self.print_and_log( + "Error occurred while closing tab: ", e) if self.history["index"] != thisHistoryLength and self.history[ "handle"] == self.browser.current_window_handle: # 如果执行完一次循环之后历史记录发生了变化,注意当前页面的判断 difference = thisHistoryLength - \ @@ -759,16 +1062,15 @@ class BrowserThread(Thread): time.sleep(node["parameters"]["historyWait"]) # else: # time.sleep(2) - self.Log("Change history back time or:", - node["parameters"]["historyWait"]) + self.recordLog("Change history back time or: ", + node["parameters"]["historyWait"]) try: self.browser.execute_script('window.stop()') except: pass except NoSuchElementException: - print("Loop element not found: ", path) - print("找不到循环元素: ", path) - self.recordLog("pathNotFound: " + path) + self.print_and_log("Loop element not found: ", path) + self.print_and_log("找不到循环元素: ", path) continue # 循环中找不到元素就略过操作 except Exception as e: raise @@ -780,11 +1082,16 @@ class BrowserThread(Thread): break elif int(node["parameters"]["loopType"]) == 3: # 固定文本列表 textList = node["parameters"]["textList"].split("\n") + if len(textList) == 1: # 如果固定文本列表只有一行,现在就可以替换变量 + textList = replace_field_values( + node["parameters"]["textList"], self.outputParameters).split("\n") for text in textList: - self.recordLog("input: " + text) + text = replace_field_values(text, self.outputParameters) + # self.recordLog("当前循环文本|Current loop text:", text) for i in node["sequence"]: # 挨个执行操作 self.executeNode(i, text, "", 0) - if self.BREAK: + if self.BREAK or self.CONTINUE: # 如果有break操作,下面的操作不执行 + self.CONTINUE = False break if self.BREAK: self.BREAK = False @@ -798,16 +1105,21 @@ class BrowserThread(Thread): elif int(node["parameters"]["loopType"]) == 4: # 固定网址列表 # tempList = node["parameters"]["textList"].split("\r\n") urlList = list( - filter(isnull, node["parameters"]["textList"].split("\n"))) # 去空行 + filter(isnotnull, node["parameters"]["textList"].split("\n"))) # 去空行 + if len(urlList) == 1: # 如果固定网址列表只有一行,现在就可以替换变量 + urlList = replace_field_values( + node["parameters"]["textList"], self.outputParameters).split("\n") # urlList = [] # for url in tempList: # if url != "": # urlList.append(url) for url in urlList: - self.recordLog("input: " + url) + url = replace_field_values(url, self.outputParameters) + # self.recordLog("当前循环网址|Current loop url:", url) for i in node["sequence"]: self.executeNode(i, url, "", 0) - if self.BREAK: + if self.BREAK or self.CONTINUE: # 如果有break操作,下面的操作不执行 + self.CONTINUE = False break if self.BREAK: self.BREAK = False @@ -818,7 +1130,7 @@ class BrowserThread(Thread): code = get_output_code(output) if code <= 0: break - elif int(node["parameters"]["loopType"]) <= 6: # 命令返回值 + elif int(node["parameters"]["loopType"]) <= 7: # 命令返回值 while True: # do while循环 if int(node["parameters"]["loopType"]) == 5: # JS output = self.execute_code( @@ -826,12 +1138,16 @@ class BrowserThread(Thread): elif int(node["parameters"]["loopType"]) == 6: # System output = self.execute_code( 1, node["parameters"]["code"], node["parameters"]["waitTime"], iframe=node["parameters"]["iframe"]) + elif int(node["parameters"]["loopType"]) == 7: # Python + output = self.execute_code( + 6, node["parameters"]["code"], node["parameters"]["waitTime"], iframe=node["parameters"]["iframe"]) code = get_output_code(output) if code <= 0: break for i in node["sequence"]: # 挨个执行操作 self.executeNode(i, code, node["parameters"]["xpath"], 0) - if self.BREAK: + if self.BREAK or self.CONTINUE: # 如果有break操作,下面的操作不执行 + self.CONTINUE = False break if self.BREAK: self.BREAK = False @@ -846,7 +1162,10 @@ class BrowserThread(Thread): if len(self.browser.window_handles) > 1: self.browser.switch_to.window( self.browser.window_handles[-1]) # 打开网页操作从第1个页面开始 - self.browser.close() + try: + self.browser.close() + except: + pass self.browser.switch_to.window( self.browser.window_handles[0]) # 打开网页操作从第1个页面开始 self.history["handle"] = self.browser.current_window_handle @@ -857,16 +1176,10 @@ class BrowserThread(Thread): # clear output parameters for key in self.outputParameters: self.outputParameters[key] = "" - else: - url = list(filter(isnull, para["links"].split("\n")))[0] + else: # 在流程图其他位置设置了打开网页的操作,读取的应该是第一个网址,如打开网页后登录,再打开第二个网页 + url = list(filter(isnotnull, para["links"].split("\n")))[0] # 将value中的Field[""]替换为outputParameters中的键值 - pattern = r'Field\["([^"]+)"\]' - try: - replaced_text = re.sub( - pattern, lambda match: self.outputParameters.get(match.group(1), ''), url) - except: - replaced_text = url - url = replaced_text + url = replace_field_values(url, self.outputParameters) try: maxWaitTime = int(para["maxWaitTime"]) except: @@ -883,19 +1196,16 @@ class BrowserThread(Thread): cookie_dict = {'name': name, 'value': value} # 加载 cookie self.browser.add_cookie(cookie_dict) - self.Log('Loading page: ' + url) - self.recordLog('Loading page: ' + url) + self.print_and_log('加载页面|Loading page: ' + url) except TimeoutException: - self.Log('Time out after set seconds when loading page: ' + url) - self.recordLog( + self.print_and_log( 'Time out after set seconds when loading page: ' + url) try: self.browser.execute_script('window.stop()') except: pass except Exception as e: - print("Failed to load page: " + url) - self.recordLog('Failed to load page: ' + url) + self.print_and_log("Failed to load page: " + url) try: self.history["index"] = self.browser.execute_script( "return history.length") @@ -911,10 +1221,10 @@ class BrowserThread(Thread): # 键盘输入事件 def inputInfo(self, para, loopValue): time.sleep(0.1) # 输入之前等待0.1秒 - self.Log("Wait 0.1 second before input") try: + xpath = replace_field_values(para["xpath"], self.outputParameters) textbox = self.browser.find_element( - By.XPATH, para["xpath"], iframe=para["iframe"]) + By.XPATH, xpath, iframe=para["iframe"]) # textbox.send_keys(Keys.CONTROL, 'a') # textbox.send_keys(Keys.BACKSPACE) self.execute_code( @@ -939,20 +1249,27 @@ class BrowserThread(Thread): '', '', replaced_text, flags=re.IGNORECASE) except: replaced_text = value + index = para["index"] + if index != 0: + try: + replaced_text = replaced_text.split("~")[index - 1] + except: + self.print_and_log("取值失败,可能是因为取值索引超出范围,将使用整个文本值") + self.print_and_log( + "Failed to get value, maybe because the index is out of range, will use the entire text value") textbox.send_keys(replaced_text) if value.lower().find("") >= 0: textbox.send_keys(Keys.ENTER) + self.recordLog("输入文字|Input text: " + + replaced_text + " to " + xpath) self.execute_code( 2, para["afterJS"], para["afterJSWaitTime"], textbox, iframe=para["iframe"]) # 执行后置js except: - print("Cannot find input box element:" + - para["xpath"] + ", please try to set the wait time before executing this operation") - print("找不到输入框元素:" + para["xpath"] + ",请尝试在执行此操作前设置等待时间") - self.recordLog("Cannot find input box element:" + - para["xpath"] + "Please try to set the wait time before executing this operation") + self.print_and_log("Cannot find input box element:" + + xpath + ", please try to set the wait time before executing this operation") + self.print_and_log("找不到输入框元素:" + xpath + ",请尝试在执行此操作前设置等待时间") # 点击元素事件 - def clickElement(self, para, loopElement=None, clickPath="", index=0): try: maxWaitTime = int(para["maxWaitTime"]) @@ -964,12 +1281,20 @@ class BrowserThread(Thread): try: # element = self.browser.find_element( # By.XPATH, path, iframe=para["iframe"]) + clickPath = replace_field_values(clickPath, self.outputParameters) + xpath = replace_field_values(para["xpath"], self.outputParameters) if para["useLoop"]: # 使用循环的情况下,传入的clickPath就是实际的xpath - path = clickPath + if xpath == "": + path = clickPath + else: + path = "(" + clickPath + ")" + \ + "[" + str(index + 1) + "]" + \ + xpath + index = 0 # 如果是相对循环内元素的点击,在定位到元素后,index应该重置为0 # element = loopElement else: index = 0 - path = para["xpath"] # 不然使用元素定义的xpath + path = xpath # 不然使用元素定义的xpath # element = self.browser.find_element( # By.XPATH, path, iframe=para["iframe"]) elements = self.browser.find_elements( @@ -979,11 +1304,9 @@ class BrowserThread(Thread): self.execute_code(2, para["beforeJS"], para["beforeJSWaitTime"], element, iframe=para["iframe"]) except: - print("Cannot find element:" + - path + ", please try to set the wait time before executing this operation") - print("找不到要点击的元素:" + path + ",请尝试在执行此操作前设置等待时间") - self.recordLog("Cannot find element:" + - path + ", please try to set the wait time before executing this operation") + self.print_and_log("Cannot find element:" + + path + ", please try to set the wait time before executing this operation") + self.print_and_log("找不到要点击的元素:" + path + ",请尝试在执行此操作前设置等待时间") tempHandleNum = len(self.browser.window_handles) # 记录之前的窗口位置 try: click_way = int(para["clickWay"]) @@ -997,17 +1320,20 @@ class BrowserThread(Thread): script = 'var result = document.evaluate(`' + path + \ '`, document, null, XPathResult.ANY_TYPE, null);for(let i=0;i= 0 or p["relativeXPath"].find("/text()") >= 0 or p["relativeXPath"].find("::text()") >= 0: + if relativeXPath.find("/@href") >= 0 or relativeXPath.find("/text()") >= 0 or relativeXPath.find("::text()") >= 0: content_type = "" elif p["nodeType"] == 2: - content_type = "/@href" + content_type = "//@href" elif p["contentType"] == 1: content_type = "/text()" elif p["contentType"] == 0: content_type = "//text()" - xpath = p["relativeXPath"] + content_type + xpath = relativeXPath + content_type if p["relative"]: - # if p["relativeXPath"] == "": + # if relativeXPath == "": # content = [loopElementHTML] # else: # 如果字串里有//即子孙查找,则不动语句 - if p["relativeXPath"].find("//") >= 0: - if xpath.startswith("/"): - full_path = "(" + parentPath + ")" + \ - "[" + str(index + 1) + "]"+ \ - p["relativeXPath"] + content_type - else: # 如果是id()这种形式,不需要包parentPath + if relativeXPath.find("//") >= 0: + if xpath.startswith("/"): + full_path = "(" + parentPath + ")" + \ + "[" + str(index + 1) + "]" + \ + relativeXPath + content_type + else: # 如果是id()这种形式,不需要包parentPath full_path = xpath try: content = pageHTML.xpath(full_path) except: content = [] - elif not p["relativeXPath"].startswith("/"): # 如果是id()这种形式,不需要包/html/body + # 如果是id()这种形式,不需要包/html/body + elif not relativeXPath.startswith("/"): try: content = loopElementHTML.xpath(xpath) except: @@ -1256,7 +1618,8 @@ class BrowserThread(Thread): content = loopElementHTML.xpath( "/html/body/" + loopElementHTML[0][0].tag + xpath) else: - if xpath.find("/body") < 0 and xpath.startswith("/"): # 如果是id()或(//div)[1]这种形式,不需要包/html/body + # 如果是id()或(//div)[1]这种形式,不需要包/html/body + if xpath.find("/body") < 0 and xpath.startswith("/"): xpath = "/html/body" + xpath content = pageHTML.xpath(xpath) if len(content) > 0: @@ -1266,58 +1629,57 @@ class BrowserThread(Thread): for result in content if result.strip()) if p["nodeType"] == 2: base_url = self.browser.current_url - content = urljoin(base_url, content) # 合并链接相对路径为绝对路径 + # 合并链接相对路径为绝对路径 + content = urljoin(base_url, content) else: content = p["default"] if not self.dataNotFoundKeys[p["name"]]: - print('Element %s not found with parameter name %s when extracting data, use default, this error will only show once' % ( - p["relativeXPath"], p["name"])) - print("提取数据操作时,字段名 %s 对应XPath %s 未找到,使用默认值,本字段将不再重复报错" % ( - p["name"], p["relativeXPath"])) + self.print_and_log('Element %s not found with parameter name %s when extracting data, use default, this error will only show once' % ( + relativeXPath, p["name"])) + self.print_and_log("提取数据操作时,字段名 %s 对应XPath %s 未找到,使用默认值,本字段将不再重复报错" % ( + p["name"], relativeXPath)) self.dataNotFoundKeys[p["name"]] = True - self.recordLog( - 'Element %s not found, use default' % p["relativeXPath"]) except Exception as e: if not self.dataNotFoundKeys[p["name"]]: - print('Element %s not found with parameter name %s when extracting data, use default, this error will only show once' % ( - p["relativeXPath"], p["name"])) - print("提取数据操作时,字段名 %s 对应XPath %s 未找到(请查看原因,如是否翻页太快页面元素未加载出来),使用默认值,本字段将不再重复报错" % ( - p["name"], p["relativeXPath"])) + self.print_and_log('Element %s not found with parameter name %s when extracting data, use default, this error will only show once' % ( + relativeXPath, p["name"])) + self.print_and_log("提取数据操作时,字段名 %s 对应XPath %s 未找到(请查看原因,如是否翻页太快页面元素未加载出来),使用默认值,本字段将不再重复报错" % ( + p["name"], relativeXPath)) self.dataNotFoundKeys[p["name"]] = True - self.recordLog( - 'Element %s not found, use default' % p["relativeXPath"]) self.outputParameters[p["name"]] = content # 对于不能优化的操作,使用selenium执行 for p in para["paras"]: if not p["optimizable"]: content = "" + relativeXPath = replace_field_values( + p["relativeXPath"], self.outputParameters) if not (p["contentType"] == 5 or p["contentType"] == 6): # 如果不是页面标题或URL,去找元素 try: - # p["relativeXPath"] = p["relativeXPath"].lower() - # p["relativeXPath"] = lowercase_tags_in_xpath(p["relativeXPath"]) + # relativeXPath = relativeXPath.lower() + # relativeXPath = lowercase_tags_in_xpath(relativeXPath) if p["relative"]: # 是否相对xpath - if p["relativeXPath"] == "": # 相对xpath有时候就是元素本身,不需要二次查找 + if relativeXPath == "": # 相对xpath有时候就是元素本身,不需要二次查找 element = loopElement else: # 如果字串里有//即子孙查找,则不动语句 - if p["relativeXPath"].find("//") >= 0: + if relativeXPath.find("//") >= 0: # full_path = "(" + parentPath + \ - # p["relativeXPath"] + ")" + \ + # relativeXPath + ")" + \ # "[" + str(index + 1) + "]" full_path = "(" + parentPath + ")" + \ "[" + str(index + 1) + "]" + \ - p["relativeXPath"] + relativeXPath element = self.browser.find_element( By.XPATH, full_path, iframe=p["iframe"]) else: element = loopElement.find_element(By.XPATH, - p["relativeXPath"][1:]) + relativeXPath[1:]) else: element = self.browser.find_element( - By.XPATH, p["relativeXPath"], iframe=p["iframe"]) + By.XPATH, relativeXPath, iframe=p["iframe"]) except (NoSuchElementException, InvalidSelectorException, StaleElementReferenceException): # 找不到元素的时候,使用默认值 - # print(p) + # self.print_and_log(p) try: content = p["default"] except Exception as e: @@ -1325,33 +1687,29 @@ class BrowserThread(Thread): self.outputParameters[p["name"]] = content try: if not self.dataNotFoundKeys[p["name"]]: - print('Element %s not found with parameter name %s when extracting data, use default, this error will only show once' % ( - p["relativeXPath"], p["name"])) - print("提取数据操作时,字段名 %s 对应XPath %s 未找到,使用默认值,本字段将不再重复报错" % ( - p["name"], p["relativeXPath"])) - self.dataNotFoundKeys[p["name"]] = True - self.recordLog( - 'Element %s not found, use default' % p["relativeXPath"]) + self.print_and_log('Element %s not found with parameter name %s when extracting data, use default, this error will only show once' % ( + relativeXPath, p["name"])) + self.print_and_log("提取数据操作时,字段名 %s 对应XPath %s 未找到,使用默认值,本字段将不再重复报错" % ( + p["name"], relativeXPath)) except: pass continue except TimeoutException: # 超时的时候设置超时值 - self.Log('Time out after set seconds when getting data') - self.recordLog( + self.print_and_log( 'Time out after set seconds when getting data') try: self.browser.execute_script('window.stop()') except: pass if p["relative"]: # 是否相对xpath - if p["relativeXPath"] == "": # 相对xpath有时候就是元素本身,不需要二次查找 + if relativeXPath == "": # 相对xpath有时候就是元素本身,不需要二次查找 element = loopElement else: element = loopElement.find_element(By.XPATH, - p["relativeXPath"][1:]) + relativeXPath[1:]) else: element = self.browser.find_element( - By.XPATH, p["relativeXPath"], iframe=p["iframe"]) + By.XPATH, relativeXPath, iframe=p["iframe"]) # rt.end() else: element = self.browser.find_element( @@ -1362,40 +1720,44 @@ class BrowserThread(Thread): content = self.get_content(p, element) except StaleElementReferenceException: # 发生找不到元素的异常后,等待几秒重新查找 self.recordLog( - 'StaleElementReferenceException: '+p["relativeXPath"]) + 'StaleElementReferenceException: ' + relativeXPath) time.sleep(3) try: if p["relative"]: # 是否相对xpath - if p["relativeXPath"] == "": # 相对xpath有时候就是元素本身,不需要二次查找 + if relativeXPath == "": # 相对xpath有时候就是元素本身,不需要二次查找 element = loopElement self.recordLog( 'StaleElementReferenceException: loopElement') else: element = loopElement.find_element(By.XPATH, - p["relativeXPath"][1:]) + relativeXPath[1:]) self.recordLog( 'StaleElementReferenceException: loopElement+relativeXPath') else: element = self.browser.find_element( - By.XPATH, p["relativeXPath"], iframe=p["iframe"]) + By.XPATH, relativeXPath, iframe=p["iframe"]) self.recordLog( 'StaleElementReferenceException: relativeXPath') content = self.get_content(p, element) except StaleElementReferenceException: self.recordLog( - 'StaleElementReferenceException: '+p["relativeXPath"]) + 'StaleElementReferenceException: ' + relativeXPath) continue # 再出现类似问题直接跳过 self.outputParameters[p["name"]] = content self.execute_code( 2, p["afterJS"], p["afterJSWaitTime"], element, iframe=p["iframe"]) # 执行后置JS - line = new_line(self.outputParameters, self.maxViewLength, self.outputParametersRecord) - self.OUTPUT.append(line) - # rt.end() + if para["recordASField"] > 0: + line = new_line(self.outputParameters, + self.maxViewLength, self.outputParametersRecord) + self.OUTPUT.append(line) if __name__ == '__main__': # from multiprocessing import freeze_support # freeze_support() # 防止无限死循环多开 + + # 如果需要调试程序,请在命令行参数中加入--keyboard 0 来禁用键盘监听以提升调试速度 + # If you need to debug the program, please add --keyboard 0 in the command line parameters to disable keyboard listening to improve debugging speed config = { "id": [0], "saved_file_name": "", @@ -1405,7 +1767,8 @@ if __name__ == '__main__': "read_type": "remote", "headless": False, "server_address": "http://localhost:8074", - "version": "0.3.5", + "keyboard": True, # 是否监听键盘输入 + "version": "0.5.0", } c = Config(config) print(c) @@ -1420,8 +1783,10 @@ if __name__ == '__main__': options.binary_location = "EasySpider.app/Contents/Resources/app/chrome_mac64.app/Contents/MacOS/Google Chrome" # MacOS需要用option而不是options! option.binary_location = "EasySpider.app/Contents/Resources/app/chrome_mac64.app/Contents/MacOS/Google Chrome" - option.add_extension("EasySpider.app/Contents/Resources/app/XPathHelper.crx") - options.add_extension("EasySpider.app/Contents/Resources/app/XPathHelper.crx") + option.add_extension( + "EasySpider.app/Contents/Resources/app/XPathHelper.crx") + options.add_extension( + "EasySpider.app/Contents/Resources/app/XPathHelper.crx") driver_path = "EasySpider.app/Contents/Resources/app/chromedriver_mac64" # options.binary_location = "chrome_mac64.app/Contents/MacOS/Google Chrome" # # MacOS需要用option而不是options! @@ -1429,7 +1794,8 @@ if __name__ == '__main__': # driver_path = os.getcwd()+ "/chromedriver_mac64" print(driver_path) if c.config_folder == "": - c.config_folder = os.path.expanduser("~/Library/Application Support/EasySpider/") + c.config_folder = os.path.expanduser( + "~/Library/Application Support/EasySpider/") # print("Config folder for MacOS:", c.config_folder) elif os.path.exists(os.getcwd()+"/EasySpider/resources"): # 打包后的路径 print("Finding chromedriver in EasySpider", @@ -1472,7 +1838,7 @@ if __name__ == '__main__': elif os.path.exists(os.getcwd()+"/../ElectronJS"): # 软件dev用 print("Finding chromedriver in EasySpider", - os.getcwd()+"/ElectronJS") + os.getcwd()+"/ElectronJS") option.binary_location = "../ElectronJS/chrome_win64/chrome.exe" # 指定chrome位置 options.binary_location = "../ElectronJS/chrome_win64/chrome.exe" # 指定chrome位置 driver_path = "../ElectronJS/chrome_win64/chromedriver_win64.exe" @@ -1484,7 +1850,7 @@ if __name__ == '__main__': option.add_experimental_option( 'excludeSwitches', ['enable-automation']) # 以开发者模式 - + # user_data_dir = r'' # 注意没有Default! # options.add_argument('--user-data-dir='+p) @@ -1498,7 +1864,8 @@ if __name__ == '__main__': try: with open(c.config_folder + c.config_file_name, "r", encoding='utf-8') as f: config = json.load(f) - print("Config file path: " + c.config_folder + c.config_file_name) + print("Config file path: " + + c.config_folder + c.config_file_name) absolute_user_data_folder = config["absolute_user_data_folder"] print("\nAbsolute_user_data_folder:", absolute_user_data_folder, "\n") @@ -1525,6 +1892,11 @@ if __name__ == '__main__': options.add_argument( "--disable-blink-features=AutomationControlled") # TMALL 反扒 + options.add_argument('-ignore-certificate-errors') + options.add_argument('-ignore -ssl-errors') + option.add_argument('-ignore-certificate-errors') + option.add_argument('-ignore -ssl-errors') + threads = [] for i in c.id: # print(options) @@ -1578,13 +1950,19 @@ if __name__ == '__main__': options=options, chrome_options=option, executable_path=driver_path) elif cloudflare == 1: if sys.platform == "win32": - options.binary_location = "C:\\Program Files\\Google\\Chrome Beta\\Application\\chrome.exe" # 需要用自己的浏览器 + options.binary_location = "C:\\Program Files\\Google\\Chrome Beta\\Application\\chrome.exe" # 需要用自己的浏览器 + # options.add_argument("--auto-open-devtools-for-tabs") # options.binary_location = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" # 需要用自己的浏览器 - browser_t = MyUCChrome( - options=options, driver_executable_path=driver_path) + browser_t = MyUCChrome(options=options, driver_executable_path=driver_path) + links = list(filter(isnotnull, service["links"].split("\n"))) + browser_t.execute_script('window.open("'+ links[0] +'","_blank");') # open page in new tab + time.sleep(5) # wait until page has loaded + browser_t.switch_to.window(browser_t.window_handles[1]) # switch to new tab + # browser_t = uc.Chrome() else: print("Cloudflare模式只支持Windows x64平台。") - print("Cloudflare Mode only support on Windows x64 platform.") + print( + "Cloudflare Mode only support on Windows x64 platform.") sys.exit() event = Event() event.set() @@ -1594,7 +1972,7 @@ if __name__ == '__main__': threads.append(thread) thread.start() # Set the pause operation - # if sys.platform != "linux": + # if sys.platform != "linux": # time.sleep(3) # print("\n\n----------------------------------") # print("正在运行任务,长按键盘p键可暂停任务的执行以便手工操作浏览器如输入验证码;如果想恢复任务的执行,请再次长按p键。") @@ -1605,24 +1983,26 @@ if __name__ == '__main__': time.sleep(3) press_time = {"duration": 0, "is_pressed": False} print("\n\n----------------------------------") - print("正在运行任务,长按键盘p键可暂停任务的执行以便手工操作浏览器如输入验证码;如果想恢复任务的执行,请再次长按p键。") - print("Running task, long press 'p' to pause the task for manual operation of the browser such as entering the verification code; If you want to resume the execution of the task, please long press 'p' again.") + print( + "正在运行任务,长按键盘p键可暂停任务的执行以便手工操作浏览器如输入验证码;如果想恢复任务的执行,请再次长按p键。") + print( + "Running task, long press 'p' to pause the task for manual operation of the browser such as entering the verification code; If you want to resume the execution of the task, please long press 'p' again.") print("----------------------------------\n\n") # if cloudflare: # print("过Cloudflare验证模式有时候会不稳定,如果无法通过验证则需要隔几分钟重试一次,或者可以更换新的用户信息文件夹再执行任务。") # print("Passing the Cloudflare verification mode is sometimes unstable. If the verification fails, you need to try again every few minutes, or you can change to a new user information folder and then execute the task.") # 使用监听器监听键盘输入 - try: + try: + if c.keyboard: with Listener(on_press=on_press_creator(press_time, event), on_release=on_release_creator(event, press_time)) as listener: listener.join() - except: - pass - # print("您的操作系统不支持暂停功能。") - # print("Your operating system does not support the pause function.") - - + except: + pass + # print("您的操作系统不支持暂停功能。") + # print("Your operating system does not support the pause function.") + # print("线程长度:", len(threads) ) - + for thread in threads: print() thread.join() @@ -1631,4 +2011,5 @@ if __name__ == '__main__': thread.browser.quit() # print("Thread with task id: ", thread.id, " is closed") print("程序已运行完成,请手动关闭此窗口。") - print("The program has finished running, please manually close this window.") + print( + "The program has finished running, please manually close this window.") diff --git a/.temp_to_pub/EasySpider_windows_x64/Code/utils.py b/.temp_to_pub/EasySpider_windows_x64/Code/utils.py index bc788ca..4cf8920 100644 --- a/.temp_to_pub/EasySpider_windows_x64/Code/utils.py +++ b/.temp_to_pub/EasySpider_windows_x64/Code/utils.py @@ -15,6 +15,7 @@ from urllib.parse import urlparse import pymysql from lxml import etree + def is_valid_url(url): try: result = urlparse(url) @@ -22,6 +23,7 @@ def is_valid_url(url): except ValueError: return False + def lowercase_tags_in_xpath(xpath): return re.sub(r"([A-Z]+)(?=[\[\]//]|$)", lambda x: x.group(0).lower(), xpath) @@ -30,10 +32,10 @@ def on_press_creator(press_time, event): def on_press(key): try: if key.char == 'p': - if press_time["is_pressed"] == False: # 没按下p键时,记录按下p键的时间 + if press_time["is_pressed"] == False: # 没按下p键时,记录按下p键的时间 press_time["duration"] = time.time() press_time["is_pressed"] = True - else: # 按下p键时,判断按下p键的时间是否超过2.5秒 + else: # 按下p键时,判断按下p键的时间是否超过2.5秒 duration = time.time() - press_time["duration"] if duration > 2: if event._flag == False: @@ -53,6 +55,7 @@ def on_press_creator(press_time, event): pass return on_press + def on_release_creator(event, press_time): def on_release(key): try: @@ -92,40 +95,45 @@ def on_release_creator(event, press_time): # time.sleep(1) # 每秒检查一次 -def download_image(url, save_directory): +def download_image(browser, url, save_directory): # 定义浏览器头信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } if is_valid_url(url): - # 发送 GET 请求获取图片数据 - response = requests.get(url, headers=headers) + try: + # 发送 GET 请求获取图片数据 + response = requests.get(url, headers=headers) - # 检查响应状态码是否为成功状态 - if response.status_code == requests.codes.ok: - # 提取文件名 - file_name = url.split('/')[-1].split("?")[0] + # 检查响应状态码是否为成功状态 + if response.status_code == requests.codes.ok: + # 提取文件名 + file_name = url.split('/')[-1].split("?")[0] - # 生成唯一的新文件名 - new_file_name = file_name + '_' + \ - str(uuid.uuid4()) + '_' + file_name + # 生成唯一的新文件名 + new_file_name = file_name + '_' + \ + str(uuid.uuid4()) + '_' + file_name - # 构建保存路径 - save_path = os.path.join(save_directory, new_file_name) + # 构建保存路径 + save_path = os.path.join(save_directory, new_file_name) - # 保存图片到本地 - with open(save_path, 'wb') as file: - file.write(response.content) + # 保存图片到本地 + with open(save_path, 'wb') as file: + file.write(response.content) - print("图片已成功下载到:", save_path) - print("The image has been successfully downloaded to:", save_path) - else: - print("下载图片失败,请检查此图片链接是否有效:", url) - print( - "Failed to download image, please check if this image link is valid:", url) + browser.print_and_log("图片已成功下载到:", save_path) + browser.print_and_log( + "The image has been successfully downloaded to:", save_path) + else: + browser.print_and_log("下载图片失败,请检查此图片链接是否有效:", url) + browser.print_and_log( + "Failed to download image, please check if this image link is valid:", url) + except Exception as e: + browser.print_and_log("下载图片失败|Error downloading image: ", e) else: - print("下载图片失败,请检查此图片链接是否有效:", url) - print("Failed to download image, please check if this image link is valid:", url) + browser.print_and_log("下载图片失败,请检查此图片链接是否有效:", url) + browser.print_and_log( + "Failed to download image, please check if this image link is valid:", url) def get_output_code(output): @@ -141,9 +149,10 @@ def get_output_code(output): # 判断字段是否为空 -def isnull(s): +def isnotnull(s): return len(s) != 0 + def new_line(outputParameters, maxViewLength, record): line = [] i = 0 @@ -155,6 +164,7 @@ def new_line(outputParameters, maxViewLength, record): print("") return line + def write_to_csv(file_name, data, record): with open(file_name, 'a', encoding='utf-8-sig', newline="") as f: f_csv = csv.writer(f) @@ -167,6 +177,52 @@ def write_to_csv(file_name, data, record): f.close() +def replace_field_values(orginal_text, outputParameters): + pattern = r'Field\["([^"]+)"\]' + try: + replaced_text = re.sub( + pattern, lambda match: outputParameters.get(match.group(1), ''), orginal_text) + except: + replaced_text = orginal_text + return replaced_text + + +def write_to_json(file_name, data, types, record, keys): + keys = list(keys) + # Prepare empty list for data + data_to_write = [] + # Tranform data and append to list + for line in data: + to_write = {} + for i in range(len(line)): + if types[i] == "int" or types[i] == "bigInt": + try: + line[i] = int(line[i]) + except: + line[i] = 0 + elif types[i] == "double": + try: + line[i] = float(line[i]) + except: + line[i] = 0.0 + if record[i]: + to_write.update({keys[i]: line[i]}) + data_to_write.append(to_write) + + try: + # read data from JSON + with open(file_name, 'r', encoding='utf-8') as f: + json_data = json.load(f) + except: + json_data = [] + + json_data.extend(data_to_write) + + # write data to JSON + with open(file_name, 'w', encoding='utf-8') as f: + json.dump(json_data, f, ensure_ascii=False) + + def write_to_excel(file_name, data, types, record): first = False if os.path.exists(file_name): @@ -180,7 +236,7 @@ def write_to_excel(file_name, data, types, record): first = True # 追加数据到工作表 for line in data: - if not first: # 如果不是第一行,需要转换数据类型 + if not first: # 如果不是第一行,需要转换数据类型 for i in range(len(line)): if types[i] == "int" or types[i] == "bigInt": try: @@ -203,9 +259,6 @@ def write_to_excel(file_name, data, types, record): wb.save(file_name) - - - class Time: def __init__(self, type1=""): self.t = int(round(time.time() * 1000)) @@ -223,7 +276,8 @@ class myMySQL: if sys.platform == "darwin": if config_file.find("./") >= 0: config_file = config_file.replace("./", "") - config_file = os.path.expanduser("~/Library/Application Support/EasySpider/" + config_file) + config_file = os.path.expanduser( + "~/Library/Application Support/EasySpider/" + config_file) print("MySQL config file path: ", config_file) with open(config_file, 'r') as f: config = json.load(f) @@ -233,18 +287,20 @@ class myMySQL: passwd = config["password"] db = config["database"] except Exception as e: - print("读取配置文件失败,请检查配置文件:"+config_file+"是否存在。") - print("Failed to read configuration file, please check if the configuration file: "+config_file+" exists.") + print("读取配置文件失败,请检查配置文件:"+config_file+"是否存在,或配置信息是否有误。") + print("Failed to read configuration file, please check if the configuration file: " + + config_file+" exists, or if the configuration information is incorrect.") print(e) try: self.conn = pymysql.connect( - host=host, port=port, user=user, passwd=passwd, db=db) + host=host, port=port, user=user, passwd=passwd, db=db) print("成功连接到数据库。") print("Successfully connected to the database.") except: print("连接数据库失败,请检查配置文件是否正确。") - print("Failed to connect to the database, please check if the configuration file is correct.") - + print( + "Failed to connect to the database, please check if the configuration file is correct.") + def create_table(self, table_name, parameters): self.table_name = table_name self.field_sql = "(" @@ -253,7 +309,8 @@ class myMySQL: cursor.execute("SHOW TABLES LIKE '%s'" % table_name) result = cursor.fetchone() - sql = "CREATE TABLE " + table_name + " (_id INT AUTO_INCREMENT PRIMARY KEY, " + sql = "CREATE TABLE " + table_name + \ + " (_id INT AUTO_INCREMENT PRIMARY KEY, " for item in parameters: if item["recordASField"]: name = item['name'] @@ -309,25 +366,32 @@ class myMySQL: line[i] = 0.0 elif types[i] == "datetime": try: - line[i] = datetime.datetime.strptime(line[i], '%Y-%m-%d %H:%M:%S') + line[i] = datetime.datetime.strptime( + line[i], '%Y-%m-%d %H:%M:%S') except: - line[i] = datetime.datetime.strptime("1970-01-01 00:00:00", '%Y-%m-%d %H:%M:%S') + line[i] = datetime.datetime.strptime( + "1970-01-01 00:00:00", '%Y-%m-%d %H:%M:%S') elif types[i] == "date": try: - line[i] = datetime.datetime.strptime(line[i], '%Y-%m-%d') + line[i] = datetime.datetime.strptime( + line[i], '%Y-%m-%d') except: - line[i] = datetime.datetime.strptime("1970-01-01", '%Y-%m-%d') + line[i] = datetime.datetime.strptime( + "1970-01-01", '%Y-%m-%d') elif types[i] == "time": try: - line[i] = datetime.datetime.strptime(line[i], '%H:%M:%S') + line[i] = datetime.datetime.strptime( + line[i], '%H:%M:%S') except: - line[i] = datetime.datetime.strptime("00:00:00", '%H:%M:%S') + line[i] = datetime.datetime.strptime( + "00:00:00", '%H:%M:%S') to_write = [] for i in range(len(line)): if record[i]: to_write.append(line[i]) # 构造插入数据的 SQL 语句 - sql = f"INSERT INTO "+ self.table_name +" "+self.field_sql+" VALUES (" + sql = f"INSERT INTO " + self.table_name + \ + " "+self.field_sql+" VALUES (" for item in to_write: sql += "%s, " # 移除最后的逗号并添加闭合的括号 @@ -341,14 +405,15 @@ class myMySQL: print("插入数据库错误,请查看以上的错误提示,然后检查数据的类型是否正确,是否文本过长(超过一万的文本类型要设置为大文本)。") print("Inserting database error, please check the above error, and then check whether the data type is correct, whether the text is too long (text type over 10,000 should be set to large text).") print("重新执行任务时,请删除数据库中的数据表" + self.table_name + ",然后再次运行程序。") - print("When re-executing the task, please delete the data table " + self.table_name + " in the database, and then run the program again.") + print("When re-executing the task, please delete the data table " + + self.table_name + " in the database, and then run the program again.") # 提交到数据库执行 self.conn.commit() # 关闭游标和连接 cursor.close() - + def close(self): self.conn.close() print("成功关闭数据库。") diff --git a/.temp_to_pub/EasySpider_windows_x64/execution_instances/0.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/0.json deleted file mode 100644 index 170f0c4..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/0.json +++ /dev/null @@ -1 +0,0 @@ -{"id":0,"name":"详情页","url":"https://www.dongchedi.com/article/7254469214726324796","links":"https://www.dongchedi.com/article/7254469214726324796","create_time":"2023/7/11 17:53:04","update_time":"2023/7/11 17:54:46","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"current_time","containJudge":false,"desc":"https://www.dongchedi.com/article/7254469214726324796","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.dongchedi.com/article/7254469214726324796","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.dongchedi.com/article/7254469214726324796"}],"outputParameters":[{"id":0,"name":"参数1_页面标题","desc":"","type":"text","recordASField":1,"exampleValue":"荣威D7 DMH混动版官图发布 定位中大型轿车 续航1400km_懂车帝"},{"id":1,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"日前,荣威D7 DMH(图片)混动版官图正式发布。据悉,新车定位新能源中大型轿车,将会在年内上市发售。外观方面,新车将采用全新的设计风格,整体造型十分时尚且富有运动感。值得注意的是,新车并没有采用与电动版相同的分体式大灯设计,而是相对常规的样式。车身尺寸方面,新车长宽高分别为4890/1890/1510mm,轴距为2810mm。动力方面,新车将搭载热效率大于43%的混动专用发动机,CLTC工况下纯电续航里程为125km,综合续航里程为1400km,馈电油耗为4.3L/100km。"},{"id":2,"name":"参数4_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://p9-dcd.byteimg.com/img/motor-article-img/0e7a4f1c6e89438ea8dc22163d80fae3~noop.webp"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,5],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"url":"https://www.dongchedi.com/article/7254469214726324796","links":"https://www.dongchedi.com/article/7254469214726324796","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"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,"paras":[{"nodeType":0,"contentType":6,"relative":false,"name":"参数1_页面标题","desc":"","extractType":0,"relativeXPath":"/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/aside[1]/div[1]/h2[1]","allXPaths":["/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/aside[1]/div[1]/h2[1]","//h2[contains(., '相关推荐')]","//H2[@class='jsx-1932881358 title']","/html/body/div[last()-5]/div/div/div/div/div/aside/div[last()-1]/h2"],"exampleValues":[{"num":0,"value":"荣威D7 DMH混动版官图发布 定位中大型轿车 续航1400km_懂车帝"}],"unique_index":"zq1hj9zt0inljy40dht","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":"参数2_文本","desc":"","extractType":0,"relativeXPath":"id(\"article\")","allXPaths":["/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/main[1]/section[1]/div[1]/article[1]/div[2]/div[1]/section[1]","//section[contains(., '日前,荣威D7 DM')]","id(\"article\")","//SECTION[@class='jsx-3371063651 article-content']","/html/body/div[last()-5]/div/div/div/div/div/main/section/div[last()-1]/article/div[last()-1]/div/section"],"exampleValues":[{"num":0,"value":"日前,荣威D7 DMH(图片)混动版官图正式发布。据悉,新车定位新能源中大型轿车,将会在年内上市发售。外观方面,新车将采用全新的设计风格,整体造型十分时尚且富有运动感。值得注意的是,新车并没有采用与电动版相同的分体式大灯设计,而是相对常规的样式。车身尺寸方面,新车长宽高分别为4890/1890/1510mm,轴距为2810mm。动力方面,新车将搭载热效率大于43%的混动专用发动机,CLTC工况下纯电续航里程为125km,综合续航里程为1400km,馈电油耗为4.3L/100km。"}],"unique_index":"zcgjfmkb41ljy4164a","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":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":"/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/main[1]/section[1]/div[1]/article[1]/div[2]/div[1]/section[1]/div/img[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[2]/div[1]/div[1]/div[1]/main[1]/section[1]/div[1]/article[1]/div[2]/div[1]/section[1]/div[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-6]/div[last()-1]/div/div/div/div/main/section/div[last()-1]/article/div[last()-1]/div/section/div[last()-4]/img"]}},{"id":-1,"index":4,"parentId":3,"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,"paras":[{"nodeType":4,"contentType":0,"relative":true,"name":"参数3_图片地址","desc":"","extractType":0,"relativeXPath":"","allXPaths":"","exampleValues":[{"num":0,"value":"https://p9-dcd.byteimg.com/img/motor-article-img/0e7a4f1c6e89438ea8dc22163d80fae3~noop.webp"}],"unique_index":"wdaxxokem3ljy44mzo","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":1}],"loopType":1}},{"id":3,"index":5,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[6],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"id(\"article\")//img","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[2]/div[1]/div[1]/div[1]/main[1]/section[1]/div[1]/article[1]/div[2]/div[1]/section[1]/div[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-6]/div[last()-1]/div/div/div/div/main/section/div[last()-1]/article/div[last()-1]/div/section/div[last()-4]/img"]}},{"id":4,"index":6,"parentId":3,"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,"paras":[{"nodeType":4,"contentType":0,"relative":true,"name":"参数4_图片地址","desc":"","extractType":0,"relativeXPath":"","allXPaths":"","exampleValues":[{"num":0,"value":"https://p9-dcd.byteimg.com/img/motor-article-img/0e7a4f1c6e89438ea8dc22163d80fae3~noop.webp"}],"unique_index":"bmdeqk77gfdljy45n1u","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/.temp_to_pub/EasySpider_windows_x64/execution_instances/1.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/1.json deleted file mode 100644 index 83c17de..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/1.json +++ /dev/null @@ -1 +0,0 @@ -{"id":1,"name":"无限滚动测试 京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"7/12/2023, 11:19:21 AM","update_time":"7/13/2023, 3:12:59 PM","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"current_time","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":"iphone","value":"iphone"}],"outputParameters":[{"id":0,"name":"参数13_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\n\t\t\t\t \t"},{"id":1,"name":"参数14_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"//item.jd.com/100038089781.html"},{"id":2,"name":"参数15_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img11.360buyimg.com/n7/jfs/t1/191960/4/28218/17255/63196f11Ee943e61b/ec9d8feadce365fe.jpg"},{"id":3,"name":"参数16_文本","desc":"","type":"text","recordASField":1,"exampleValue":"<"},{"id":4,"name":"参数17_文本","desc":"","type":"text","recordASField":1,"exampleValue":">"},{"id":5,"name":"参数18_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":6,"name":"参数19_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":7,"name":"参数20_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img11.360buyimg.com/n7/jfs/t1/191960/4/28218/17255/63196f11Ee943e61b/ec9d8feadce365fe.jpg"},{"id":8,"name":"参数21_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":9,"name":"参数22_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":10,"name":"参数23_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img11.360buyimg.com/n7/jfs/t1/145950/1/30473/21295/63196dcfEebbe2254/7b1578b98436f737.jpg"},{"id":11,"name":"参数24_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":12,"name":"参数25_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":13,"name":"参数26_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img10.360buyimg.com/n7/jfs/t1/50423/12/21455/19477/6319674cE5de04487/71457158f73abe8f.jpg"},{"id":14,"name":"参数27_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":15,"name":"参数28_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":16,"name":"参数29_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img13.360buyimg.com/n7/jfs/t1/58549/24/22211/18752/63196e79E30ec4e33/5f9ce38bdbacf96c.jpg"},{"id":17,"name":"参数30_文本","desc":"","type":"text","recordASField":1,"exampleValue":"¥"},{"id":18,"name":"参数31_文本","desc":"","type":"text","recordASField":1,"exampleValue":"8729.00"},{"id":19,"name":"参数32_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\tApple iPhone 14 Pro (A2892) 256GB 深空黑色 支持移动联通电信5G 双卡双待手机【大王卡】\n\t\t\t\t\t\t\t\t【好物限时购】Apple好物限量特价,限时优惠等你来购~快来抢购吧!\n\t\t\t\t\t\t\t"},{"id":20,"name":"参数33_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"//item.jd.com/100038089781.html"},{"id":21,"name":"参数34_文本","desc":"","type":"text","recordASField":1,"exampleValue":"Apple14Pro(A2892)256GB深空黑色支持移动联通电信5G双卡双待手机【大王卡】"},{"id":22,"name":"参数35_文本","desc":"","type":"text","recordASField":1,"exampleValue":"iPhone"},{"id":23,"name":"参数36_文本","desc":"","type":"text","recordASField":1,"exampleValue":"【好物限时购】Apple好物限量特价,限时优惠等你来购~快来抢购吧!"},{"id":24,"name":"参数37_文本","desc":"","type":"text","recordASField":1,"exampleValue":"条评价"},{"id":25,"name":"参数38_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"10万+"},{"id":26,"name":"参数39_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"//item.jd.com/100038089781.html#comment"},{"id":27,"name":"参数40_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"关注"},{"id":28,"name":"参数41_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":29,"name":"参数42_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"中国联通京东自营旗舰店"},{"id":30,"name":"参数43_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"//mall.jd.com/index-1000073123.html?from=pc"},{"id":31,"name":"参数44_文本","desc":"","type":"text","recordASField":1,"exampleValue":"自营"},{"id":32,"name":"参数45_文本","desc":"","type":"text","recordASField":1,"exampleValue":"券7000-1100"},{"id":33,"name":"参数46_文本","desc":"","type":"text","recordASField":1,"exampleValue":"赠"},{"id":34,"name":"参数47_文本","desc":"","type":"text","recordASField":1,"exampleValue":"海外预定"},{"id":35,"name":"参数48_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":36,"name":"参数49_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":37,"name":"参数50_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img11.360buyimg.com/n7/jfs/t1/11338/10/19033/26138/635cc0a1E1ae6ecad/927d35008061c637.jpg"},{"id":38,"name":"参数51_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":39,"name":"参数52_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":40,"name":"参数53_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img12.360buyimg.com/n7/jfs/t1/195608/23/33272/24575/64074bbcF2996dcca/45e38aaf1c8b37b3.jpg"},{"id":41,"name":"参数54_文本","desc":"","type":"text","recordASField":1,"exampleValue":"拍拍"},{"id":42,"name":"参数55_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//m.360buyimg.com/cc/jfs/t1/197706/29/27826/4384/63314bc6E21b4c3e9/8b4d5fc44efc5b3f.png"},{"id":43,"name":"参数56_文本","desc":"","type":"text","recordASField":1,"exampleValue":"iPhone"},{"id":44,"name":"参数57_文本","desc":"","type":"text","recordASField":1,"exampleValue":"iPhone"},{"id":45,"name":"参数58_文本","desc":"","type":"text","recordASField":1,"exampleValue":"预约中"},{"id":46,"name":"参数59_文本","desc":"","type":"text","recordASField":1,"exampleValue":"剩余9天12时40分"},{"id":47,"name":"参数60_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":48,"name":"参数61_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":49,"name":"参数62_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,4,5,6],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"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":1,"option":8,"title":"循环","sequence":[3],"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,"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[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":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,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","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":"参数2_链接文本","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":"参数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":"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":"参数4_文本","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":"参数5_链接文本","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":"参数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":"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":"参数7_文本","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":"参数8_链接文本","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":"参数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":"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":"参数10_文本","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":"参数11_链接文本","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":"参数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":"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}],"loopType":1}},{"id":2,"index":4,"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,"value":"iphone","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"]}},{"id":3,"index":5,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search-btn\"]/i[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":"3","scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[4]/div[1]/div[2]/div[1]/button[1]/i[1]","//i[contains(., '')]","/html/body/div[last()-6]/div/div[last()-2]/div/button/i"]}},{"id":4,"index":6,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[7],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[5]/div[2]/div[2]/div[1]/div[1]/div[2]/ul[1]/li/div[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[5]/div[2]/div[2]/div[1]/div[1]/div[2]/ul[1]/li[1]/div[1]","//div[contains(., '')]","//DIV[@class='gl-i-wrap']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div"]}},{"id":5,"index":7,"parentId":4,"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,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"参数13_链接文本","desc":"","relativeXPath":"/div[1]/a[1]","allXPaths":["/div[1]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-8]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\n\t\t\t\t \t"}],"unique_index":"/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":"参数14_链接地址","desc":"","relativeXPath":"/div[1]/a[1]","allXPaths":["/div[1]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-8]/a"],"exampleValues":[{"num":0,"value":"//item.jd.com/100038089781.html"}],"unique_index":"/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":"参数15_图片地址","desc":"","relativeXPath":"/div[1]/a[1]/img[1]","allXPaths":["/div[1]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-8]/a/img"],"exampleValues":[{"num":0,"value":"//img11.360buyimg.com/n7/jfs/t1/191960/4/28218/17255/63196f11Ee943e61b/ec9d8feadce365fe.jpg"}],"unique_index":"/div[1]/a[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":"参数16_文本","desc":"","relativeXPath":"/div[2]/span[1]","allXPaths":["/div[2]/span[1]","//span[contains(., '<')]","//SPAN[@class='ps-prev']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/span[last()-1]"],"exampleValues":[{"num":0,"value":"<"}],"unique_index":"/div[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":"参数17_文本","desc":"","relativeXPath":"/div[2]/span[2]","allXPaths":["/div[2]/span[2]","//span[contains(., '>')]","//SPAN[@class='ps-next']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/span"],"exampleValues":[{"num":0,"value":">"}],"unique_index":"/div[2]/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":"参数18_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[1]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[1]/a[1]","//a[contains(., '')]","//A[@class='curr']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-3]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数19_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[1]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[1]/a[1]","//a[contains(., '')]","//A[@class='curr']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-3]/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数20_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[1]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[1]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-3]/a/img"],"exampleValues":[{"num":0,"value":"//img11.360buyimg.com/n7/jfs/t1/191960/4/28218/17255/63196f11Ee943e61b/ec9d8feadce365fe.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[1]/a[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":"参数21_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[2]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[2]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-2]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数22_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[2]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[2]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-2]/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数23_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[2]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[2]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-2]/a/img"],"exampleValues":[{"num":0,"value":"//img11.360buyimg.com/n7/jfs/t1/145950/1/30473/21295/63196dcfEebbe2254/7b1578b98436f737.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[2]/a[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":"参数24_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[3]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[3]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-1]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[3]/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":"参数25_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[3]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[3]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-1]/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[3]/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":"参数26_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[3]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[3]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-1]/a/img"],"exampleValues":[{"num":0,"value":"//img10.360buyimg.com/n7/jfs/t1/50423/12/21455/19477/6319674cE5de04487/71457158f73abe8f.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[3]/a[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":"参数27_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[4]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[4]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[4]/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":"参数28_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[4]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[4]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[4]/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":"参数29_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[4]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[4]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li/a/img"],"exampleValues":[{"num":0,"value":"//img13.360buyimg.com/n7/jfs/t1/58549/24/22211/18752/63196e79E30ec4e33/5f9ce38bdbacf96c.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[4]/a[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":"参数30_文本","desc":"","relativeXPath":"/div[3]/strong[1]/em[1]","allXPaths":["/div[3]/strong[1]/em[1]","//em[contains(., '¥')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-6]/strong/em"],"exampleValues":[{"num":0,"value":"¥"}],"unique_index":"/div[3]/strong[1]/em[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":"参数31_文本","desc":"","relativeXPath":"/div[3]/strong[1]/i[1]","allXPaths":["/div[3]/strong[1]/i[1]","//i[contains(., '8729.00')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-6]/strong/i"],"exampleValues":[{"num":0,"value":"8729.00"}],"unique_index":"/div[3]/strong[1]/i[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":"参数32_链接文本","desc":"","relativeXPath":"/div[4]/a[1]","allXPaths":["/div[4]/a[1]","//a[contains(., 'A')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\tApple iPhone 14 Pro (A2892) 256GB 深空黑色 支持移动联通电信5G 双卡双待手机【大王卡】\n\t\t\t\t\t\t\t\t【好物限时购】Apple好物限量特价,限时优惠等你来购~快来抢购吧!\n\t\t\t\t\t\t\t"}],"unique_index":"/div[4]/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":"参数33_链接地址","desc":"","relativeXPath":"/div[4]/a[1]","allXPaths":["/div[4]/a[1]","//a[contains(., 'A')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a"],"exampleValues":[{"num":0,"value":"//item.jd.com/100038089781.html"}],"unique_index":"/div[4]/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":"参数34_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]","allXPaths":["/div[4]/a[1]/em[1]","//em[contains(., 'Apple iPho')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a/em"],"exampleValues":[{"num":0,"value":"Apple14Pro(A2892)256GB深空黑色支持移动联通电信5G双卡双待手机【大王卡】"}],"unique_index":"/div[4]/a[1]/em[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":"参数35_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]/font[1]","allXPaths":["/div[4]/a[1]/em[1]/font[1]","//font[contains(., 'iPhone')]","//FONT[@class='skcolor_ljg']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a/em/font"],"exampleValues":[{"num":0,"value":"iPhone"}],"unique_index":"/div[4]/a[1]/em[1]/font[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":"参数36_文本","desc":"","relativeXPath":"/div[4]/a[1]/i[1]","allXPaths":["/div[4]/a[1]/i[1]","//i[contains(., '【好物限时购】App')]","id(\"J_AD_100038089781\")","//I[@class='promo-words']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a/i"],"exampleValues":[{"num":0,"value":"【好物限时购】Apple好物限量特价,限时优惠等你来购~快来抢购吧!"}],"unique_index":"/div[4]/a[1]/i[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":"参数37_文本","desc":"","relativeXPath":"/div[5]/strong[1]","allXPaths":["/div[5]/strong[1]","//strong[contains(., '10万+条评价')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-4]/strong"],"exampleValues":[{"num":0,"value":"条评价"}],"unique_index":"/div[5]/strong[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":"参数38_链接文本","desc":"","relativeXPath":"/div[5]/strong[1]/a[1]","allXPaths":["/div[5]/strong[1]/a[1]","//a[contains(., '10万+')]","id(\"J_comment_100038089781\")","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-4]/strong/a"],"exampleValues":[{"num":0,"value":"10万+"}],"unique_index":"/div[5]/strong[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":"参数39_链接地址","desc":"","relativeXPath":"/div[5]/strong[1]/a[1]","allXPaths":["/div[5]/strong[1]/a[1]","//a[contains(., '10万+')]","id(\"J_comment_100038089781\")","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-4]/strong/a"],"exampleValues":[{"num":0,"value":"//item.jd.com/100038089781.html#comment"}],"unique_index":"/div[5]/strong[1]/a[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":"参数40_链接文本","desc":"","relativeXPath":"/div[6]/a[1]","allXPaths":["/div[6]/a[1]","//a[contains(., '关注')]","//A[@class='J_focus']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-3]/a"],"exampleValues":[{"num":0,"value":"关注"}],"unique_index":"/div[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":"参数41_链接地址","desc":"","relativeXPath":"/div[6]/a[1]","allXPaths":["/div[6]/a[1]","//a[contains(., '关注')]","//A[@class='J_focus']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-3]/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[6]/a[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":"参数42_链接文本","desc":"","relativeXPath":"/div[7]/span[1]/a[1]","allXPaths":["/div[7]/span[1]/a[1]","//a[contains(., '中国联通京东自营旗舰')]","//A[@class='curr-shop hd-shopname']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-2]/span/a"],"exampleValues":[{"num":0,"value":"中国联通京东自营旗舰店"}],"unique_index":"/div[7]/span[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":"参数43_链接地址","desc":"","relativeXPath":"/div[7]/span[1]/a[1]","allXPaths":["/div[7]/span[1]/a[1]","//a[contains(., '中国联通京东自营旗舰')]","//A[@class='curr-shop hd-shopname']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-2]/span/a"],"exampleValues":[{"num":0,"value":"//mall.jd.com/index-1000073123.html?from=pc"}],"unique_index":"/div[7]/span[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":"参数44_文本","desc":"","relativeXPath":"/div[8]/i[1]","allXPaths":["/div[8]/i[1]","//i[contains(., '自营')]","//I[@class='goods-icons J-picon-tips J-picon-fix']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-1]/i[last()-2]"],"exampleValues":[{"num":0,"value":"自营"}],"unique_index":"/div[8]/i[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":"参数45_文本","desc":"","relativeXPath":"/div[8]/i[2]","allXPaths":["/div[8]/i[2]","//i[contains(., '券7000-1100')]","//I[@class='goods-icons4 J-picon-tips']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-1]/i[last()-1]"],"exampleValues":[{"num":0,"value":"券7000-1100"}],"unique_index":"/div[8]/i[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":"参数46_文本","desc":"","relativeXPath":"/div[8]/i[3]","allXPaths":["/div[8]/i[3]","//i[contains(., '赠')]","//I[@class='goods-icons4 J-picon-tips']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-1]/i"],"exampleValues":[{"num":0,"value":"赠"}],"unique_index":"/div[8]/i[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":"参数47_文本","desc":"","relativeXPath":"/div[9]","allXPaths":["/div[9]","//div[contains(., '海外预定')]","//DIV[@class='p-stock']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div"],"exampleValues":[{"num":0,"value":"海外预定"}],"unique_index":"/div[9]","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":"参数48_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[5]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[5]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li[last()-1]/a"],"exampleValues":[{"num":1,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[5]/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":"参数49_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[5]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[5]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li[last()-1]/a"],"exampleValues":[{"num":1,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[5]/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":"参数50_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[5]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[5]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li[last()-1]/a/img"],"exampleValues":[{"num":1,"value":"//img11.360buyimg.com/n7/jfs/t1/11338/10/19033/26138/635cc0a1E1ae6ecad/927d35008061c637.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[5]/a[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":"参数51_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[6]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[6]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":1,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数52_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[6]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[6]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":1,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[6]/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":"参数53_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[6]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[6]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li/a/img"],"exampleValues":[{"num":1,"value":"//img12.360buyimg.com/n7/jfs/t1/195608/23/33272/24575/64074bbcF2996dcca/45e38aaf1c8b37b3.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[6]/a[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":"参数54_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]/span[1]","allXPaths":["/div[4]/a[1]/em[1]/span[1]","//span[contains(., '拍拍')]","//SPAN[@class='p-tag']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-23]/div/div[last()-5]/a/em/span"],"exampleValues":[{"num":6,"value":"拍拍"}],"unique_index":"/div[4]/a[1]/em[1]/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":"参数55_图片地址","desc":"","relativeXPath":"/div[7]/img[1]","allXPaths":["/div[7]/img[1]","//img[contains(., '')]","//IMG[@class='shop-tag fl']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-23]/div/div[last()-2]/img"],"exampleValues":[{"num":6,"value":"//m.360buyimg.com/cc/jfs/t1/197706/29/27826/4384/63314bc6E21b4c3e9/8b4d5fc44efc5b3f.png"}],"unique_index":"/div[7]/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":"参数56_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]/font[2]","allXPaths":["/div[4]/a[1]/em[1]/font[2]","//font[contains(., 'iPhone')]","//FONT[@class='skcolor_ljg']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-22]/div/div[last()-5]/a/em/font[last()-1]"],"exampleValues":[{"num":7,"value":"iPhone"}],"unique_index":"/div[4]/a[1]/em[1]/font[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":"参数57_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]/font[3]","allXPaths":["/div[4]/a[1]/em[1]/font[3]","//font[contains(., 'iPhone')]","//FONT[@class='skcolor_ljg']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-22]/div/div[last()-5]/a/em/font"],"exampleValues":[{"num":7,"value":"iPhone"}],"unique_index":"/div[4]/a[1]/em[1]/font[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":"参数58_文本","desc":"","relativeXPath":"/div[10]/span[1]","allXPaths":["/div[10]/span[1]","//span[contains(., '预约中')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-15]/div/div/span"],"exampleValues":[{"num":14,"value":"预约中"}],"unique_index":"/div[10]/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":"参数59_文本","desc":"","relativeXPath":"/div[10]/em[1]","allXPaths":["/div[10]/em[1]","//em[contains(., '剩余9天12时40分')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-15]/div/div/em"],"exampleValues":[{"num":14,"value":"剩余9天12时40分"}],"unique_index":"/div[10]/em[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":"参数60_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[7]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[7]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-3]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":26,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[7]/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":"参数61_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[7]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[7]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-3]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":26,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[7]/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":"参数62_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[7]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[7]/a[1]/img[1]","//img[contains(., '')]","//IMG[@class='err-product']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-3]/div/div[last()-7]/div/ul/li/a/img"],"exampleValues":[{"num":26,"value":""}],"unique_index":"/div[2]/div[1]/ul[1]/li[7]/a[1]/img[1]","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/.temp_to_pub/EasySpider_windows_x64/execution_instances/10.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/10.json deleted file mode 100644 index 5aca773..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/10.json +++ /dev/null @@ -1 +0,0 @@ -{"id":10,"name":"中国保险行业协会 栏目页右侧列表嵌入","url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","create_time":"7/15/2023, 7:52:19 AM","update_time":"7/15/2023, 8:21:11 AM","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"current_time","containJudge":false,"desc":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html"},{"id":1,"name":"loopTimes_循环_1","nodeId":2,"nodeName":"循环","desc":"循环循环执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0},{"id":2,"name":"inputText_2","nodeName":"输入文字","nodeId":9,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"text","exampleValue":"123","value":"123"}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"text","recordASField":1,"exampleValue":"11"},{"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":"停售"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"详细信息"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,9,6,8,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":5,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[4,3],"isInLoop":false,"position":4,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"]}},{"id":7,"index":3,"parentId":5,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":1,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"],"loopType":0}},{"id":6,"index":4,"parentId":5,"type":1,"option":8,"title":"循环","sequence":[5],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr[1]","//tr[contains(., '11建信人寿保险有限')]","//TR[@class='el-table__row']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]"]}},{"id":8,"index":5,"parentId":6,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[1]/div[1]/span[1]","allXPaths":["/td[1]/div[1]/span[1]","//span[contains(., '11')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-5]/div/span"],"exampleValues":[{"num":0,"value":"11"}],"unique_index":"/td[1]/div[1]/span[1]","iframe":true,"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]/div[1]","allXPaths":["/td[2]/div[1]","//div[contains(., '建信人寿保险有限公司')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-4]/div"],"exampleValues":[{"num":0,"value":"建信人寿保险有限公司"}],"unique_index":"/td[2]/div[1]","iframe":true,"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]/div[1]","allXPaths":["/td[3]/div[1]","//div[contains(., '康乐安心两全保险')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-3]/div"],"exampleValues":[{"num":0,"value":"康乐安心两全保险"}],"unique_index":"/td[3]/div[1]","iframe":true,"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[5]/div[1]","allXPaths":["/td[5]/div[1]","//div[contains(., '停售')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-1]/div"],"exampleValues":[{"num":0,"value":"停售"}],"unique_index":"/td[5]/div[1]","iframe":true,"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[6]/div[1]/button[1]/span[1]","allXPaths":["/td[6]/div[1]/button[1]/span[1]","//span[contains(., '详细信息')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td/div/button/span"],"exampleValues":[{"num":0,"value":"详细信息"}],"unique_index":"/td[6]/div[1]/button[1]/span[1]","iframe":true,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":3,"index":6,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"is-error\")]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[2]/form[1]/div[1]/div[1]/table[1]/tbody[4]/tr[1]/td[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","//i[contains(., '')]","//I[@class='el-select__caret el-input__icon el-icon-arrow-up']","/html/body/div[last()-5]/div/div/div[last()-2]/form/div[last()-1]/div/table/tbody[last()-1]/tr/td/div/div/div/div/div/div[last()-1]/div/span/span/i"]}},{"id":-1,"index":7,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}},{"id":4,"index":8,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}},{"id":2,"index":9,"parentId":0,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":3,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"h_description\")]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/div[1]/div[1]/div[1]/input[1]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"value":"123","allXPaths":["/html/body/div[1]/div[1]/div[1]/div[2]/form[1]/div[1]/div[1]/table[1]/tbody[1]/tr[1]/td[1]/div[1]/div[1]/div[1]/div[1]/input[1]","//input[contains(., '')]","//INPUT[@class='el-input__inner']","/html/body/div[last()-3]/div/div/div[last()-1]/form/div[last()-1]/div/table/tbody[last()-4]/tr/td[last()-1]/div/div/div/div/input"]}}]} \ No newline at end of file diff --git a/.temp_to_pub/EasySpider_windows_x64/execution_instances/2.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/2.json deleted file mode 100644 index 9090f15..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/2.json +++ /dev/null @@ -1 +0,0 @@ -{"id":2,"name":"无限滚动测试 京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"7/12/2023, 11:19:21 AM","update_time":"7/13/2023, 3:12:59 PM","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"current_time","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":"iphone","value":"iphone"}],"outputParameters":[{"id":0,"name":"参数13_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\n\t\t\t\t \t"},{"id":1,"name":"参数14_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"//item.jd.com/100038089781.html"},{"id":2,"name":"参数15_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img11.360buyimg.com/n7/jfs/t1/191960/4/28218/17255/63196f11Ee943e61b/ec9d8feadce365fe.jpg"},{"id":3,"name":"参数16_文本","desc":"","type":"text","recordASField":1,"exampleValue":"<"},{"id":4,"name":"参数17_文本","desc":"","type":"text","recordASField":1,"exampleValue":">"},{"id":5,"name":"参数18_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":6,"name":"参数19_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":7,"name":"参数20_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img11.360buyimg.com/n7/jfs/t1/191960/4/28218/17255/63196f11Ee943e61b/ec9d8feadce365fe.jpg"},{"id":8,"name":"参数21_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":9,"name":"参数22_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":10,"name":"参数23_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img11.360buyimg.com/n7/jfs/t1/145950/1/30473/21295/63196dcfEebbe2254/7b1578b98436f737.jpg"},{"id":11,"name":"参数24_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":12,"name":"参数25_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":13,"name":"参数26_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img10.360buyimg.com/n7/jfs/t1/50423/12/21455/19477/6319674cE5de04487/71457158f73abe8f.jpg"},{"id":14,"name":"参数27_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":15,"name":"参数28_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":16,"name":"参数29_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img13.360buyimg.com/n7/jfs/t1/58549/24/22211/18752/63196e79E30ec4e33/5f9ce38bdbacf96c.jpg"},{"id":17,"name":"参数30_文本","desc":"","type":"text","recordASField":1,"exampleValue":"¥"},{"id":18,"name":"参数31_文本","desc":"","type":"text","recordASField":1,"exampleValue":"8729.00"},{"id":19,"name":"参数32_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\tApple iPhone 14 Pro (A2892) 256GB 深空黑色 支持移动联通电信5G 双卡双待手机【大王卡】\n\t\t\t\t\t\t\t\t【好物限时购】Apple好物限量特价,限时优惠等你来购~快来抢购吧!\n\t\t\t\t\t\t\t"},{"id":20,"name":"参数33_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"//item.jd.com/100038089781.html"},{"id":21,"name":"参数34_文本","desc":"","type":"text","recordASField":1,"exampleValue":"Apple14Pro(A2892)256GB深空黑色支持移动联通电信5G双卡双待手机【大王卡】"},{"id":22,"name":"参数35_文本","desc":"","type":"text","recordASField":1,"exampleValue":"iPhone"},{"id":23,"name":"参数36_文本","desc":"","type":"text","recordASField":1,"exampleValue":"【好物限时购】Apple好物限量特价,限时优惠等你来购~快来抢购吧!"},{"id":24,"name":"参数37_文本","desc":"","type":"text","recordASField":1,"exampleValue":"条评价"},{"id":25,"name":"参数38_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"10万+"},{"id":26,"name":"参数39_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"//item.jd.com/100038089781.html#comment"},{"id":27,"name":"参数40_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"关注"},{"id":28,"name":"参数41_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":29,"name":"参数42_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"中国联通京东自营旗舰店"},{"id":30,"name":"参数43_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"//mall.jd.com/index-1000073123.html?from=pc"},{"id":31,"name":"参数44_文本","desc":"","type":"text","recordASField":1,"exampleValue":"自营"},{"id":32,"name":"参数45_文本","desc":"","type":"text","recordASField":1,"exampleValue":"券7000-1100"},{"id":33,"name":"参数46_文本","desc":"","type":"text","recordASField":1,"exampleValue":"赠"},{"id":34,"name":"参数47_文本","desc":"","type":"text","recordASField":1,"exampleValue":"海外预定"},{"id":35,"name":"参数48_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":36,"name":"参数49_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":37,"name":"参数50_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img11.360buyimg.com/n7/jfs/t1/11338/10/19033/26138/635cc0a1E1ae6ecad/927d35008061c637.jpg"},{"id":38,"name":"参数51_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":39,"name":"参数52_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":40,"name":"参数53_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//img12.360buyimg.com/n7/jfs/t1/195608/23/33272/24575/64074bbcF2996dcca/45e38aaf1c8b37b3.jpg"},{"id":41,"name":"参数54_文本","desc":"","type":"text","recordASField":1,"exampleValue":"拍拍"},{"id":42,"name":"参数55_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":"//m.360buyimg.com/cc/jfs/t1/197706/29/27826/4384/63314bc6E21b4c3e9/8b4d5fc44efc5b3f.png"},{"id":43,"name":"参数56_文本","desc":"","type":"text","recordASField":1,"exampleValue":"iPhone"},{"id":44,"name":"参数57_文本","desc":"","type":"text","recordASField":1,"exampleValue":"iPhone"},{"id":45,"name":"参数58_文本","desc":"","type":"text","recordASField":1,"exampleValue":"预约中"},{"id":46,"name":"参数59_文本","desc":"","type":"text","recordASField":1,"exampleValue":"剩余9天12时40分"},{"id":47,"name":"参数60_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"},{"id":48,"name":"参数61_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"javascript:;"},{"id":49,"name":"参数62_图片地址","desc":"","type":"text","recordASField":1,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,4,5,6],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"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":1,"option":8,"title":"循环","sequence":[3],"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,"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[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":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,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","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":"参数2_链接文本","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":"参数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":"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":"参数4_文本","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":"参数5_链接文本","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":"参数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":"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":"参数7_文本","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":"参数8_链接文本","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":"参数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":"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":"参数10_文本","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":"参数11_链接文本","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":"参数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":"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}],"loopType":1}},{"id":2,"index":4,"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,"value":"iphone","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"]}},{"id":3,"index":5,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search-btn\"]/i[1]","iframe":false,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":"3","scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[4]/div[1]/div[2]/div[1]/button[1]/i[1]","//i[contains(., '')]","/html/body/div[last()-6]/div/div[last()-2]/div/button/i"]}},{"id":4,"index":6,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[7],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[5]/div[2]/div[2]/div[1]/div[1]/div[2]/ul[1]/li/div[1]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[5]/div[2]/div[2]/div[1]/div[1]/div[2]/ul[1]/li[1]/div[1]","//div[contains(., '')]","//DIV[@class='gl-i-wrap']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div"]}},{"id":5,"index":7,"parentId":4,"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,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"参数13_链接文本","desc":"","relativeXPath":"/div[1]/a[1]","allXPaths":["/div[1]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-8]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\n\t\t\t\t \t"}],"unique_index":"/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":"参数14_链接地址","desc":"","relativeXPath":"/div[1]/a[1]","allXPaths":["/div[1]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-8]/a"],"exampleValues":[{"num":0,"value":"//item.jd.com/100038089781.html"}],"unique_index":"/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":"参数15_图片地址","desc":"","relativeXPath":"/div[1]/a[1]/img[1]","allXPaths":["/div[1]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-8]/a/img"],"exampleValues":[{"num":0,"value":"//img11.360buyimg.com/n7/jfs/t1/191960/4/28218/17255/63196f11Ee943e61b/ec9d8feadce365fe.jpg"}],"unique_index":"/div[1]/a[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":"参数16_文本","desc":"","relativeXPath":"/div[2]/span[1]","allXPaths":["/div[2]/span[1]","//span[contains(., '<')]","//SPAN[@class='ps-prev']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/span[last()-1]"],"exampleValues":[{"num":0,"value":"<"}],"unique_index":"/div[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":"参数17_文本","desc":"","relativeXPath":"/div[2]/span[2]","allXPaths":["/div[2]/span[2]","//span[contains(., '>')]","//SPAN[@class='ps-next']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/span"],"exampleValues":[{"num":0,"value":">"}],"unique_index":"/div[2]/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":"参数18_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[1]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[1]/a[1]","//a[contains(., '')]","//A[@class='curr']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-3]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数19_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[1]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[1]/a[1]","//a[contains(., '')]","//A[@class='curr']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-3]/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数20_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[1]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[1]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-3]/a/img"],"exampleValues":[{"num":0,"value":"//img11.360buyimg.com/n7/jfs/t1/191960/4/28218/17255/63196f11Ee943e61b/ec9d8feadce365fe.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[1]/a[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":"参数21_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[2]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[2]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-2]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数22_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[2]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[2]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-2]/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数23_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[2]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[2]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-2]/a/img"],"exampleValues":[{"num":0,"value":"//img11.360buyimg.com/n7/jfs/t1/145950/1/30473/21295/63196dcfEebbe2254/7b1578b98436f737.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[2]/a[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":"参数24_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[3]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[3]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-1]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[3]/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":"参数25_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[3]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[3]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-1]/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[3]/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":"参数26_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[3]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[3]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li[last()-1]/a/img"],"exampleValues":[{"num":0,"value":"//img10.360buyimg.com/n7/jfs/t1/50423/12/21455/19477/6319674cE5de04487/71457158f73abe8f.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[3]/a[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":"参数27_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[4]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[4]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[4]/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":"参数28_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[4]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[4]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[4]/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":"参数29_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[4]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[4]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-7]/div/ul/li/a/img"],"exampleValues":[{"num":0,"value":"//img13.360buyimg.com/n7/jfs/t1/58549/24/22211/18752/63196e79E30ec4e33/5f9ce38bdbacf96c.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[4]/a[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":"参数30_文本","desc":"","relativeXPath":"/div[3]/strong[1]/em[1]","allXPaths":["/div[3]/strong[1]/em[1]","//em[contains(., '¥')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-6]/strong/em"],"exampleValues":[{"num":0,"value":"¥"}],"unique_index":"/div[3]/strong[1]/em[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":"参数31_文本","desc":"","relativeXPath":"/div[3]/strong[1]/i[1]","allXPaths":["/div[3]/strong[1]/i[1]","//i[contains(., '8729.00')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-6]/strong/i"],"exampleValues":[{"num":0,"value":"8729.00"}],"unique_index":"/div[3]/strong[1]/i[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":"参数32_链接文本","desc":"","relativeXPath":"/div[4]/a[1]","allXPaths":["/div[4]/a[1]","//a[contains(., 'A')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a"],"exampleValues":[{"num":0,"value":"\n\t\t\t\t\t\t\t\tApple iPhone 14 Pro (A2892) 256GB 深空黑色 支持移动联通电信5G 双卡双待手机【大王卡】\n\t\t\t\t\t\t\t\t【好物限时购】Apple好物限量特价,限时优惠等你来购~快来抢购吧!\n\t\t\t\t\t\t\t"}],"unique_index":"/div[4]/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":"参数33_链接地址","desc":"","relativeXPath":"/div[4]/a[1]","allXPaths":["/div[4]/a[1]","//a[contains(., 'A')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a"],"exampleValues":[{"num":0,"value":"//item.jd.com/100038089781.html"}],"unique_index":"/div[4]/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":"参数34_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]","allXPaths":["/div[4]/a[1]/em[1]","//em[contains(., 'Apple iPho')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a/em"],"exampleValues":[{"num":0,"value":"Apple14Pro(A2892)256GB深空黑色支持移动联通电信5G双卡双待手机【大王卡】"}],"unique_index":"/div[4]/a[1]/em[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":"参数35_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]/font[1]","allXPaths":["/div[4]/a[1]/em[1]/font[1]","//font[contains(., 'iPhone')]","//FONT[@class='skcolor_ljg']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a/em/font"],"exampleValues":[{"num":0,"value":"iPhone"}],"unique_index":"/div[4]/a[1]/em[1]/font[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":"参数36_文本","desc":"","relativeXPath":"/div[4]/a[1]/i[1]","allXPaths":["/div[4]/a[1]/i[1]","//i[contains(., '【好物限时购】App')]","id(\"J_AD_100038089781\")","//I[@class='promo-words']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-5]/a/i"],"exampleValues":[{"num":0,"value":"【好物限时购】Apple好物限量特价,限时优惠等你来购~快来抢购吧!"}],"unique_index":"/div[4]/a[1]/i[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":"参数37_文本","desc":"","relativeXPath":"/div[5]/strong[1]","allXPaths":["/div[5]/strong[1]","//strong[contains(., '10万+条评价')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-4]/strong"],"exampleValues":[{"num":0,"value":"条评价"}],"unique_index":"/div[5]/strong[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":"参数38_链接文本","desc":"","relativeXPath":"/div[5]/strong[1]/a[1]","allXPaths":["/div[5]/strong[1]/a[1]","//a[contains(., '10万+')]","id(\"J_comment_100038089781\")","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-4]/strong/a"],"exampleValues":[{"num":0,"value":"10万+"}],"unique_index":"/div[5]/strong[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":"参数39_链接地址","desc":"","relativeXPath":"/div[5]/strong[1]/a[1]","allXPaths":["/div[5]/strong[1]/a[1]","//a[contains(., '10万+')]","id(\"J_comment_100038089781\")","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-4]/strong/a"],"exampleValues":[{"num":0,"value":"//item.jd.com/100038089781.html#comment"}],"unique_index":"/div[5]/strong[1]/a[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":"参数40_链接文本","desc":"","relativeXPath":"/div[6]/a[1]","allXPaths":["/div[6]/a[1]","//a[contains(., '关注')]","//A[@class='J_focus']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-3]/a"],"exampleValues":[{"num":0,"value":"关注"}],"unique_index":"/div[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":"参数41_链接地址","desc":"","relativeXPath":"/div[6]/a[1]","allXPaths":["/div[6]/a[1]","//a[contains(., '关注')]","//A[@class='J_focus']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-3]/a"],"exampleValues":[{"num":0,"value":"javascript:;"}],"unique_index":"/div[6]/a[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":"参数42_链接文本","desc":"","relativeXPath":"/div[7]/span[1]/a[1]","allXPaths":["/div[7]/span[1]/a[1]","//a[contains(., '中国联通京东自营旗舰')]","//A[@class='curr-shop hd-shopname']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-2]/span/a"],"exampleValues":[{"num":0,"value":"中国联通京东自营旗舰店"}],"unique_index":"/div[7]/span[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":"参数43_链接地址","desc":"","relativeXPath":"/div[7]/span[1]/a[1]","allXPaths":["/div[7]/span[1]/a[1]","//a[contains(., '中国联通京东自营旗舰')]","//A[@class='curr-shop hd-shopname']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-2]/span/a"],"exampleValues":[{"num":0,"value":"//mall.jd.com/index-1000073123.html?from=pc"}],"unique_index":"/div[7]/span[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":"参数44_文本","desc":"","relativeXPath":"/div[8]/i[1]","allXPaths":["/div[8]/i[1]","//i[contains(., '自营')]","//I[@class='goods-icons J-picon-tips J-picon-fix']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-1]/i[last()-2]"],"exampleValues":[{"num":0,"value":"自营"}],"unique_index":"/div[8]/i[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":"参数45_文本","desc":"","relativeXPath":"/div[8]/i[2]","allXPaths":["/div[8]/i[2]","//i[contains(., '券7000-1100')]","//I[@class='goods-icons4 J-picon-tips']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-1]/i[last()-1]"],"exampleValues":[{"num":0,"value":"券7000-1100"}],"unique_index":"/div[8]/i[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":"参数46_文本","desc":"","relativeXPath":"/div[8]/i[3]","allXPaths":["/div[8]/i[3]","//i[contains(., '赠')]","//I[@class='goods-icons4 J-picon-tips']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div[last()-1]/i"],"exampleValues":[{"num":0,"value":"赠"}],"unique_index":"/div[8]/i[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":"参数47_文本","desc":"","relativeXPath":"/div[9]","allXPaths":["/div[9]","//div[contains(., '海外预定')]","//DIV[@class='p-stock']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-29]/div/div"],"exampleValues":[{"num":0,"value":"海外预定"}],"unique_index":"/div[9]","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":"参数48_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[5]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[5]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li[last()-1]/a"],"exampleValues":[{"num":1,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[5]/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":"参数49_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[5]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[5]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li[last()-1]/a"],"exampleValues":[{"num":1,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[5]/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":"参数50_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[5]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[5]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li[last()-1]/a/img"],"exampleValues":[{"num":1,"value":"//img11.360buyimg.com/n7/jfs/t1/11338/10/19033/26138/635cc0a1E1ae6ecad/927d35008061c637.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[5]/a[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":"参数51_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[6]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[6]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":1,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[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":"参数52_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[6]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[6]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":1,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[6]/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":"参数53_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[6]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[6]/a[1]/img[1]","//img[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-28]/div/div[last()-7]/div/ul/li/a/img"],"exampleValues":[{"num":1,"value":"//img12.360buyimg.com/n7/jfs/t1/195608/23/33272/24575/64074bbcF2996dcca/45e38aaf1c8b37b3.jpg"}],"unique_index":"/div[2]/div[1]/ul[1]/li[6]/a[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":"参数54_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]/span[1]","allXPaths":["/div[4]/a[1]/em[1]/span[1]","//span[contains(., '拍拍')]","//SPAN[@class='p-tag']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-23]/div/div[last()-5]/a/em/span"],"exampleValues":[{"num":6,"value":"拍拍"}],"unique_index":"/div[4]/a[1]/em[1]/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":"参数55_图片地址","desc":"","relativeXPath":"/div[7]/img[1]","allXPaths":["/div[7]/img[1]","//img[contains(., '')]","//IMG[@class='shop-tag fl']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-23]/div/div[last()-2]/img"],"exampleValues":[{"num":6,"value":"//m.360buyimg.com/cc/jfs/t1/197706/29/27826/4384/63314bc6E21b4c3e9/8b4d5fc44efc5b3f.png"}],"unique_index":"/div[7]/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":"参数56_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]/font[2]","allXPaths":["/div[4]/a[1]/em[1]/font[2]","//font[contains(., 'iPhone')]","//FONT[@class='skcolor_ljg']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-22]/div/div[last()-5]/a/em/font[last()-1]"],"exampleValues":[{"num":7,"value":"iPhone"}],"unique_index":"/div[4]/a[1]/em[1]/font[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":"参数57_文本","desc":"","relativeXPath":"/div[4]/a[1]/em[1]/font[3]","allXPaths":["/div[4]/a[1]/em[1]/font[3]","//font[contains(., 'iPhone')]","//FONT[@class='skcolor_ljg']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-22]/div/div[last()-5]/a/em/font"],"exampleValues":[{"num":7,"value":"iPhone"}],"unique_index":"/div[4]/a[1]/em[1]/font[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":"参数58_文本","desc":"","relativeXPath":"/div[10]/span[1]","allXPaths":["/div[10]/span[1]","//span[contains(., '预约中')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-15]/div/div/span"],"exampleValues":[{"num":14,"value":"预约中"}],"unique_index":"/div[10]/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":"参数59_文本","desc":"","relativeXPath":"/div[10]/em[1]","allXPaths":["/div[10]/em[1]","//em[contains(., '剩余9天12时40分')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-15]/div/div/em"],"exampleValues":[{"num":14,"value":"剩余9天12时40分"}],"unique_index":"/div[10]/em[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":"参数60_链接文本","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[7]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[7]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-3]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":26,"value":"\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t"}],"unique_index":"/div[2]/div[1]/ul[1]/li[7]/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":"参数61_链接地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[7]/a[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[7]/a[1]","//a[contains(., '')]","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-3]/div/div[last()-7]/div/ul/li/a"],"exampleValues":[{"num":26,"value":"javascript:;"}],"unique_index":"/div[2]/div[1]/ul[1]/li[7]/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":"参数62_图片地址","desc":"","relativeXPath":"/div[2]/div[1]/ul[1]/li[7]/a[1]/img[1]","allXPaths":["/div[2]/div[1]/ul[1]/li[7]/a[1]/img[1]","//img[contains(., '')]","//IMG[@class='err-product']","/html/body/div[last()-11]/div/div/div[last()-1]/div/div[last()-2]/ul/li[last()-3]/div/div[last()-7]/div/ul/li/a/img"],"exampleValues":[{"num":26,"value":""}],"unique_index":"/div[2]/div[1]/ul[1]/li[7]/a[1]/img[1]","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/.temp_to_pub/EasySpider_windows_x64/execution_instances/3.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/3.json deleted file mode 100644 index 0f43e70..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/3.json +++ /dev/null @@ -1 +0,0 @@ -{"id":3,"name":"Just a moment...","url":"https://portal.ustraveldocs.com/scheduleappointment","links":"https://portal.ustraveldocs.com/scheduleappointment","create_time":"7/12/2023, 11:21:54 AM","update_time":"7/12/2023, 11:23:01 AM","version":"0.3.5","saveThreshold":10,"cloudflare":1,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"current_time","containJudge":false,"desc":"https://portal.ustraveldocs.com/scheduleappointment","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://portal.ustraveldocs.com/scheduleappointment","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://portal.ustraveldocs.com/scheduleappointment"}],"outputParameters":[{"id":0,"name":"参数2_文本","desc":"","type":"text","recordASField":1,"exampleValue":"\n 使用条款及细则 (Terms & Conditions)\n \n 在本网站所支付的所有费用均不予退还。请确保您已付款,并获得了收据号码。\n 签证不能保证进入美国。\n 签证允许外国公民进入美国口岸并提出入境申请。\n 只有美国国土安全部和美国海关与边境保护局(CBP)官员可以决定签证持有人能否入境。\n 您不能使用过期签证进入美国。当您进入美国时签证必须是有效的。\n \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":"","wait":0,"waitType":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":15,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"url":"https://portal.ustraveldocs.com/scheduleappointment","links":"https://portal.ustraveldocs.com/scheduleappointment","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":3,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"参数2_文本","desc":"","extractType":0,"relativeXPath":"/html/body/div[1]/div[1]/div[1]/form[1]/span[1]/div[1]","allXPaths":["/html/body/div[1]/div[1]/div[1]/form[1]/span[1]/div[1]","//div[contains(., '使')]","//DIV[@class='span-6 last']","/html/body/div[last()-5]/div/div/form/span/div"],"exampleValues":[{"num":0,"value":"\n 使用条款及细则 (Terms & Conditions)\n \n 在本网站所支付的所有费用均不予退还。请确保您已付款,并获得了收据号码。\n 签证不能保证进入美国。\n 签证允许外国公民进入美国口岸并提出入境申请。\n 只有美国国土安全部和美国海关与边境保护局(CBP)官员可以决定签证持有人能否入境。\n 您不能使用过期签证进入美国。当您进入美国时签证必须是有效的。\n \n "}],"unique_index":"p3h5p8qfeyljz5n60b","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/.temp_to_pub/EasySpider_windows_x64/execution_instances/4.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/4.json deleted file mode 100644 index 9f0d7ab..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/4.json +++ /dev/null @@ -1 +0,0 @@ -{"id":4,"name":"中国保险行业协会 栏目页右侧列表嵌入","url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","create_time":"7/15/2023, 7:52:19 AM","update_time":"7/15/2023, 7:52:19 AM","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"current_time","containJudge":false,"desc":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html"},{"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":"11"},{"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":"停售"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"详细信息"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,6,8,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":4,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[4,3],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"]}},{"id":6,"index":3,"parentId":4,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"],"loopType":0}},{"id":5,"index":4,"parentId":4,"type":1,"option":8,"title":"循环","sequence":[5],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr[1]","//tr[contains(., '11建信人寿保险有限')]","//TR[@class='el-table__row']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]"]}},{"id":7,"index":5,"parentId":5,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[1]/div[1]/span[1]","allXPaths":["/td[1]/div[1]/span[1]","//span[contains(., '11')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-5]/div/span"],"exampleValues":[{"num":0,"value":"11"}],"unique_index":"/td[1]/div[1]/span[1]","iframe":true,"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]/div[1]","allXPaths":["/td[2]/div[1]","//div[contains(., '建信人寿保险有限公司')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-4]/div"],"exampleValues":[{"num":0,"value":"建信人寿保险有限公司"}],"unique_index":"/td[2]/div[1]","iframe":true,"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]/div[1]","allXPaths":["/td[3]/div[1]","//div[contains(., '康乐安心两全保险')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-3]/div"],"exampleValues":[{"num":0,"value":"康乐安心两全保险"}],"unique_index":"/td[3]/div[1]","iframe":true,"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[5]/div[1]","allXPaths":["/td[5]/div[1]","//div[contains(., '停售')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-1]/div"],"exampleValues":[{"num":0,"value":"停售"}],"unique_index":"/td[5]/div[1]","iframe":true,"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[6]/div[1]/button[1]/span[1]","allXPaths":["/td[6]/div[1]/button[1]/span[1]","//span[contains(., '详细信息')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td/div/button/span"],"exampleValues":[{"num":0,"value":"详细信息"}],"unique_index":"/td[6]/div[1]/button[1]/span[1]","iframe":true,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":2,"index":6,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"is-error\")]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[2]/form[1]/div[1]/div[1]/table[1]/tbody[4]/tr[1]/td[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","//i[contains(., '')]","//I[@class='el-select__caret el-input__icon el-icon-arrow-up']","/html/body/div[last()-5]/div/div/div[last()-2]/form/div[last()-1]/div/table/tbody[last()-1]/tr/td/div/div/div/div/div/div[last()-1]/div/span/span/i"]}},{"id":-1,"index":7,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}},{"id":3,"index":8,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}}]} \ No newline at end of file diff --git a/.temp_to_pub/EasySpider_windows_x64/execution_instances/5.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/5.json deleted file mode 100644 index 9b1ad0d..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/5.json +++ /dev/null @@ -1 +0,0 @@ -{"id":5,"name":"中国保险行业协会 栏目页右侧列表嵌入","url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","create_time":"7/15/2023, 7:52:19 AM","update_time":"7/15/2023, 7:52:19 AM","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"current_time","containJudge":false,"desc":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html"},{"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":"11"},{"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":"停售"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"详细信息"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,6,8,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":4,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[4,3],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"]}},{"id":6,"index":3,"parentId":4,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"],"loopType":0}},{"id":5,"index":4,"parentId":4,"type":1,"option":8,"title":"循环","sequence":[5],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr[1]","//tr[contains(., '11建信人寿保险有限')]","//TR[@class='el-table__row']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]"]}},{"id":7,"index":5,"parentId":5,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[1]/div[1]/span[1]","allXPaths":["/td[1]/div[1]/span[1]","//span[contains(., '11')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-5]/div/span"],"exampleValues":[{"num":0,"value":"11"}],"unique_index":"/td[1]/div[1]/span[1]","iframe":true,"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]/div[1]","allXPaths":["/td[2]/div[1]","//div[contains(., '建信人寿保险有限公司')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-4]/div"],"exampleValues":[{"num":0,"value":"建信人寿保险有限公司"}],"unique_index":"/td[2]/div[1]","iframe":true,"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]/div[1]","allXPaths":["/td[3]/div[1]","//div[contains(., '康乐安心两全保险')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-3]/div"],"exampleValues":[{"num":0,"value":"康乐安心两全保险"}],"unique_index":"/td[3]/div[1]","iframe":true,"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[5]/div[1]","allXPaths":["/td[5]/div[1]","//div[contains(., '停售')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-1]/div"],"exampleValues":[{"num":0,"value":"停售"}],"unique_index":"/td[5]/div[1]","iframe":true,"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[6]/div[1]/button[1]/span[1]","allXPaths":["/td[6]/div[1]/button[1]/span[1]","//span[contains(., '详细信息')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td/div/button/span"],"exampleValues":[{"num":0,"value":"详细信息"}],"unique_index":"/td[6]/div[1]/button[1]/span[1]","iframe":true,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":2,"index":6,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"is-error\")]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[2]/form[1]/div[1]/div[1]/table[1]/tbody[4]/tr[1]/td[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","//i[contains(., '')]","//I[@class='el-select__caret el-input__icon el-icon-arrow-up']","/html/body/div[last()-5]/div/div/div[last()-2]/form/div[last()-1]/div/table/tbody[last()-1]/tr/td/div/div/div/div/div/div[last()-1]/div/span/span/i"]}},{"id":-1,"index":7,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}},{"id":3,"index":8,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}}]} \ No newline at end of file diff --git a/.temp_to_pub/EasySpider_windows_x64/execution_instances/6.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/6.json deleted file mode 100644 index 71493fd..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/6.json +++ /dev/null @@ -1 +0,0 @@ -{"id":6,"name":"中国保险行业协会 栏目页右侧列表嵌入","url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","create_time":"7/15/2023, 7:52:19 AM","update_time":"7/15/2023, 7:52:19 AM","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"current_time","containJudge":false,"desc":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html"},{"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":"11"},{"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":"停售"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"详细信息"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,6,8,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":4,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[4,3],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"]}},{"id":6,"index":3,"parentId":4,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"],"loopType":0}},{"id":5,"index":4,"parentId":4,"type":1,"option":8,"title":"循环","sequence":[5],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr[1]","//tr[contains(., '11建信人寿保险有限')]","//TR[@class='el-table__row']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]"]}},{"id":7,"index":5,"parentId":5,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[1]/div[1]/span[1]","allXPaths":["/td[1]/div[1]/span[1]","//span[contains(., '11')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-5]/div/span"],"exampleValues":[{"num":0,"value":"11"}],"unique_index":"/td[1]/div[1]/span[1]","iframe":true,"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]/div[1]","allXPaths":["/td[2]/div[1]","//div[contains(., '建信人寿保险有限公司')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-4]/div"],"exampleValues":[{"num":0,"value":"建信人寿保险有限公司"}],"unique_index":"/td[2]/div[1]","iframe":true,"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]/div[1]","allXPaths":["/td[3]/div[1]","//div[contains(., '康乐安心两全保险')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-3]/div"],"exampleValues":[{"num":0,"value":"康乐安心两全保险"}],"unique_index":"/td[3]/div[1]","iframe":true,"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[5]/div[1]","allXPaths":["/td[5]/div[1]","//div[contains(., '停售')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-1]/div"],"exampleValues":[{"num":0,"value":"停售"}],"unique_index":"/td[5]/div[1]","iframe":true,"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[6]/div[1]/button[1]/span[1]","allXPaths":["/td[6]/div[1]/button[1]/span[1]","//span[contains(., '详细信息')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td/div/button/span"],"exampleValues":[{"num":0,"value":"详细信息"}],"unique_index":"/td[6]/div[1]/button[1]/span[1]","iframe":true,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":2,"index":6,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"is-error\")]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[2]/form[1]/div[1]/div[1]/table[1]/tbody[4]/tr[1]/td[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","//i[contains(., '')]","//I[@class='el-select__caret el-input__icon el-icon-arrow-up']","/html/body/div[last()-5]/div/div/div[last()-2]/form/div[last()-1]/div/table/tbody[last()-1]/tr/td/div/div/div/div/div/div[last()-1]/div/span/span/i"]}},{"id":-1,"index":7,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}},{"id":3,"index":8,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}}]} \ No newline at end of file diff --git a/.temp_to_pub/EasySpider_windows_x64/execution_instances/7.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/7.json deleted file mode 100644 index b1a0b07..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/7.json +++ /dev/null @@ -1 +0,0 @@ -{"id":7,"name":"中国保险行业协会 栏目页右侧列表嵌入","url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","create_time":"7/15/2023, 7:52:19 AM","update_time":"7/15/2023, 8:00:02 AM","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"current_time","containJudge":false,"desc":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html"},{"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":"11"},{"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":"停售"},{"id":4,"name":"参数5_文本","desc":"","type":"text","recordASField":1,"exampleValue":"详细信息"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,6,8,2],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"url":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","links":"https://www.iachina.cn/art/2017/6/29/art_71_45682.html","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":4,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[4,3],"isInLoop":false,"position":3,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"]}},{"id":6,"index":3,"parentId":4,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"btn-next\")]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":1,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[2]/button[2]","//button[contains(., '')]","//BUTTON[@class='btn-next']","/html/body/div[last()-4]/div/div/div/div/div[last()-1]/button"],"loopType":0}},{"id":5,"index":4,"parentId":4,"type":1,"option":8,"title":"循环","sequence":[5],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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[4]/div[1]/div[1]/div[3]/table[1]/tbody[1]/tr[1]","//tr[contains(., '11建信人寿保险有限')]","//TR[@class='el-table__row']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]"]}},{"id":7,"index":5,"parentId":5,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[1]/div[1]/span[1]","allXPaths":["/td[1]/div[1]/span[1]","//span[contains(., '11')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-5]/div/span"],"exampleValues":[{"num":0,"value":"11"}],"unique_index":"/td[1]/div[1]/span[1]","iframe":true,"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]/div[1]","allXPaths":["/td[2]/div[1]","//div[contains(., '建信人寿保险有限公司')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-4]/div"],"exampleValues":[{"num":0,"value":"建信人寿保险有限公司"}],"unique_index":"/td[2]/div[1]","iframe":true,"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]/div[1]","allXPaths":["/td[3]/div[1]","//div[contains(., '康乐安心两全保险')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-3]/div"],"exampleValues":[{"num":0,"value":"康乐安心两全保险"}],"unique_index":"/td[3]/div[1]","iframe":true,"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[5]/div[1]","allXPaths":["/td[5]/div[1]","//div[contains(., '停售')]","//DIV[@class='cell el-tooltip']","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td[last()-1]/div"],"exampleValues":[{"num":0,"value":"停售"}],"unique_index":"/td[5]/div[1]","iframe":true,"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[6]/div[1]/button[1]/span[1]","allXPaths":["/td[6]/div[1]/button[1]/span[1]","//span[contains(., '详细信息')]","/html/body/div[last()-5]/div/div/div/div/div[last()-2]/div[last()-1]/table/tbody/tr[last()-9]/td/div/button/span"],"exampleValues":[{"num":0,"value":"详细信息"}],"unique_index":"/td[6]/div[1]/button[1]/span[1]","iframe":true,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":2,"index":6,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"is-error\")]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[1]/div[1]/div[1]/div[2]/form[1]/div[1]/div[1]/table[1]/tbody[4]/tr[1]/td[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]/span[1]/i[1]","//i[contains(., '')]","//I[@class='el-select__caret el-input__icon el-icon-arrow-up']","/html/body/div[last()-5]/div/div/div[last()-2]/form/div[last()-1]/div/table/tbody[last()-1]/tr/td/div/div/div/div/div/div[last()-1]/div/span/span/i"]}},{"id":-1,"index":7,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}},{"id":3,"index":8,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"allXPaths":["/html/body/div[3]/div[1]/div[1]/ul[1]/li[1]","//li[contains(., '人寿保险')]","//LI[@class='el-select-dropdown__item']","/html/body/div/div[last()-1]/div[last()-2]/ul/li[last()-4]"]}}]} \ No newline at end of file diff --git a/.temp_to_pub/EasySpider_windows_x64/execution_instances/8.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/8.json deleted file mode 100644 index d25b3bd..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/8.json +++ /dev/null @@ -1 +0,0 @@ -{"id":8,"name":"Dynamic Iframe","url":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","links":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","create_time":"7/8/2023, 8:43:14 AM","update_time":"7/8/2023, 8:45:16 AM","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"mysql","saveName":"地震Info","containJudge":false,"desc":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history"},{"id":1,"name":"inputText_1","nodeName":"输入文字","nodeId":3,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"text","exampleValue":"1","value":"1"},{"id":2,"name":"loopTimes_循环_2","nodeId":5,"nodeName":"循环","desc":"循环循环执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"double","recordASField":1,"exampleValue":"5.0"},{"id":1,"name":"参数2_文本","desc":"","type":"datetime","recordASField":1,"exampleValue":"2023-06-2912:58:00"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.10"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"71.85"},{"id":4,"name":"参数5_文本","desc":"","type":"int","recordASField":1,"exampleValue":"140"},{"id":5,"name":"参数1_页面标题","desc":"","type":"text","recordASField":1,"exampleValue":"塔吉克斯坦"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20230629125800.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":"参考位置"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,3,4,5],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"url":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","links":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":-1,"index":2,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":6,"relative":false,"name":"参数1_页面标题","desc":"","extractType":0,"relativeXPath":"/html/body/iframe[1]","allXPaths":["/html/body/iframe[1]","//iframe[contains(., '')]","id(\"myIframe\")","/html/body/iframe[last()-1]"],"exampleValues":[{"num":0,"value":"Dynamic Iframe"}],"unique_index":"14hqdlhesn6ljt6eja8","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":false,"name":"参数1_链接文本","desc":"","extractType":0,"relativeXPath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","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"],"exampleValues":[{"num":0,"value":"查询"}],"unique_index":"gxhcdetmmgcljt6evon","iframe":true,"default":"","paraType":"text","recordASField":0,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":5,"relative":false,"name":"参数1_页面网址","desc":"","extractType":0,"relativeXPath":"/html/body/iframe[1]","allXPaths":["/html/body/iframe[1]","//iframe[contains(., '')]","id(\"myIframe\")","/html/body/iframe[last()-1]"],"exampleValues":[{"num":0,"value":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history"}],"unique_index":"e663xi39mb4ljt6em4l","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}},{"id":2,"index":3,"parentId":0,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"weidu1\"]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"value":"1","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":3,"index":4,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"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":4,"index":5,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[7,6],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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":6,"index":6,"parentId":4,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[10]/a[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"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":5,"index":7,"parentId":4,"type":1,"option":8,"title":"循环","sequence":[8],"isInLoop":true,"position":0,"parameters":{"history":5,"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":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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":7,"index":8,"parentId":5,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[1]","allXPaths":["/td[1]","//td[contains(., '5.0')]","/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":"5.0"}],"unique_index":"/td[1]","iframe":true,"default":"8.8","paraType":"double","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-06-29')]","/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-06-2912:58:00"}],"unique_index":"/td[2]","iframe":true,"default":"2020-02-08 00:01:02","paraType":"datetime","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(., '37.10')]","/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.10"}],"unique_index":"/td[3]","iframe":true,"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(., '71.85')]","/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":"71.85"}],"unique_index":"/td[4]","iframe":true,"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(., '140')]","/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":"140"}],"unique_index":"/td[5]","iframe":true,"default":"","paraType":"int","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数1_页面标题","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":true,"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/CC20230629125800.html"}],"unique_index":"/td[6]/a[1]","iframe":true,"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":true,"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":true,"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":true,"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":true,"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":true,"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":true,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":-1,"index":9,"parentId":5,"type":2,"option":9,"title":"判断条件","sequence":[10],"isInLoop":true,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0}},{"id":-1,"parentId":9,"index":10,"type":3,"option":10,"title":"条件分支","sequence":[16],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":"3","value":"日本","code":"","waitTime":0},"position":0},{"id":-1,"parentId":9,"index":11,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":1},{"index":12,"id":-1,"parentId":9,"type":3,"option":10,"title":"条件分支","sequence":[13],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":0},{"id":-1,"index":13,"parentId":10,"type":2,"option":9,"title":"条件分支","sequence":[14,15],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0}},{"id":-1,"parentId":13,"index":14,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":0},{"id":-1,"parentId":13,"index":15,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":1},{"id":-1,"index":16,"parentId":11,"type":0,"option":5,"title":"Break","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,"codeMode":"3","code":"","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":-1,"index":17,"parentId":4,"type":2,"option":9,"title":"判断条件","sequence":[18],"isInLoop":true,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0}},{"id":-1,"parentId":6,"index":18,"type":3,"option":10,"title":"条件分支","sequence":[20],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":"5","value":"哥伦比亚","code":"return document.body.innerText.includes(\"哥伦比亚\")","waitTime":0},"position":0},{"id":-1,"parentId":7,"index":19,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":1},{"id":-1,"index":20,"parentId":9,"type":0,"option":5,"title":"退出循环","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"codeMode":"3","code":"","waitTime":0,"recordASField":0,"paraType":"text"}},{"index":21,"id":-1,"parentId":6,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":0}]} \ No newline at end of file diff --git a/.temp_to_pub/EasySpider_windows_x64/execution_instances/9.json b/.temp_to_pub/EasySpider_windows_x64/execution_instances/9.json deleted file mode 100644 index 9ed449d..0000000 --- a/.temp_to_pub/EasySpider_windows_x64/execution_instances/9.json +++ /dev/null @@ -1 +0,0 @@ -{"id":9,"name":"Dynamic Iframe","url":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","links":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","create_time":"7/8/2023, 8:43:14 AM","update_time":"7/15/2023, 8:05:33 AM","version":"0.3.5","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"outputFormat":"xlsx","saveName":"地震Info","containJudge":false,"desc":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","inputParameters":[{"id":0,"name":"urlList_0","nodeId":1,"nodeName":"打开网页","value":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","desc":"要采集的网址列表,多行以\\n分开","type":"text","exampleValue":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history"},{"id":1,"name":"inputText_1","nodeName":"输入文字","nodeId":3,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"text","exampleValue":"1","value":"1"},{"id":2,"name":"loopTimes_循环_2","nodeId":5,"nodeName":"循环","desc":"循环循环执行的次数(0代表无限循环)","type":"int","exampleValue":0,"value":0}],"outputParameters":[{"id":0,"name":"参数1_文本","desc":"","type":"double","recordASField":1,"exampleValue":"5.0"},{"id":1,"name":"参数2_文本","desc":"","type":"datetime","recordASField":1,"exampleValue":"2023-06-2912:58:00"},{"id":2,"name":"参数3_文本","desc":"","type":"text","recordASField":1,"exampleValue":"37.10"},{"id":3,"name":"参数4_文本","desc":"","type":"text","recordASField":1,"exampleValue":"71.85"},{"id":4,"name":"参数5_文本","desc":"","type":"int","recordASField":1,"exampleValue":"140"},{"id":5,"name":"参数1_页面标题","desc":"","type":"text","recordASField":1,"exampleValue":"塔吉克斯坦"},{"id":6,"name":"参数7_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://news.ceic.ac.cn/CC20230629125800.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":"参考位置"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,3,4,5],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","wait":0,"waitType":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,"url":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","links":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":-1,"index":2,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":6,"relative":false,"name":"参数1_页面标题","desc":"","extractType":0,"relativeXPath":"/html/body/iframe[1]","allXPaths":["/html/body/iframe[1]","//iframe[contains(., '')]","id(\"myIframe\")","/html/body/iframe[last()-1]"],"exampleValues":[{"num":0,"value":"Dynamic Iframe"}],"unique_index":"14hqdlhesn6ljt6eja8","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":false,"name":"参数1_链接文本","desc":"","extractType":0,"relativeXPath":"/html/body/div[1]/div[3]/div[1]/div[1]/div[1]/form[1]/div[5]/a[1]","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"],"exampleValues":[{"num":0,"value":"查询"}],"unique_index":"gxhcdetmmgcljt6evon","iframe":true,"default":"","paraType":"text","recordASField":0,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":0,"contentType":5,"relative":false,"name":"参数1_页面网址","desc":"","extractType":0,"relativeXPath":"/html/body/iframe[1]","allXPaths":["/html/body/iframe[1]","//iframe[contains(., '')]","id(\"myIframe\")","/html/body/iframe[last()-1]"],"exampleValues":[{"num":0,"value":"http://localhost:8074/taskGrid/test_pages/iframe.html?address=http://www.ceic.ac.cn/history"}],"unique_index":"e663xi39mb4ljt6em4l","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}},{"id":2,"index":3,"parentId":0,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":false,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"weidu1\"]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"value":"1","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":3,"index":4,"parentId":0,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[@id=\"search\"]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"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":4,"index":5,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[7,6],"isInLoop":false,"position":3,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[last()-1]/a[1]","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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":6,"index":6,"parentId":4,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":5,"tabIndex":-1,"useLoop":true,"xpath":"//*[contains(@class, \"pagination\")]/ul[1]/li[10]/a[1]","iframe":true,"wait":2,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"clickWay":0,"maxWaitTime":10,"paras":[],"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":5,"index":7,"parentId":4,"type":1,"option":8,"title":"循环","sequence":[8],"isInLoop":true,"position":0,"parameters":{"history":5,"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":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":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":7,"index":8,"parentId":5,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":5,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"paras":[{"nodeType":0,"contentType":1,"relative":true,"name":"参数1_文本","desc":"","relativeXPath":"/td[1]","allXPaths":["/td[1]","//td[contains(., '5.0')]","/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":"5.0"}],"unique_index":"/td[1]","iframe":true,"default":"8.8","paraType":"double","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-06-29')]","/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-06-2912:58:00"}],"unique_index":"/td[2]","iframe":true,"default":"2020-02-08 00:01:02","paraType":"datetime","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(., '37.10')]","/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.10"}],"unique_index":"/td[3]","iframe":true,"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(., '71.85')]","/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":"71.85"}],"unique_index":"/td[4]","iframe":true,"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(., '140')]","/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":"140"}],"unique_index":"/td[5]","iframe":true,"default":"","paraType":"int","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0},{"nodeType":1,"contentType":0,"relative":true,"name":"参数1_页面标题","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":true,"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/CC20230629125800.html"}],"unique_index":"/td[6]/a[1]","iframe":true,"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":true,"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":true,"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":true,"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":true,"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":true,"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":true,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":-1,"index":9,"parentId":5,"type":2,"option":9,"title":"判断条件","sequence":[10],"isInLoop":true,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0}},{"id":-1,"parentId":9,"index":10,"type":3,"option":10,"title":"条件分支","sequence":[16],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":"3","value":"日本","code":"","waitTime":0},"position":0},{"id":-1,"parentId":9,"index":11,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":1},{"index":12,"id":-1,"parentId":9,"type":3,"option":10,"title":"条件分支","sequence":[13],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":0},{"id":-1,"index":13,"parentId":10,"type":2,"option":9,"title":"条件分支","sequence":[14,15],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0}},{"id":-1,"parentId":13,"index":14,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":0},{"id":-1,"parentId":13,"index":15,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":1},{"id":-1,"index":16,"parentId":11,"type":0,"option":5,"title":"Break","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,"codeMode":"3","code":"","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":-1,"index":17,"parentId":4,"type":2,"option":9,"title":"判断条件","sequence":[18],"isInLoop":true,"position":1,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0}},{"id":-1,"parentId":6,"index":18,"type":3,"option":10,"title":"条件分支","sequence":[20],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":"5","value":"哥伦比亚","code":"return document.body.innerText.includes(\"哥伦比亚\")","waitTime":0},"position":0},{"id":-1,"parentId":7,"index":19,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":1},{"id":-1,"index":20,"parentId":9,"type":0,"option":5,"title":"退出循环","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":true,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"codeMode":"3","code":"","waitTime":0,"recordASField":0,"paraType":"text"}},{"index":21,"id":-1,"parentId":6,"type":3,"option":10,"title":"条件分支","sequence":[],"isInLoop":true,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"class":0,"value":"","code":"","waitTime":0},"position":0}]} \ No newline at end of file diff --git a/.temp_to_pub/EasySpider_windows_x64/tasks/205.json b/.temp_to_pub/EasySpider_windows_x64/tasks/205.json new file mode 100644 index 0000000..69fe2d0 --- /dev/null +++ b/.temp_to_pub/EasySpider_windows_x64/tasks/205.json @@ -0,0 +1 @@ +{"id":205,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"8/10/2023, 6:19:22 PM","update_time":"8/10/2023, 6:35:26 PM","version":"0.5.0","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"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":"loopText_1","nodeId":4,"nodeName":"循环","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"1~2\n3~4","value":"1~2\n3~4"},{"id":2,"name":"inputText_2","nodeName":"输入文字","nodeId":12,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"text","exampleValue":"Field[\"参数2_链接地址\"]+Field[\"自定义操作2\"]","value":"Field[\"参数2_链接地址\"]+Field[\"自定义操作2\"]"}],"outputParameters":[{"id":0,"name":"参数1_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"手机"},{"id":1,"name":"参数2_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://shouji.jd.com/"},{"id":2,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":3,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":4,"name":"自定义操作2","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,7,4,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.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":5,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[3,13,12],"isInLoop":false,"position":4,"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,"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]/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]"]}},{"id":9,"index":3,"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,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"参数1_链接文本","desc":"","extractType":0,"relativeXPath":"","allXPaths":"","exampleValues":[{"num":0,"value":"手机"}],"unique_index":"hxrjjymdhcll50bpgx","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":"","allXPaths":"","exampleValues":[{"num":0,"value":"https://shouji.jd.com/"}],"unique_index":"hxrjjymdhcll50bpgx","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":3,"index":4,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[6,5,14],"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~2\n3~4","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":7,"index":5,"parentId":3,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":3,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":1,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"","index":1,"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"]}},{"id":6,"index":6,"parentId":3,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":true,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":1,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"","index":2}},{"id":2,"index":7,"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,"codeMode":"5","code":"self.a = 15","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":4,"index":8,"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,"codeMode":"5","code":"print(self.a, \"sdf---------------\")\nself.a += 222\nprint(self.a, \"sdf---------------\")","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":-1,"index":9,"parentId":0,"type":2,"option":9,"title":"判断条件","sequence":[10,11],"isInLoop":false,"position":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}},{"id":-1,"parentId":6,"index":10,"type":3,"option":10,"title":"条件分支","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":0,"value":"","code":"","waitTime":0},"position":0},{"id":-1,"parentId":6,"index":11,"type":3,"option":10,"title":"条件分支","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":0,"value":"","code":"","waitTime":0},"position":1},{"id":11,"index":12,"parentId":5,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"Field[\"参数2_链接地址\"]+Field[\"自定义操作2\"]","index":0}},{"id":10,"index":13,"parentId":5,"type":0,"option":5,"title":"自定义操作2","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,"codeMode":"6","code":"str(self.a) + \"TEST\"","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":8,"index":14,"parentId":3,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":true,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":1,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"0","index":0}}]} \ No newline at end of file diff --git a/.temp_to_pub/EasySpider_windows_x64/tasks/206.json b/.temp_to_pub/EasySpider_windows_x64/tasks/206.json new file mode 100644 index 0000000..baef101 --- /dev/null +++ b/.temp_to_pub/EasySpider_windows_x64/tasks/206.json @@ -0,0 +1 @@ +{"id":206,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"","update_time":"8/10/2023, 6:46:45 PM","version":"0.5.0","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"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":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":1,"name":"自定义操作2","desc":"自定义操作返回的数据","type":"text","recordASField":1,"exampleValue":""},{"id":2,"name":"自定义参数_1","desc":"","type":"text","recordASField":0,"exampleValue":"自定义值"},{"id":3,"name":"自定义参数_2","desc":"","type":"text","recordASField":1,"exampleValue":"自定义值"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,4,5,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://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":4,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[6],"isInLoop":false,"position":3,"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,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":""}},{"id":-1,"index":3,"parentId":4,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//a[Field[\"自定义操作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":[],"allXPaths":"","loopType":1}},{"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,"codeMode":"5","code":"self.t = 2","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":3,"index":5,"parentId":0,"type":0,"option":5,"title":"自定义操作2","sequence":[],"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,"clear":0,"codeMode":"6","code":"self.t","waitTime":0,"recordASField":1,"paraType":"text"}},{"id":6,"index":6,"parentId":4,"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":false,"paras":[{"nodeType":0,"contentType":0,"relative":true,"name":"自定义参数_1","desc":"","extractType":0,"relativeXPath":"//a[Field[\"自定义操作2\"]]","recordASField":0,"allXPaths":[],"exampleValues":[{"num":0,"value":"自定义值"}],"default":"","beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0,"paraType":"text"}]}},{"id":-1,"index":7,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":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,"clear":0,"paras":[]}},{"id":5,"index":8,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"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,"clear":true,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"自定义参数_2","desc":"","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"}]}}]} \ No newline at end of file diff --git a/ElectronJS/EasySpider_en.crx b/ElectronJS/EasySpider_en.crx index a044884e3bf146be188c176f1bde8e7c931ad561..65398949b45d864dddf8f37f46526763091acb1a 100644 GIT binary patch delta 1318 zcmYMudpOez7zc1azZphoXlOfzBsNwOiq#ZRDr?1_SR=RGDs*r*=NQ|L%SoL=ba6?J z$Ck@x!^9-dTu!BS>X{a~l}kj&(OeVGbL^?}-{<>%-}iam&%N58d$q6cW{8G#E6Lf1 zyUdR{dOz`dkZQD%#Yp%2sa3s5DnN<$~Ucj5s zCMumqkqAu-{lXlnZKC(3X@xDNd^zgqktYiO>F~UlB>KG!F~WS00xH9X%}YBRhHDpR zVRzh~`S&4AMG<+%tqknG_4`p|`1KuEVMy8@{@5;q5qE&VU>p?LvuBX=XG-CQvPj|% zkGxMWyQE#5(Ky*y@(AqmLc#R;AlGg)UjYl&RyOyi&gJw!PH0Y-QxtZ0qTBiw7Qp+Y znE85KRN{O{{_S5>@BK8~wZ&A|IPK^o>S{JEseFIuv*rL2g<SWf##D9%*a- zVQcjfyOF1c$*GS=-egY_&&pTqf@broy%_IqZC~N41Z%&_y*@T_@`S~TlZRRpXN_G~ zbVYD{x52@8QYIrLiyX^LYUEycgvvysK8B@iyL!M9H^HxOMQEGT)Th=j!xa_tVVKt$ zm>g%{uEfqb#{-Aj5ygw@=~f-wqIenyWnRmRy|7N%Y|=zobgIfrG9o+oEe(qgFXKR| zuS^DS-D@oR6|BO-^F8P}k17bOp(OG8?^j)M+?!a&^9hGuRS-}C;Hi)#Y}Lh6qecqS zsSiTtrlDnNV>3}Fx=$|~vvb`!D?xqR=91Q?OA&vkO2;A4S31Br+@-wU)!r|44jV!H%5zBLv1ZiUq zxNr$-P1|*ASVuS`$JzyzKlE`35y!N8`Rqd`ES4#N;JkDGdZs`+kvn6vhUV)RhIc#g z{aO$oqNe-iM{EUqf1FXlChi~7FSNVK&|s^5Nt>cnp1hY)!4pI4*=MBVH77XnVtoe< z+{O00azB^cvIcrC9_nsgcbZY!?&4&j-d~V572$(e{_Uf9)or>Z!@AaUg^Pps0IJB? zerk!I0^1@VOxQJtU7YP6XHnJa2fp~HxX4m!&htD0>f*~oSSQ@XvTKor3*)o5haYM? zi8mHX_>L0(7wavaQxU?IZtpwM;;)cqBog0nAuNzCA|HpKtC}+HOyKE z#w1E0sYVN|lGC zc~T4qyeDZhMmx+n%t496#K40IVCdDrr$VzrIJ-;CoQ1$)dVoo@WcT3nCH>g5f)u4=X3XY)3n4rGfENEEEKSafOCg|v&#?f35O z_jY-squ(=^cbVV!eb1ktT<~>08~2AEou0k#YMOIcqr_fz-keqL-H|+{^kdwo#j0Nq z$u8Wt;bvXvjolkfG?jwy>RTF{1@nBpACaHS?$()K*sr!wOnK_Roy+U9TfQAy>9St>9J^k%Z8vMG zZ02XX2l6FZl7CmN&8o@qj&#j2UYU|7zkK((7rR1)f1X$`SZ3&TcdFvo@3-XsCNG^O ztCxSyFT-D)RGS4#nU8Zq$mg+>E=w+$QvCi*er`A8(6gQiRnUR4}sDY)OX{7>l&C(oo z1-S)sXJafAzn3Py^q$VyFk$HrvlW?DnY^!$6~yrVs`w=gUB+-xY>Glb_$CpyjQYCX-LK^LmHb~E zBvRAXH~-Jyrwj))<~Te!cDhO98{<*mx6OVIwjr}Myn_qp3kB?xIL)g3gw1rBv68q< z4{w_3DW9P04Ks2#3#1(it{0EKd2IprHWz&^rTP1qG-ikGF|F^dQaZfq;w?@Wr%(6# z$_{%dJ+L`__N$lT)(cavE7fJDbT2x6Eqp(}(82ilccL?wNIcvdBK_!A#qLGZoZ8a; zHH&ndeuWoUT=5YPWDVSsG~>=O$3>G0d9NR1kWILEGv)tGtD98}hknKfdD`9H;b|Nn z`N8Z`O3~{0d%h<7)egmX*Vmihi~F2yHM>WZbF)Vwuko#zpRyH^H5nYQO*dOUep{YSyMZ)hrJrSSIH$kCTWkl3Hh^^jzTh&(n&n3)@fIOD^ZFZnml1X!qVE$SwE~ z*T=7R_w#Qp6KuV;yy+v05SM`9e_MmBUq%u3#@$QPlTHN(cr&wzFmP~iFobx24ci>g za@d0f#G3pvTV}J9?|eQ4k1^&6KbW`qWp=YTgjLYIoE5^7?sQRys7>B*49sZO-Po?X zk#W23Mkd=#u*mj2DP{*w2y>G%^9x1@bDk=5CJUH3om-397Q*t;Vzz;>df==xa2Ag? ovpGc8U7Oh%!s^pzhPZwDEp28;h?u+%vpl?#90%}i-(g!q<3eP*>}1oWqIR;*#L{q)AB!wo(lx|-q@=PKw`^!EkyM(~ zR>+Sf;`*hI86%#CxmwOGKjv3{6hgZvd#?NM^?rXopXd2}Q0RY9=<~KS-*PL*0lv`l z#Ww6UVxC>0Osd}1$?;%KT}lARzmElmpmcQP20|6w{kqRyIH+UR0nxy?F!zgj`64-F zi+EVsWUM2ZE~WU58z-f!osKV@t?o&r*7@4?n6$Re=Tz{fdF7ct<`ouHI9R=kZ9QW< z-j?vJu5as2D%AxQ%T(g3G)Q=4LsnB`zmmz3J2WpM3AdYfVDNS5KHO(rm8;&i7I%f= zCDGz#a|$hTUr27S2kQM{8#(*V57v+_n25l)eH7~Zvi~|heN1x2GXd=9@({VI(_ylJjL(`i+KCBe@yzZH{K^^g?94UMLAfzE& zC-6w2%gy0QWnDWs=|(221k`S~@3ngrdFrIlIOR>plYl}uRY!Xc`QR2m-|x$4uvC(> zX2uOU!0eXuU1oC&ahAWb+pQd!g7iZm^zoVs8L*3ioU8fUcOpl%s3Sd+giaI_ISx?+ z#dJ}8e6S~L!Fg~;-!@bHFGCO1gw2LZq!F!CZ)kkv!blc@90p33I3 zA5{trX-&}|Gdf=+GrEcvtujgoq-oL{=gEu(67R^yvySwUdZH0Xh)zqaDp~HRZGb~k z@KXhZaAo){+rzgv17b)w%IHA7lt+nVUPRiU@DE``sc2?dl~dco3~mZ=8E?>K-pMgr zGNgwh=9xf*jZCujV?n}(yW+c~WpFXrvfpR;DtxY>_$ORoS6s9{b*y&$cQv0$i9w*wc2^57sjehz!k^lk+vl{3F_01_l*_?O7iOg|&`x|BM|twAB4@ zX(AFqn0~Eze3Tsg%o;j88RL)LjGt_IoZYEB1u~5Q4Vl=#9iHQC_ecJG4J-qUO>Q{p zj%FUa_u)Kx$N3$bRzHNStxvq@{H0GuJe}88`s}yxG*kz)th&>WPcAHCo~p14qu6qa z&p1Dtu-IpTIr;M31u_yhulw%7-jjTO^Km%B8S?6B`eKn&P(lpka+fauM9MDGZO5ws z*W=Gb?!+LzqTXPwrA=esB`W4=@!r9h`A&8kMd~$rKi|~a{Bs^oqjZe9r@_s;QpS`y z-eF$d3VRI<(J&y_O|x{|&l4`pVs@X4;RyO)s*6M^Q&1$rNV?}jYCw?bKrWEEiZ+u` zU@EJOoz=nC`T7yz#o2?Mxj#rY=b oHzBaVPVLkK3+&M<0}E(>&+Ekk1Z}t89@wuH!~VaEQhUJTUtDim`Tzg` delta 1318 zcmYMueKgYx7zc2>zpa?OBt>3sWh%8DT8Uv>;d(967+up@LMAWUB}v#qvP@nMHoI&S zxpMO^hs?{o-#A*h@;a-KapQ_Kl)2~Hx!wOh-|zE0=RC_}dzQ!cWSpUuO`bj6zzi8? zU^Z4P$%ondr@7s~rZy^*9lrUzW2Pn*p*?B2eO!O`n^y;>M-0M#?0qbXE9vF=u)YYJ z24b^HKzW~ypzv%bR+KSb3X1LO!`LlW^fWYkN_OKLSlbK%f;anI)zFY(Y@?N#9VArt z=2qmPlH%L8D+4)kw5MqzNNx>Q&m)x~Taf|Bb}L{ye^zJPxmzu*x#! z)e}mLZ#pjAX0@*+*ah=*Nh}9OOi9H1`>JOK*)xF**{5sT#++VeOm<6z2h#Pl<*GIV zwwhtYPUT<93di;m#0M)q zci$*G#HvoOaw;F`qIl`kM}h?UqCsw3B>g2!mecin;|8Bvx~**x;}kfb(FJ0?SPhKcoD|$Z5$Er@n`)h#rJsw%;Dtt|wrH_hi${-=s&O z@sQJ}UIgHBO_o#UmA5^jrK~D*X@-xO(>a4B<@2bQkgh*X=y1H57?X+4M0XVC@20I4^Y;@io7Eo$DAdH#&FUKQD#m-VO<=MO$o7Hk`1Gcq6pZr>5t* zO@+T^Zg;3K!bV6HYmW;)FMd9dBe4%&j(2v(`#!UcN;5cieL@1W&|A*iS&Cthz9r)=Q_ zj?qIgcduv#vr411q2VBjWn5uQuK6>m0?+inWAP0hpI+mWj4DA%re--{XA5Rj61K*Hj2DbSlX&l?*s>bj z5UY_?HyLKA;6FHIMz{ZH5BbCENuI8-vw}w?7!eM(xKF`jc6CP{rAC(TI5bQ$u74;yDPN=C*^&hhSjof=G>g1f_JG{I zJ&8Ua^i;OuLT3v)&W;@+Mp3|~&PtlFO~1GA_2S>2act$)C42&FK-H5{=a`Yl10iIu842&NTd8gr z0I;TlqN1Y0l?!X0wM1}-Blurs%?In%+PLsk|4$&F8MU2MJ0F~=B^M>J1R|I2L!0CB zUEiwi9VEi5li}5%dU*8@n4q1eK12sNuOw#`43L22%s&bQfp^GKItgIpay|*5{{WN$eI5V+ diff --git a/ElectronJS/tasks/205.json b/ElectronJS/tasks/205.json new file mode 100644 index 0000000..69fe2d0 --- /dev/null +++ b/ElectronJS/tasks/205.json @@ -0,0 +1 @@ +{"id":205,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"8/10/2023, 6:19:22 PM","update_time":"8/10/2023, 6:35:26 PM","version":"0.5.0","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"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":"loopText_1","nodeId":4,"nodeName":"循环","desc":"要输入的文本/网址,多行以\\n分开","type":"text","exampleValue":"1~2\n3~4","value":"1~2\n3~4"},{"id":2,"name":"inputText_2","nodeName":"输入文字","nodeId":12,"desc":"要输入的文本,如京东搜索框输入:电脑","type":"text","exampleValue":"Field[\"参数2_链接地址\"]+Field[\"自定义操作2\"]","value":"Field[\"参数2_链接地址\"]+Field[\"自定义操作2\"]"}],"outputParameters":[{"id":0,"name":"参数1_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"手机"},{"id":1,"name":"参数2_链接地址","desc":"","type":"text","recordASField":1,"exampleValue":"https://shouji.jd.com/"},{"id":2,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":3,"name":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":4,"name":"自定义操作2","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,7,4,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.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":5,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[3,13,12],"isInLoop":false,"position":4,"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,"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]/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]"]}},{"id":9,"index":3,"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,"paras":[{"nodeType":1,"contentType":0,"relative":true,"name":"参数1_链接文本","desc":"","extractType":0,"relativeXPath":"","allXPaths":"","exampleValues":[{"num":0,"value":"手机"}],"unique_index":"hxrjjymdhcll50bpgx","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":"","allXPaths":"","exampleValues":[{"num":0,"value":"https://shouji.jd.com/"}],"unique_index":"hxrjjymdhcll50bpgx","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}],"loopType":1}},{"id":3,"index":4,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[6,5,14],"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~2\n3~4","code":"","waitTime":0,"exitCount":0,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0}},{"id":7,"index":5,"parentId":3,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":1,"parameters":{"history":3,"tabIndex":-1,"useLoop":true,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":1,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"","index":1,"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"]}},{"id":6,"index":6,"parentId":3,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":1,"tabIndex":0,"useLoop":true,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":1,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"","index":2}},{"id":2,"index":7,"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,"codeMode":"5","code":"self.a = 15","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":4,"index":8,"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,"codeMode":"5","code":"print(self.a, \"sdf---------------\")\nself.a += 222\nprint(self.a, \"sdf---------------\")","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":-1,"index":9,"parentId":0,"type":2,"option":9,"title":"判断条件","sequence":[10,11],"isInLoop":false,"position":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}},{"id":-1,"parentId":6,"index":10,"type":3,"option":10,"title":"条件分支","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":0,"value":"","code":"","waitTime":0},"position":0},{"id":-1,"parentId":6,"index":11,"type":3,"option":10,"title":"条件分支","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":0,"value":"","code":"","waitTime":0},"position":1},{"id":11,"index":12,"parentId":5,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"Field[\"参数2_链接地址\"]+Field[\"自定义操作2\"]","index":0}},{"id":10,"index":13,"parentId":5,"type":0,"option":5,"title":"自定义操作2","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,"codeMode":"6","code":"str(self.a) + \"TEST\"","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":8,"index":14,"parentId":3,"type":0,"option":4,"title":"输入文字","sequence":[],"isInLoop":true,"position":2,"parameters":{"history":1,"tabIndex":0,"useLoop":true,"xpath":"//*[@id=\"key\"]","iframe":false,"wait":1,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"value":"0","index":0}}]} \ No newline at end of file diff --git a/ElectronJS/tasks/206.json b/ElectronJS/tasks/206.json new file mode 100644 index 0000000..baef101 --- /dev/null +++ b/ElectronJS/tasks/206.json @@ -0,0 +1 @@ +{"id":206,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"","update_time":"8/10/2023, 6:46:45 PM","version":"0.5.0","saveThreshold":10,"cloudflare":0,"environment":0,"maxViewLength":15,"recordLog":1,"outputFormat":"xlsx","saveName":"current_time","inputExcel":"","startFromExit":0,"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":"自定义操作","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""},{"id":1,"name":"自定义操作2","desc":"自定义操作返回的数据","type":"text","recordASField":1,"exampleValue":""},{"id":2,"name":"自定义参数_1","desc":"","type":"text","recordASField":0,"exampleValue":"自定义值"},{"id":3,"name":"自定义参数_2","desc":"","type":"text","recordASField":1,"exampleValue":"自定义值"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,4,5,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://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":4,"index":2,"parentId":0,"type":1,"option":8,"title":"循环","sequence":[6],"isInLoop":false,"position":3,"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,"historyWait":2,"breakMode":0,"breakCode":"","breakCodeWaitTime":0,"allXPaths":""}},{"id":-1,"index":3,"parentId":4,"type":0,"option":2,"title":"点击元素","sequence":[],"isInLoop":true,"position":0,"parameters":{"history":4,"tabIndex":-1,"useLoop":true,"xpath":"//a[Field[\"自定义操作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":[],"allXPaths":"","loopType":1}},{"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,"codeMode":"5","code":"self.t = 2","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":3,"index":5,"parentId":0,"type":0,"option":5,"title":"自定义操作2","sequence":[],"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,"clear":0,"codeMode":"6","code":"self.t","waitTime":0,"recordASField":1,"paraType":"text"}},{"id":6,"index":6,"parentId":4,"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":false,"paras":[{"nodeType":0,"contentType":0,"relative":true,"name":"自定义参数_1","desc":"","extractType":0,"relativeXPath":"//a[Field[\"自定义操作2\"]]","recordASField":0,"allXPaths":[],"exampleValues":[{"num":0,"value":"自定义值"}],"default":"","beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0,"paraType":"text"}]}},{"id":-1,"index":7,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":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,"clear":0,"paras":[]}},{"id":5,"index":8,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"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,"clear":true,"paras":[{"nodeType":0,"contentType":0,"relative":false,"name":"自定义参数_2","desc":"","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"}]}}]} \ No newline at end of file diff --git a/ExecuteStage/.vscode/launch.json b/ExecuteStage/.vscode/launch.json index 80bd387..ce6f3fc 100644 --- a/ExecuteStage/.vscode/launch.json +++ b/ExecuteStage/.vscode/launch.json @@ -12,7 +12,7 @@ "justMyCode": false, // "args": ["--id", "[7]", "--read_type", "remote", "--headless", "0"] // "args": ["--id", "[9]", "--read_type", "remote", "--headless", "0", "--saved_file_name", "YOUTUBE"] - "args": ["--id", "[34]", "--headless", "0", "--user_data", "0", "--keyboard", "0"] + "args": ["--id", "[28]", "--headless", "0", "--user_data", "0", "--keyboard", "0"] } ] } \ No newline at end of file diff --git a/ExecuteStage/easyspider_executestage.py b/ExecuteStage/easyspider_executestage.py index a87dd1b..a101350 100644 --- a/ExecuteStage/easyspider_executestage.py +++ b/ExecuteStage/easyspider_executestage.py @@ -577,7 +577,12 @@ class BrowserThread(Thread): self.print_and_log(e) # 打印异常信息 self.recordLog("Command execution failed") self.recordLog("命令执行失败") - return str(output) + try: + output = str(output) + except: + output = "无法转换为字符串|Unable to convert to string" + self.print_and_log("无法转换为字符串|Unable to convert to string", output) + return output def customOperation(self, node, loopValue, loopPath, index): paras = node["parameters"]