WebDriverWait结合execute_script以及匿名函数lambda,确保在页面完全加载后再进行其他操作

WebDriverWait(driver, 10).until(lambda driver: driver.execute_script(‘return document.readyState’) == ‘complete’) 是一种检查页面加载状态的方式,确保在页面完全加载后再进行其他操作,避免因页面未加载完成而发生错误。

WebDriverWait(driver, 10).until(
    lambda driver: driver.execute_script('return document.readyState') == 'complete'
)

WebDriverWaitexecute_script 是 Selenium 中常用的工具,它们可以用来等待网页加载完成。在这种情况下,WebDriverWait 配合 execute_script 被用来检查网页的加载状态,直到页面的 document.readyState 状态变为 ‘complete’,表示页面的所有内容(HTML、CSS、JavaScript 等)都已经完全加载。

如何使用 WebDriverWait 和 execute_script 检查页面加载状态:

  1. execute_script 可以执行 JavaScript 代码并返回结果。这里用来检查 document.readyState属性的值。
  2. WebDriverWait 用来等待直到指定条件满足(在这个例子中,等待 document.readyState‘complete’)。

document.readyState 有几个状态值:

  • ‘loading’:页面正在加载。
  • ‘interactive’:页面已经解析完成,但资源(如图片、样式表等)还未完全加载。
  • ‘complete’:页面和所有资源(图片、样式、JavaScript)都已加载完成。

document.readyState‘complete’ 时,表示页面加载完成,你就可以安全地进行后续操作。

示例代码:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 创建 WebDriverWait 实例,等待页面加载完成
WebDriverWait(driver, 10).until(
    lambda driver: driver.execute_script('return document.readyState') == 'complete'
)

# 页面加载完成后,进行其他操作
element = driver.find_element(By.ID, 'some_element_id')
element.click()

代码解释:

  • WebDriverWait(driver, 10):创建一个 WebDriverWait 对象,等待最长 10 秒钟。
  • lambda driver: driver.execute_script(‘return document.readyState’) == ‘complete’:这是一个 Lambda 函数,它会执行 JavaScript 脚本 return document.readyState,并检查它是否为 ‘complete’
  • WebDriverWait 会持续检查这个条件,直到条件成立(即页面加载完成)。如果在 10 秒内条件没有满足,则会抛出 TimeoutException

为什么用 lambda:

lambda 用来创建一个简短的匿名函数,这个函数返回页面的加载状态,WebDriverWait 会反复调用这个函数直到其返回值是 ‘complete’

等待页面加载的常见方法:

除了这种方法,还可以使用其他 Selenium 的等待机制来保证页面元素的加载,例如:

  • 等待元素可点击:通常我们会等待某些特定元素的可点击性,确认页面元素已经加载。
WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, 'some_element_id'))
)

  • 等待元素可见:确保页面中的某个重要元素已经完全显示出来。
WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, 'some_element_id'))
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值