mirror of
https://github.com/NaiboWang/EasySpider.git
synced 2025-04-20 10:05:00 +08:00
EVAL in Code
This commit is contained in:
parent
42dc5350c4
commit
593d01ed9e
@ -0,0 +1 @@
|
||||
{"id":0,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"8/14/2023, 5:40:55 PM","update_time":"8/14/2023, 5:40:55 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":"参数1_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"数码"}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,3],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":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 = 1\nself.b = 2","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":3,"index":3,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":2,"parameters":{"history":4,"tabIndex":-1,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"clear":0,"paras":[{"nodeType":1,"contentType":0,"relative":false,"name":"参数1_链接文本","desc":"","extractType":0,"relativeXPath":"/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/a[EVAL[\"self.a + self.b\"]]","allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/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":"603bndbum96llaop8rs","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}}]}
|
@ -0,0 +1 @@
|
||||
{"id":1,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"8/14/2023, 5:40:55 PM","update_time":"8/14/2023, 5:46:44 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":"参数1_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"数码"},{"id":2,"name":"自定义操作2","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,4,3],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":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 = 1\nself.b = 2","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":4,"index":3,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":3,"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":false,"name":"参数1_链接文本","desc":"","extractType":0,"relativeXPath":"/html/body/div[5]/div[Field[\"自定义操作2\"]]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/a[EVAL[\"self.a + self.b\"]]","allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/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":"603bndbum96llaop8rs","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}},{"id":3,"index":4,"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.a","waitTime":0,"recordASField":0,"paraType":"text"}}]}
|
@ -0,0 +1 @@
|
||||
{"id":2,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"8/14/2023, 5:40:55 PM","update_time":"8/14/2023, 5:49:34 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":"参数1_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"数码"},{"id":2,"name":"自定义操作2","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,4,3],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":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 = 1\nself.b = 2","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":4,"index":3,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":3,"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":false,"name":"参数1_链接文本","desc":"","extractType":0,"relativeXPath":"/html/body/div[5]/div[Field[\"自定义操作2\"]]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/a[EVAL(\"self.a + self.b\")]","allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/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":"603bndbum96llaop8rs","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}},{"id":3,"index":4,"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.a","waitTime":0,"recordASField":0,"paraType":"text"}}]}
|
1
.temp_to_pub/EasySpider_windows_x64/tasks/209.json
Normal file
1
.temp_to_pub/EasySpider_windows_x64/tasks/209.json
Normal file
@ -0,0 +1 @@
|
||||
{"id":209,"name":"京东全球版-专业的综合网上购物商城","url":"https://www.jd.com","links":"https://www.jd.com","create_time":"8/14/2023, 5:40:55 PM","update_time":"8/14/2023, 5:49:34 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":"参数1_链接文本","desc":"","type":"text","recordASField":1,"exampleValue":"数码"},{"id":2,"name":"自定义操作2","desc":"自定义操作返回的数据","type":"text","recordASField":0,"exampleValue":""}],"graph":[{"index":0,"id":0,"parentId":0,"type":-1,"option":0,"title":"root","sequence":[1,2,4,3],"parameters":{"history":1,"tabIndex":0,"useLoop":false,"xpath":"","iframe":false,"wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0},"isInLoop":false},{"id":1,"index":1,"parentId":0,"type":0,"option":1,"title":"打开网页","sequence":[],"isInLoop":false,"position":0,"parameters":{"useLoop":false,"xpath":"","wait":0,"waitType":0,"beforeJS":"","beforeJSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"waitElement":"","waitElementTime":10,"waitElementIframeIndex":0,"url":"https://www.jd.com","links":"https://www.jd.com","maxWaitTime":10,"scrollType":0,"scrollCount":1,"scrollWaitTime":1,"cookies":""}},{"id":2,"index":2,"parentId":0,"type":0,"option":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 = 1\nself.b = 2","waitTime":0,"recordASField":0,"paraType":"text"}},{"id":4,"index":3,"parentId":0,"type":0,"option":3,"title":"提取数据","sequence":[],"isInLoop":false,"position":3,"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":false,"name":"参数1_链接文本","desc":"","extractType":0,"relativeXPath":"/html/body/div[5]/div[Field[\"自定义操作2\"]]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/a[EVAL(\"self.a + self.b\")]","allXPaths":["/html/body/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/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":"603bndbum96llaop8rs","iframe":false,"default":"","paraType":"text","recordASField":1,"beforeJS":"","beforeJSWaitTime":0,"JS":"","JSWaitTime":0,"afterJS":"","afterJSWaitTime":0,"downloadPic":0}]}},{"id":3,"index":4,"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.a","waitTime":0,"recordASField":0,"paraType":"text"}}]}
|
2
ExecuteStage/.vscode/launch.json
vendored
2
ExecuteStage/.vscode/launch.json
vendored
@ -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", "[17]", "--headless", "0", "--user_data", "0", "--keyboard", "0"]
|
||||
"args": ["--id", "[2]", "--headless", "0", "--user_data", "0", "--keyboard", "0"]
|
||||
}
|
||||
]
|
||||
}
|
@ -502,7 +502,7 @@ class BrowserThread(Thread):
|
||||
max_wait_time = 999999
|
||||
# self.print_and_log(codeMode, code)
|
||||
# 将value中的Field[""]替换为outputParameters中的键值
|
||||
code = replace_field_values(code, self.outputParameters)
|
||||
code = replace_field_values(code, self.outputParameters, self)
|
||||
if iframe and self.browser.iframe_env == False:
|
||||
# 获取所有的 iframe
|
||||
self.browser.switch_to.default_content()
|
||||
@ -595,7 +595,7 @@ class BrowserThread(Thread):
|
||||
if codeMode == 2: # 使用循环的情况下,传入的clickPath就是实际的xpath
|
||||
try:
|
||||
loopPath = replace_field_values(
|
||||
loopPath, self.outputParameters)
|
||||
loopPath, self.outputParameters, self)
|
||||
elements = self.browser.find_elements(
|
||||
By.XPATH, loopPath, iframe=paras["iframe"])
|
||||
element = elements[index]
|
||||
@ -639,7 +639,7 @@ class BrowserThread(Thread):
|
||||
optionValue = loopValue
|
||||
optionMode = 1
|
||||
try:
|
||||
xpath = replace_field_values(para["xpath"], self.outputParameters)
|
||||
xpath = replace_field_values(para["xpath"], self.outputParameters, self)
|
||||
dropdown = Select(self.browser.find_element(
|
||||
By.XPATH, xpath, iframe=para["iframe"]))
|
||||
try:
|
||||
@ -669,8 +669,8 @@ class BrowserThread(Thread):
|
||||
|
||||
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)
|
||||
loopPath = replace_field_values(loopPath, self.outputParameters, self)
|
||||
xpath = replace_field_values(para["xpath"], self.outputParameters, self)
|
||||
if para["useLoop"]: # 使用循环的情况下,传入的clickPath就是实际的xpath
|
||||
if xpath == "":
|
||||
path = loopPath
|
||||
@ -683,7 +683,7 @@ class BrowserThread(Thread):
|
||||
else:
|
||||
index = 0
|
||||
path = xpath # 不然使用元素定义的xpath
|
||||
path = replace_field_values(path, self.outputParameters)
|
||||
path = replace_field_values(path, self.outputParameters, self)
|
||||
try:
|
||||
elements = self.browser.find_elements(
|
||||
By.XPATH, path, iframe=para["iframe"])
|
||||
@ -709,7 +709,7 @@ class BrowserThread(Thread):
|
||||
try:
|
||||
if node["parameters"]["waitElement"] != "":
|
||||
waitElement = replace_field_values(
|
||||
node["parameters"]["waitElement"], self.outputParameters)
|
||||
node["parameters"]["waitElement"], self.outputParameters, self)
|
||||
waitElementTime = float(node["parameters"]["waitElementTime"])
|
||||
waitElementIframeIndex = node["parameters"]["waitElementIframeIndex"]
|
||||
self.print_and_log("等待元素出现:", waitElement)
|
||||
@ -798,7 +798,7 @@ class BrowserThread(Thread):
|
||||
bodyText = self.browser.find_element(
|
||||
By.CSS_SELECTOR, "body", iframe=cnode["parameters"]["iframe"]).text
|
||||
value = replace_field_values(
|
||||
cnode["parameters"]["value"], self.outputParameters)
|
||||
cnode["parameters"]["value"], self.outputParameters, self)
|
||||
if bodyText.find(value) >= 0:
|
||||
executeBranchId = i
|
||||
break
|
||||
@ -807,7 +807,7 @@ class BrowserThread(Thread):
|
||||
elif tType == 2: # 当前页面包含元素
|
||||
try:
|
||||
xpath = replace_field_values(
|
||||
cnode["parameters"]["value"], self.outputParameters)
|
||||
cnode["parameters"]["value"], self.outputParameters, self)
|
||||
if self.browser.find_element(By.XPATH, xpath, iframe=cnode["parameters"]["iframe"]):
|
||||
executeBranchId = i
|
||||
break
|
||||
@ -816,7 +816,7 @@ class BrowserThread(Thread):
|
||||
elif tType == 3: # 当前循环元素包括文本
|
||||
try:
|
||||
value = replace_field_values(
|
||||
cnode["parameters"]["value"], self.outputParameters)
|
||||
cnode["parameters"]["value"], self.outputParameters, self)
|
||||
if loopElement.text.find(value) >= 0:
|
||||
executeBranchId = i
|
||||
break
|
||||
@ -825,7 +825,7 @@ class BrowserThread(Thread):
|
||||
elif tType == 4: # 当前循环元素包括元素
|
||||
try:
|
||||
xpath = replace_field_values(
|
||||
cnode["parameters"]["value"][1:], self.outputParameters)
|
||||
cnode["parameters"]["value"][1:], self.outputParameters, self)
|
||||
if loopElement.find_element(By.XPATH, xpath):
|
||||
executeBranchId = i
|
||||
break
|
||||
@ -904,7 +904,7 @@ class BrowserThread(Thread):
|
||||
"Page changed detected, continue loop.")
|
||||
bodyText = newBodyText
|
||||
xpath = replace_field_values(
|
||||
node["parameters"]["xpath"], self.outputParameters)
|
||||
node["parameters"]["xpath"], self.outputParameters, self)
|
||||
# self.recordLog("循环元素|Loop element:", xpath)
|
||||
element = self.browser.find_element(
|
||||
By.XPATH, xpath, iframe=node["parameters"]["iframe"])
|
||||
@ -954,7 +954,7 @@ class BrowserThread(Thread):
|
||||
elif int(node["parameters"]["loopType"]) == 1: # 不固定元素列表
|
||||
try:
|
||||
xpath = replace_field_values(
|
||||
node["parameters"]["xpath"], self.outputParameters)
|
||||
node["parameters"]["xpath"], self.outputParameters, self)
|
||||
elements = self.browser.find_elements(By.XPATH,
|
||||
xpath, iframe=node["parameters"]["iframe"])
|
||||
# self.recordLog("循环元素|Loop element:", xpath)
|
||||
@ -1022,7 +1022,7 @@ class BrowserThread(Thread):
|
||||
# 千万不要忘了分割!!
|
||||
for path in node["parameters"]["pathList"].split("\n"):
|
||||
try:
|
||||
path = replace_field_values(path, self.outputParameters)
|
||||
path = replace_field_values(path, self.outputParameters, self)
|
||||
element = self.browser.find_element(
|
||||
By.XPATH, path, iframe=node["parameters"]["iframe"])
|
||||
# self.recordLog("循环元素|Loop element:", path)
|
||||
@ -1084,9 +1084,9 @@ class BrowserThread(Thread):
|
||||
textList = node["parameters"]["textList"].split("\n")
|
||||
if len(textList) == 1: # 如果固定文本列表只有一行,现在就可以替换变量
|
||||
textList = replace_field_values(
|
||||
node["parameters"]["textList"], self.outputParameters).split("\n")
|
||||
node["parameters"]["textList"], self.outputParameters, self).split("\n")
|
||||
for text in textList:
|
||||
text = replace_field_values(text, self.outputParameters)
|
||||
text = replace_field_values(text, self.outputParameters, self)
|
||||
# self.recordLog("当前循环文本|Current loop text:", text)
|
||||
for i in node["sequence"]: # 挨个执行操作
|
||||
self.executeNode(i, text, "", 0)
|
||||
@ -1108,13 +1108,13 @@ class BrowserThread(Thread):
|
||||
filter(isnotnull, node["parameters"]["textList"].split("\n"))) # 去空行
|
||||
if len(urlList) == 1: # 如果固定网址列表只有一行,现在就可以替换变量
|
||||
urlList = replace_field_values(
|
||||
node["parameters"]["textList"], self.outputParameters).split("\n")
|
||||
node["parameters"]["textList"], self.outputParameters, self).split("\n")
|
||||
# urlList = []
|
||||
# for url in tempList:
|
||||
# if url != "":
|
||||
# urlList.append(url)
|
||||
for url in urlList:
|
||||
url = replace_field_values(url, self.outputParameters)
|
||||
url = replace_field_values(url, self.outputParameters, self)
|
||||
# self.recordLog("当前循环网址|Current loop url:", url)
|
||||
for i in node["sequence"]:
|
||||
self.executeNode(i, url, "", 0)
|
||||
@ -1179,7 +1179,7 @@ class BrowserThread(Thread):
|
||||
else: # 在流程图其他位置设置了打开网页的操作,读取的应该是第一个网址,如打开网页后登录,再打开第二个网页
|
||||
url = list(filter(isnotnull, para["links"].split("\n")))[0]
|
||||
# 将value中的Field[""]替换为outputParameters中的键值
|
||||
url = replace_field_values(url, self.outputParameters)
|
||||
url = replace_field_values(url, self.outputParameters, self)
|
||||
try:
|
||||
maxWaitTime = int(para["maxWaitTime"])
|
||||
except:
|
||||
@ -1222,7 +1222,7 @@ class BrowserThread(Thread):
|
||||
def inputInfo(self, para, loopValue):
|
||||
time.sleep(0.1) # 输入之前等待0.1秒
|
||||
try:
|
||||
xpath = replace_field_values(para["xpath"], self.outputParameters)
|
||||
xpath = replace_field_values(para["xpath"], self.outputParameters, self)
|
||||
textbox = self.browser.find_element(
|
||||
By.XPATH, xpath, iframe=para["iframe"])
|
||||
# textbox.send_keys(Keys.CONTROL, 'a')
|
||||
@ -1281,8 +1281,8 @@ 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)
|
||||
clickPath = replace_field_values(clickPath, self.outputParameters, self)
|
||||
xpath = replace_field_values(para["xpath"], self.outputParameters, self)
|
||||
if para["useLoop"]: # 使用循环的情况下,传入的clickPath就是实际的xpath
|
||||
if xpath == "":
|
||||
path = clickPath
|
||||
@ -1548,7 +1548,7 @@ class BrowserThread(Thread):
|
||||
|
||||
# 提取数据事件
|
||||
def getData(self, para, loopElement, isInLoop=True, parentPath="", index=0):
|
||||
parentPath = replace_field_values(parentPath, self.outputParameters)
|
||||
parentPath = replace_field_values(parentPath, self.outputParameters, self)
|
||||
if para["clear"] == 1:
|
||||
self.clearOutputParameters()
|
||||
try:
|
||||
@ -1574,7 +1574,7 @@ class BrowserThread(Thread):
|
||||
if p["optimizable"]:
|
||||
try:
|
||||
relativeXPath = replace_field_values(
|
||||
p["relativeXPath"], self.outputParameters)
|
||||
p["relativeXPath"], self.outputParameters, self)
|
||||
# 只有当前环境不变变化才可以快速提取数据
|
||||
if self.browser.iframe_env != p["iframe"]:
|
||||
p["optimizable"] = False
|
||||
@ -1653,7 +1653,7 @@ class BrowserThread(Thread):
|
||||
if not p["optimizable"]:
|
||||
content = ""
|
||||
relativeXPath = replace_field_values(
|
||||
p["relativeXPath"], self.outputParameters)
|
||||
p["relativeXPath"], self.outputParameters, self)
|
||||
if not (p["contentType"] == 5 or p["contentType"] == 6): # 如果不是页面标题或URL,去找元素
|
||||
try:
|
||||
# relativeXPath = relativeXPath.lower()
|
||||
|
@ -177,11 +177,20 @@ def write_to_csv(file_name, data, record):
|
||||
f.close()
|
||||
|
||||
|
||||
def replace_field_values(orginal_text, outputParameters):
|
||||
def eval_repl(matchobj):
|
||||
print(matchobj.group(1))
|
||||
return str(eval(matchobj.group(1), globals(), locals()))
|
||||
|
||||
|
||||
|
||||
def replace_field_values(orginal_text, outputParameters, browser=None):
|
||||
pattern = r'Field\["([^"]+)"\]'
|
||||
try:
|
||||
replaced_text = re.sub(
|
||||
pattern, lambda match: outputParameters.get(match.group(1), ''), orginal_text)
|
||||
if replaced_text.find("EVAL") != -1: # 如果返回值中包含EVAL
|
||||
replaced_text = replaced_text.replace("self.", "browser.")
|
||||
replaced_text = re.sub(r'EVAL\("(.*?)"\)', lambda match: str(eval(match.group(1))), replaced_text)
|
||||
except:
|
||||
replaced_text = orginal_text
|
||||
return replaced_text
|
||||
|
Loading…
x
Reference in New Issue
Block a user