Selenium+python+Chrome_3_等待界面元素

Selenium_等待界面元素

为什么需要?

通常情况下,代码执行的速度比服务器响应的速度快。服务器还没有来得及返回搜索结果,代码就执行了,当代码没得到返回的搜索结果时,就可能会出现报错。

解决方法

官网地址:selenium.dev/documentation/en/webdriver/waits/

  1. sleep():强制等待
    线程休眠
    缺点:设置时间短,服务器可能未响应,仍旧报错。设置时间长,造成时间浪费,程序执行时间变长。
# 导入sleep模块
from time import sleep
# 等待1秒
sleep(1)
# 1秒后就可以搜索页面中的元素了
  1. implicitly_wait():隐式等待
    设置全局的超时时间,此时每一条选择元素语句都有超时时间,超时响应则报错。
    缺点:当页面未完全加载完,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成,才会执行下一句。某些情况下会影响脚本执行速度。
# 导入webdriver模块
from selenium import webdriver
webdriver.Chrome().implicitly_wait(10)
  1. WebDriverWait:显示等待

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None):
driver:浏览器驱动 timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔(步长)时间,默认为0.5S
ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
WebDriverWait()一般由until()或 until_not()方法配合使用
until(method, message=''):调用该方法提供的驱动程序作为一个参数,直到返回值为True
until_not(method, message=''):调用该方法提供的驱动程序作为一个参数,直到返回值为False
https://www.jianshu.com/p/b8e0300415b9

注:selenium.webdriver.support.wait 和 selenium.webdriver.support.ui都是用来做显式等待的,二者没有区别。
方法一:

from selenium import webdriver
# 导入WebDriverWait模块
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
element = WebDriverWait(driver, 5, 0.5)

方法二:

from selenium import webdriver
# 导入ui模块
import selenium.webdriver.support.ui as ui
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
wait = ui.WebDriverWait(driver, 10)  # 10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值