15-三种等待方式

目录

1.  强制等待

2. 隐式等待

3. 显式等待

4. 总结


1.  强制等待

  • 方法:sleep(seconds),seconds 等待时间,单位 秒 s
  • 说明:不管浏览器是否加载完了,程序都得等待3秒,不建议使用,严重影响执行速度
# -*- coding: utf-8 -*-
# @Time    : 2021/1/17
# @Author  : 大海

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('https://blog.youkuaiyun.com/IT_heima?spm=1001.2014.3001.5343')

sleep(2)  # 强制等待2秒再执行下一步
print(driver.current_url)
print(driver.title)

driver.close()

2. 隐式等待

  • 方法:implicitly_wait(time_to_wait) ,  time_to_wait 等待时间, 单位 秒 s
  • 说明:设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。此方法是全局性的,设置一次即可
  • 弊端:程序会一直等待整个页面加载完成,也就是一般情况下看到浏览器标签栏那个小圈不再转,才会执行下一步,但是页面的元素已加载完,js等未加载完,仍会等待
# -*- coding: utf-8 -*-
# @Time    : 2021/1/17
# @Author  : 大海

from selenium import webdriver

driver = webdriver.Chrome()
# 隐式等待,最长等20秒
driver.implicitly_wait(20)
driver.get('https://blog.youkuaiyun.com/IT_heima?spm=1001.2014.3001.5343')

print(driver.current_url)
print(driver.title)

driver.close()

3. 显式等待

     init方法:__init__(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)

  • driver :浏览器驱动。  
  • timeout :最长超时时间,默认以秒为单位。
  • poll_frequency :检测的间隔(步长)时间,默认为0.5S。
  • ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。

    unit方法:until( method, message='')

  • method:传入执行的方法
  • message:超时时的提示信息

    until_not方法:同until

  • 使用: WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)
# -*- coding: utf-8 -*-
# @Time    : 2021/1/17
# @Author  : 大海

from selenium import webdriver
from selenium.common.exceptions import ElementNotVisibleException
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
# 隐式等待,最长等20秒
driver.implicitly_wait(20)
driver.get('http://baidu.com')

print(driver.current_url)
print(driver.title)

# 每隔0.5s去查找元素 kw,超时时间为10s,返回WebElement对象
element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("kw"))
element.send_keys('selenium')

# 每隔1去查找元素 kw是否可见,超时时间为30s,返回结果为布尔值  
is_disappeared = WebDriverWait(driver, 30, 1, ElementNotVisibleException).until_not(
    lambda x: x.find_element_by_id("kw1").is_displayed())
print(is_disappeared)

# 错误用法   until() 第一个参数应该是方法,此处传入的是WebElement对象,所以不正确,可参照上面的写法
# WebDriverWait(driver, 10).until(driver.find_element_by_id('kw'))
driver.close()

4. 总结

  • sleep():强制等待n秒,影响程序执行速度
  • implicitly_wait():隐式等待,全局性,设置一次即可,针对的是整个页面是否加载完成
  • WebDriverWait():显示等待,针对单个元素判断,灵活
  • 隐式等待和显时等待同时使用时,超时时间取两者最长的

 

 

内容概要:本文详细介绍了如何使用Scrapy爬虫进行网站图片爬取。首先,文章阐述了Scrapy的特点和优势,如异步网络库、灵活的架构设计、强大的XPath和CSS选择器、自动请求管理和管道系统等。接着,文章讲解了环境搭建和项目创建的具体步骤,包括Python和Scrapy的安装,以及创建Scrapy项目的命令和项目结构。随后,文章深入解析了爬取流程的各个环节,如确定目标网站与图片链接、编Spider、定义和使用Items、设置和实现Pipeline以及关键的Settings配置。最后,文章通过实战演练展示了完整的代码实现,并讨论了常见问题及其解决方案,如反爬虫机制应对、图片链接异常处理和存储问题解决。 适合人群:具备一定编程基础,特别是对Python有一定了解的读者,尤其是对爬虫技术和图片爬取感兴趣的开发人员。 使用场景及目标:①学习Scrapy爬虫的基本概念和特点;②掌握从环境搭建到项目创建的具体步骤;③理解爬取流程的各个环节,包括确定目标网站、编Spider、定义Items、设置Pipeline和配置Settings;④通过实战演练掌握完整的爬虫代码实现;⑤解决爬取过程中遇到的常见问题,如反爬虫机制、图片链接异常和存储问题。 阅读建议:本文内容详实,涉及从理论到实践的多个方面,建议读者在阅读过程中结合实际操作进行练习,特别是在环境搭建和代码编阶段,多尝试不同的配置和实现方式,以便更好地理解和掌握Scrapy爬虫的使用方法。同时,注意遵守网站的robots.txt协议,尊重网站规则,避免对网站造成不必要的压力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱学习de测试小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值