selenium 的元素等待

本文介绍了Selenium中隐式等待和显式等待的概念及用法。隐式等待适用于整个页面加载,设置一次即可全局生效,但可能导致不必要的等待时间。显式等待更灵活,可指定特定元素,减少等待时间。文章还提供了显式等待的封装函数示例,并指出两者共存时,最长等待时间为显式等待时间。最后,强调了强制等待的不灵活性。
摘要由CSDN通过智能技术生成

隐式等待

  • 隐形等待
    设置一个超时时间,再这个时间内,不断的寻找元素(每隔0.5s找一次)
    若超时仍未找到则抛出timeout 异常,若在时间内找到了,则继续向下执行代码

  • 优点
    使用简单,一次添加,终身有效。
    一般在创建driver之后设置
    作用域: 添加隐式等待之后的元素查找

  • 缺点
    无法指定元素进行等待
    需要等页面全部加载完成,相对而言浪费时间

from selenium import webdriver
driver = webdriver.Chrome()
#隐性等待
driver.implicitly_wait(10)

显示等待

  • 显示等待

    设置一个超时时间和等待元素,这个时间内不断寻找元素,若元素出现,就进行下一步操作
    若超时仍未找到则抛出timeout 异常,若在时间内找到了,则继续向下执行代码
    条件:1-presence_of_element_located 元素存在
    2- visibility_of_element_located 元素可见—最多的
    3- element_to_be_clickable 元素可点击

  • 优点

    不需要等待页面全部加载完成,相对节省时间

    可以指定需要等待的元素,对于某些加载特别缓慢的元素,可以为其增加时间

  • 缺点

    使用相对复杂,代码多
    每次等待都需要再写一遍代码

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ec # 提供等待条件
from selenium.webdriver.support.ui import WebDriverWait   #提供等待类的
from selenium.webdriver.common.by import By  #提供元素寻找方法的
ele=WebDriverWait(driver,10,0.5).until(
    ec.visibility_of_element_located(
        (By.CSS_SELECTOR,'*****')
    )
)
ele.click()
# 可以将显性等待封装成函数
def webElementWait(driver, timeout,lo_time,by_locate,locate):
    '''

    :param driver:  浏览器驱动对象
    :param timeout: 最大等待时间
    :param lo_time: 轮询时间
    :param by_locate: 元素定位方法
    :param locate: 元素定位表达式
    :return: 元素对象
    '''
    return WebDriverWait(driver,timeout,lo_time).until(
        ec.visibility_of_element_located(
            (by_locate,locate)
        )
    )
ele=webElementWait(driver,10,0.5,By.CSS_SELECTOR,'***')
ele.click()

注意:当隐式等待和显示等待都存在的时候
例:隐式等待 5s,显示等待7s, 最长等待时间为7s

强制等待

强制等待:不够灵活,若元素在等待时间内加载完成了,它还是会等待到超过等待时间,才能进行下一步操作。

import time 
time.sleep(10)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值