【Python爬虫】Selenium篇②——三大等待

强制等待

# 参数为等待的时间,单位为秒
time.sleep(1)

强制等待是不需要借助selenium中的函数实现的,其实就在之前一篇的示例中演示的,通过time.sleep()函数实现程序的wait操作。这个等待是python基础库中就有的函数。
在这里插入图片描述

  • 缺点: 过于死板,而且耗费时间过多
  • 优点: 编写简单,强制性的等待可能有其他用途

隐式等待

# 参数为等待的最大时间,单位为秒
driver.implicitly_wait(10)

对获取的浏览器驱动进行配置,配置其等待的最大时间
在这里插入图片描述

  • 缺点: 必须等待页面全部加载完成,才能进行下一步操作,如果需要对页面特定的元素进行操作,元素已经加载完成,但是页面未加载完成,那么必须等待页面加载完,才能进行后续的操作,造成时间上的浪费,所以隐式等待不能精确对某一个元素进行等待
  • 优点: 使用方便,能对整个webdriver产生作用,所以只需要设置一次,一般用于整体的等待的配置

显示等待

# 第一个表示选择的窗口,第二个参数表示等待的最大时长,第三个参数表示每隔多少秒在页面中检查元素
# until方法表示需要查找元素的表达式,还有until_not方法,含义则和until相反
WebDriverWait(driver, 10, 0.5).until(lambda el: driver.find_element_by_xpath('//*[@id="1"]/h3/a'))

设置一个等待的条件
在这里插入图片描述
WebDriverWait有传了三个参数,其中第一个表示选择的窗口,第二个参数表示等待的最大时长,第三个参数表示每隔多少秒在页面中检查元素。后面的until方法表示需要查找元素的表达式,还有until_not方法,含义则和until相反。如果在指定时间内没有找到指定元素则会抛出一个异常。

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

def main():
    # 定义一个浏览器驱动
    driver = webdriver.Chrome()
    # 通过get的方式实现浏览器的调用
    driver.get("https://www.baidu.com/")
    # 再搜索框中输入关键字
    driver.find_element_by_name('wd').send_keys('光粒')
    # 通过id属性查找搜索按钮并点击
    driver.find_element_by_id('su').click()
    # 显示等待,只有找到xpath下的a标签时才会继续执行
    WebDriverWait(driver, 10, 0.5).until(lambda el: driver.find_element_by_xpath('//*[@id="1"]/h3/a'))
    # 点击第一条搜索结果
    driver.find_element_by_xpath('//*[@id="1"]/h3/a').click()
    time.sleep(5)
    driver.quit()



# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    main()
  • 缺点: 应用上比其他两种方式更加复杂,一次性等待
  • 优点: 最大化节约测试时间,精确对指定元素进行等待,使用更加灵活,一般和隐式等待一起使用
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值