Python selenium 在通过循环返回时变慢
Python selenium slows down when returning through loop
下面的脚本读取 excel sheet 并在页面上找到订单号;当找到一个时,脚本将输入相应的跟踪号,return 到第一页(这是它最初搜索的同一页)并继续查找订单号。
谁能告诉我为什么以下脚本在 return 访问该页面时会显着变慢?例如:脚本将运行得非常好,每秒搜索大约 5 个订单号,然后输入跟踪号并非常快速地提交。
当脚本返回到包含未发货订单的页面时,需要很长时间才能搜索更多订单(可能每分钟 1 个)
"Not ups Tracking" 和 "Fedex" else 函数在完成后不会变慢(这些是手动输入然后脚本是 "restarted manually" 按回车键)
脚本如下所示:
list_of_files = glob.glob('F:/TrackingBot/GC/updater/*') # * means all if need specific format then *.csv
latest_file = max(list_of_files, key=os.path.getctime)
wb = xlrd.open_workbook(latest_file)
sheet = wb.sheet_by_index(0)
sheet.cell_value(0, 0)
for i in range(sheet.nrows):
cell = sheet.cell(i, 3)
cty = cell.ctype
if cty == xlrd.XL_CELL_EMPTY:
continue
else:
po = (sheet.cell_value(i, 3))
tracking = (sheet.cell_value(i, 10))
wayfair = "CS"
wayfsubstring = wayfair in po
if wayfsubstring == True:
continue
print("SEARCHING FOR: ", po)
if driver.find_elements_by_link_text(po):
print("FOUND!!!!", po, tracking)
driver.find_element_by_link_text(po).click()
ups = "1Z"
isSubstring = ups in tracking
if isSubstring == True:
cprint('UPS TRACKING NUMBER', 'green')
driver.implicitly_wait(25)
confirm = driver.find_element_by_link_text("""Confirm shipment""")
confirm.click()
time.sleep(1)
trackingnum = driver.find_element_by_xpath("""//input[contains(@data-test-id,
'text-input-tracking-id')]""")
trackingnum.click()
trackingnum.send_keys(tracking)
driver.find_element_by_xpath("""(//input[@value='Confirm shipment'])[2]""").click()
time.sleep(3)
driver.refresh()
time.sleep(4)
continue
else:
cprint("NOT UPS TRACKING", "red")
period = "."
isSubstring2 = period in tracking
if isSubstring2 == True:
cprint('NJ SENT TRACKING NUMBER', 'yellow')
input("Type to GO")
driver.refresh()
time.sleep(4)
continue
else:
cprint('FEDEX FREIGHT TRACKING NUMBER', 'green')
input("Type to GO")
driver.refresh()
time.sleep(4)
continue
以上代码适用于亚马逊
如有任何建议,我们将不胜感激!
终于找到问题了,原来是隐式等待
下面的代码片段显示了我最初设置等待的位置。
if isSubstring == True:
cprint('UPS TRACKING NUMBER', 'green')
driver.implicitly_wait(25)
confirm = driver.find_element_by_link_text("""Confirm shipment""")
confirm.click()
问题是驱动程序在返回循环时保留了等待时间,因此当线程返回时:
print("SEARCHING FOR: ", po)
if driver.find_elements_by_link_text(po):
print("FOUND!!!!", po, tracking)
它最多等待 25 秒,然后才转到 excel sheet 中的下一个订单号。我通过在循环搜索另一个订单号之前调用另一个隐式等待来解决这个问题。这样,循环中稍后需要的等待不会影响搜索,如下所示:
print("SEARCHING FOR: ", po)
driver.implicitly_wait(.5)
if driver.find_elements_by_link_text(po):
print("FOUND!!!!", po, tracking)
下面的脚本读取 excel sheet 并在页面上找到订单号;当找到一个时,脚本将输入相应的跟踪号,return 到第一页(这是它最初搜索的同一页)并继续查找订单号。
谁能告诉我为什么以下脚本在 return 访问该页面时会显着变慢?例如:脚本将运行得非常好,每秒搜索大约 5 个订单号,然后输入跟踪号并非常快速地提交。
当脚本返回到包含未发货订单的页面时,需要很长时间才能搜索更多订单(可能每分钟 1 个)
"Not ups Tracking" 和 "Fedex" else 函数在完成后不会变慢(这些是手动输入然后脚本是 "restarted manually" 按回车键)
脚本如下所示:
list_of_files = glob.glob('F:/TrackingBot/GC/updater/*') # * means all if need specific format then *.csv
latest_file = max(list_of_files, key=os.path.getctime)
wb = xlrd.open_workbook(latest_file)
sheet = wb.sheet_by_index(0)
sheet.cell_value(0, 0)
for i in range(sheet.nrows):
cell = sheet.cell(i, 3)
cty = cell.ctype
if cty == xlrd.XL_CELL_EMPTY:
continue
else:
po = (sheet.cell_value(i, 3))
tracking = (sheet.cell_value(i, 10))
wayfair = "CS"
wayfsubstring = wayfair in po
if wayfsubstring == True:
continue
print("SEARCHING FOR: ", po)
if driver.find_elements_by_link_text(po):
print("FOUND!!!!", po, tracking)
driver.find_element_by_link_text(po).click()
ups = "1Z"
isSubstring = ups in tracking
if isSubstring == True:
cprint('UPS TRACKING NUMBER', 'green')
driver.implicitly_wait(25)
confirm = driver.find_element_by_link_text("""Confirm shipment""")
confirm.click()
time.sleep(1)
trackingnum = driver.find_element_by_xpath("""//input[contains(@data-test-id,
'text-input-tracking-id')]""")
trackingnum.click()
trackingnum.send_keys(tracking)
driver.find_element_by_xpath("""(//input[@value='Confirm shipment'])[2]""").click()
time.sleep(3)
driver.refresh()
time.sleep(4)
continue
else:
cprint("NOT UPS TRACKING", "red")
period = "."
isSubstring2 = period in tracking
if isSubstring2 == True:
cprint('NJ SENT TRACKING NUMBER', 'yellow')
input("Type to GO")
driver.refresh()
time.sleep(4)
continue
else:
cprint('FEDEX FREIGHT TRACKING NUMBER', 'green')
input("Type to GO")
driver.refresh()
time.sleep(4)
continue
以上代码适用于亚马逊
如有任何建议,我们将不胜感激!
终于找到问题了,原来是隐式等待
下面的代码片段显示了我最初设置等待的位置。
if isSubstring == True:
cprint('UPS TRACKING NUMBER', 'green')
driver.implicitly_wait(25)
confirm = driver.find_element_by_link_text("""Confirm shipment""")
confirm.click()
问题是驱动程序在返回循环时保留了等待时间,因此当线程返回时:
print("SEARCHING FOR: ", po)
if driver.find_elements_by_link_text(po):
print("FOUND!!!!", po, tracking)
它最多等待 25 秒,然后才转到 excel sheet 中的下一个订单号。我通过在循环搜索另一个订单号之前调用另一个隐式等待来解决这个问题。这样,循环中稍后需要的等待不会影响搜索,如下所示:
print("SEARCHING FOR: ", po)
driver.implicitly_wait(.5)
if driver.find_elements_by_link_text(po):
print("FOUND!!!!", po, tracking)