selenium三种等待方式详解

本文探讨了在Selenium Web自动化中如何有效地处理页面加载问题,介绍了强制等待、隐性等待和显性等待的区别与使用方法,以提高代码效率并确保精确操作时机。

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

一、场景

我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间。

二、强制等待

1、利用time模块的sleep方法来实现,最简单粗暴的方法。

2、不管浏览器是否加载完成,都强制等待5s,时间一到,就会执行下面的代码,不建议使用这种等待方式,因为严重影响代码的执行速度

import time

from selenium import webdriver

# 启动浏览器
driver = webdriver.Chrome()

# 打开百度网页
driver.get("https://www.baidu.com")

# 定位输入框输入内容
driver.find_element("id","kw").send_keys("测试工程师")

# 等待5s
time.sleep(5)

#退出浏览器
driver.quit()

三、隐性等待

设置一个隐性等待时间10s,如果在这个时间内,网页加载完成,就会执行下一步操作,否则一直等到超时,然后再执行下一步操作,这种等待方式也会存在一个弊端,程序会一直等待整个页面加载完成,直到超时,但是有时候我们需要的哪一个元素,已经加载完成了,只是页面其他元素加载比较慢,我仍要等待所有的元素加载完成才会执行下一步。特点:全局设置,设置一次就够了

import time

from selenium import webdriver

# 启动浏览器
driver = webdriver.Chrome()

# 打开百度网页
driver.get("https://www.baidu.com")

# 隐性等待10s
driver.implicitly_wait(10)

# 定位输入框输入内容
driver.find_element("id","kw").send_keys("中国")

# 定位百度一下 点击按钮
driver.find_element('id','su').click()

# 点击搜索结果页的超文本链接,跳转新窗口
driver.find_element("xpath","//a[text()='中国政府网']").click()

# 等待5s
time.sleep(5)

#退出浏览器
driver.quit()

四、显性等待

1、上面提到了隐性等待存在的弊端,如果想等自己想要的元素被加载出来就执行下一步操作,这个时候就用到显性等待了

2、显性等待需要用到WebDriverWait,配合该类的unitl()和unitl_not()方法来使用

3、timeout=10---设置超时时间,poll_frequency=0.5---每隔多秒检测一次,可不传,有默认值。

4、还需要导入一个类expected_conditions,来使用他里面的定位元素方法。

5、TimeoutException 超时会抛出超时异常

import time

from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

# 启动浏览器
driver = webdriver.Chrome()

# 打开百度网页
driver.get("https://www.baidu.com")

# # 隐性等待10s
# driver.implicitly_wait(10)

# 定位输入框输入内容
driver.find_element("id","kw").send_keys("中国")

# 定位百度一下 点击按钮
driver.find_element('id','su').click()

# 初始化一个等待器
wait = WebDriverWait(driver,timeout=10,poll_frequency=0.5)
wait.until(expected_conditions.element_to_be_clickable(("xpath","//a[text()='中国政府网']")))

# 点击搜索结果页的超文本链接,跳转新窗口
driver.find_element("xpath","//a[text()='中国政府网']").click()

# 等待5s
time.sleep(5)

#退出浏览器
driver.quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小白00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值