首页 > 解决方案 > selenium 等到 x 秒,如果它通过 x 秒然后重新加载浏览器 python

问题描述

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://www.someurl.com/")
wait = WebDriverWait(driver, 60)

def search_automation(keyword):
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".input_keyword").send_keys(keyword)

keyword_list = ['a','b','c']
for i in keyword_list:
    search_automation(i)

在上面的代码的情况下,如果页面在 60 秒内没有正确加载,它只是跳到下一个关键字。

在我正在处理的实际案例中,有超过 10k 的数据可供使用,我不应该错过任何一个。

所以,我想在等待时间的代码中添加一些 if,else 条件。有什么办法可以设置等待时间的条件吗?

例如,

  1. 最多等待 60 秒以找到该元素。
  2. 如果最后 60 秒过去了,driver.close() 并重新加载驱动程序。

标签: pythonselenium

解决方案


您可以WebDriverWait在此处的try/except块中使用。

from selenium.common.exceptions import TimeoutException

def wait_for_element(by):
    try:
        # wait up to 60 seconds for the element
        WebDriverWait(driver, 60).until(EC.presence_of_element_located(by))

        # if we hit exception, element was not found, and we should reload
    except TimeoutException():
        driver.refresh()

只需将选择器传递给(By.CSS_SELECTOR, ".input_keyword")方法即可。它将等待元素存在最多 60 秒,如果它不存在,它将刷新页面。


推荐阅读