Python selenium在通过循环返回时会减慢速度

2024-04-25 05:58:36 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的脚本读取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

上面的代码是针对Amazon的

任何建议都将不胜感激!你知道吗


Tags: 脚本inputbyiftimedrivercellsleep
1条回答
网友
1楼 · 发布于 2024-04-25 05:58:36

我终于明白了问题所在,那是由于一次含蓄的等待。你知道吗

下面的代码片段显示了我最初设置等待的位置。你知道吗

            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表中的下一个订单号。我通过在循环搜索另一个订单号之前调用另一个隐式等待来修复这个问题。这样,循环中稍后需要的等待不会影响搜索,如下所示:

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

相关问题 更多 >