Selenium等待动态渲染数据多种情况
作者:YXN-python 阅读量:66 发布日期:2023-11-22
1、使用 WebDriverWait 等待特定元素出现
WebDriverWait 是 Selenium 提供的一种显式等待机制,可以等待某个条件满足后再继续执行。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待某个元素出现
wait = WebDriverWait(driver, 60)
element = wait.until(
EC.presence_of_element_located((By.ID, "element_id"))
)
- presence_of_element_located: 等待元素出现在 DOM 中。
- visibility_of_element_located: 等待元素出现在 DOM 中并且可见。
- text_to_be_present_in_element: 等待元素的文本中包含特定内容。
2、等待 JavaScript 执行完成
如果数据渲染依赖于某个 JavaScript 变量或函数,可以通过执行 JavaScript 来检查。
# 等待某个 JavaScript 变量或函数返回期望值
wait.until(
lambda driver: driver.execute_script("return window.someVariable === 'expectedValue';")
)
3、等待 AJAX 请求完成
如果数据是通过 AJAX 请求加载的,可以通过检查 jQuery 的 AJAX 请求状态来判断是否完成。
wait.until(
lambda driver: driver.execute_script("return jQuery.active === 0;")
)
4、等待页面加载完成
如果数据渲染是在页面加载完成后进行的,可以等待页面完全加载。
driver.implicitly_wait(10) # 隐式等待,最多等待10秒
5、自定义条件等待
你可以自定义等待条件,比如检查某个元素的属性或内容是否发生变化。
wait.until(
lambda driver: driver.find_element(By.ID, "element_id").text != "Loading..."
)
YXN-python
2023-11-22