通过循环返回时,Python Selenium速度变慢

时间:2019-11-21 21:04:46

标签: python selenium xlrd

下面的脚本阅读excel表格并在页面上找到订单号;找到一个后,脚本将输入相应的跟踪号,返回第一页(与它最初搜索的页面相同)并继续浏览订单号。

谁能告诉我为什么返回到该页面时以下脚本会大大降低速度?例如:这些脚本将非常有效,可以每秒搜索约5个订单号,然后输入跟踪号并很快提交。

当脚本返回带有未发货订单的页面时,要花很长时间才能搜索更多的页面(也许每分钟1个)

完成后,“ Not ups Tracking”和“ Fedex” else功能不会变慢(这些是手动输入的,然后通过按Enter键可以“手动重新启动”脚本)

脚本如下:

    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

上面的代码是针对亚马逊的

任何建议都值得赞赏!

1 个答案:

答案 0 :(得分:0)

我终于找到了问题所在,这是由于隐式等待所致。

下面的代码段显示了我最初设置等待的位置。

onChangeItem(event) {
   this.filter.type= "items";
   this.filter.filterObject= event.value;
   this.commonService.searchClientiClick(this.filter);
}

问题在于,驱动程序在返回循环时保留了等待时间,因此当线程返回到以下位置时:

            if isSubstring == True:
                cprint('UPS TRACKING NUMBER', 'green')
                driver.implicitly_wait(25)
                confirm = driver.find_element_by_link_text("""Confirm shipment""")
                confirm.click()

它最多等待了25秒,然后才移至excel工作表中的下一个订单号。我通过在循环搜索另一个订单号之前立即调用另一个隐式等待来解决此问题。这样,循环中稍后需要的等待不会影响搜索,如下所示:

        print("SEARCHING FOR: ", po)
        if driver.find_elements_by_link_text(po):
            print("FOUND!!!!", po, tracking)