Selenium系列教程 - 解读selenium等待方式

1. 强制等待 (time.sleep())

    当一个页面被加载到浏览器时, 该页面内的元素可以在不同的时间点被加载。这使得定位元素变得困难, 如果元素不再页面之中,会抛出异常。
    最糟糕的案例是使用time.sleep(),它是一种最简单粗暴的方法,将条件设置为等待一个确切的时间段。

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(3)   # 强制等待3秒
driver.quit()

     缺点:不管页面是否加载完成,都要等待固定的时间,严重影响代码的执行速度。

2. 隐式等待 (implicitly_wait())

    Selenium Webdriver 提供两种类型的等待 - 隐式和显式。

    隐式等待是通过设置一个等待时长,在规定时间内网页加载完成后执行下一步,或者等到时间截止后执行下一步,如果此时元素还没有加载出来则抛 NoSuchElement 异常。默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver实例的生命周期,因此只要设置一次即可。

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)  # 隐式等待10秒
driver.get("http://www.baidu.com")
driver.quit()

     缺点:程序会一直等待整个页面加载完成,直到超时。有时需要的那个元素早就加载完成了,只是页面上有个别元素加载的比较慢。

3. 显式等待 (WebDriverWait)

    显式等待是你在代码中定义等待一定条件发生后再进一步执行你的代码。让你只等待需要的时间,在设置时间内,每隔一段时间检测一次条件是否成立(默认每500毫秒调用一次ExpectedCondition直到结果成功返回),如果超过最长设置时间,条件还不成立则抛出 TimeoutException 异常。

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

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 显式等待,每隔0.5秒检测一次元素是否存在,直到超过10秒
element = WebDriverWait(driver, 10, 0.5).until(EC.presence_of_element_located(By.ID, "kw"))
element.send_keys("hwijew")
driver.quit()

WebDriverWait 详情请看 Selenium系列教程 - WebDriverWait 详解以及自定义判断条件

在这里插入图片描述


在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值