python - 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 条件。有什么办法可以设置等待时间的条件吗?
例如,
- 最多等待 60 秒以找到该元素。
- 如果最后 60 秒过去了,driver.close() 并重新加载驱动程序。
解决方案
您可以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 秒,如果它不存在,它将刷新页面。
推荐阅读
- r - 源上下文中的 R 闪亮调用(观察者生成器)函数
- python - 无法在“app”gunicorn 中找到应用程序对象“app”
- vue.js - 如果通过 cdn 使用 vue,Vuejs 是否可以在旧浏览器上工作?
- node.js - 如何在 React 中更改 index.html 的路径/文件名?
- mongodb - 如何在没有 else 表达式的情况下在 mongoDB 中使用 $cond?
- javascript - 在检查字符串长度时遇到 javascript 中的意外行为
- c++ - 如何在单独的视口中使用帧缓冲区以及默认帧缓冲区?
- c# - 未显示表单时,如何在不同的线程/任务中处理 Windows.Forms 的初始化?
- string - 尝试使用“[”和“]”打开 txt 文件时出现问题
- java - ORA-02289: 序列不存在,但是序列已经存在于数据库中