三种等待方式

本文详细介绍了Selenium中三种等待方式:强制等待、隐式等待和显式等待。强制等待使用`sleep()`函数,时间固定;隐式等待通过`implicitly_wait()`设置全局等待,适用于整个会话;显式等待利用`WebDriverWait`配合预期条件,等待特定元素出现。每种方法各有优缺点,需根据实际场景灵活运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 强制等待:

from time import sleep
sleep(1)

2 隐式等待:

from selenium.webdriver.support.wait import WebDriverWait

driver.implicitly_wait()

优点:只需要设置一次,
缺点:需要页面全部加载完成了,才可以进行下一步。
3 显示等待:
专门用于对指定的条件进行等待。

from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By

locator = (By.XPATH,'//*[@id="1"]/h3/a')
WebDriverWait(driver,20,0.5).until(ec.presence_of_element_located(locator))


### Selenium 中的三种等待方式 #### 1. **强制等待** 强制等待是指通过 `time.sleep()` 方法让程序暂停指定的时间后再继续运行。这种方式简单粗暴,适用于不确定页面加载时间的情况。 ```python import time time.sleep(5) # 让程序暂停5秒钟 ``` 尽管这种方法容易实现,但它存在明显的缺点:无论目标元素是否已经加载完成,都会严格按照设定的时间延迟执行后续操作[^4]。 --- #### 2. **隐式等待** 隐式等待是一种全局性的等待机制,在 WebDriver 初始化之后调用 `implicitly_wait(seconds)` 设置一个最长等待时间。一旦设置了隐式等待,WebDriver 将会在定位不到某个元素时自动轮询 DOM 树,直到超时为止。 示例代码如下: ```python from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) # 隐式等待10秒 driver.get('https://example.com') ``` 需要注意的是,隐式等待仅对查找单个元素有效,对于多个元素的查找不会生效。另外,隐式等待无法精确控制何时停止等待,可能会导致效率低下[^5]。 --- #### 3. **显式等待** 显式等待允许开发者自定义更精细的等待逻辑,通常与 `WebDriverWait` 和 `expected_conditions` 结合使用。它可以针对特定条件进行动态监测,只有当满足条件时才会结束等待并继续执行下一条语句。 以下是常见的几种等待条件以及对应的代码示例: - 等待某元素出现(但不一定是可见状态): ```python 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, 10) element = wait.until(EC.presence_of_element_located((By.ID, 'myElement'))) ``` - 等待某元素完全可见: ```python element = wait.until(EC.visibility_of_element_located((By.ID, 'myElement'))) ``` - 等待某元素变为可点击状态: ```python element = wait.until(EC.element_to_be_clickable((By.ID, 'myButton'))) ``` 显式等待的核心优势在于其灵活性——可以根据实际需求调整等待策略,从而提高脚本性能和稳定性[^2][^3]。 --- ### 总结对比表 | 特性 | 强制等待 | 隐式等待 | 显式等待 | |-----------------|------------------|--------------------|-------------------| | 实现难度 | 极低 | 较低 | 较高 | | 效率 | 最差 | 次之 | 最优 | | 自定义能力 | 完全无 | 可配置最大时限 | 支持多种复杂场景 | | 推荐适用范围 | 测试环境不稳定 | 页面结构较固定 | 动态交互较多 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值