Python爬虫基础——selenium模块进阶(显示等待和隐式等待)

在用使用selenium模块模拟用户操作浏览器时,浏览器会对加载的网页用到所有的资源发送请求,然而网络堵塞或者服务器繁忙等原因会导致各个资源的加载进度不一致,如果在网上尚未完全加载时就进行标签定位等操作,有可能因为标签不存在而出错。为了解决这一问题,我们需要为程序设置演延时。可使用Python内置的time模块可以实现让程序等待指定的时间,但这种方法需要在网页为加载完毕的地方设置等待。为了简化代码,本次采用selenium模块中定义的两种等待方法:显示等待和隐式等待。

python 复制代码
#3、1显示等待
'''
显示等待是指在指定条件成立时再进行下一步操作,如果条件一致不成立就一直等待,直到等待时间达到了设定的超过时间才报错。
使用显示等待需要使用WebDriverWait类,传入WebDriverWait对象和超时时间作为参数,配合until()或者until_not()函数进行条件设定
(可以利用expected_conditions类设定各种条件),更具返回值判断是否报错。
'''
# from selenium import webdriver
# from selenium.webdriver.chrome.service import Service
# from selenium.webdriver.common.by import By
# from selenium.webdriver.support import expected_conditions as EC
# from selenium.webdriver.support.ui import  WebDriverWait
# service = Service('E:\\python\\Scripts\\chromedriver.exe')      #实例化一个谷歌浏览器
# browser = webdriver.Chrome(service=service)
# browser.get('https://www.taobao.com')                           #访问淘宝网页首页
#
# #until()函数在等待期间会每个一段时间就判断元素是否存在,直到返回值不是Flase,如果超时则报错
# element = WebDriverWait(driver = browser, timeout = 10).until(EC.presence_of_element_located((By.ID,'q')))
# #until_not()函数在等待期间会每个一段时间就判断元素是否存在,直到返回值不是Flase,如果超时则报错
# element = WebDriverWait(driver = browser, timeout = 10).until_not(EC.presence_of_element_located((By.ID,'w')))

#3、2隐式等待
'''
隐式等待是指在实例化浏览器的WebDriverWait对象时,为该地想设置一个超时时间,在操作对象时,代码遇到元素未加载完毕或者不存在时,
会在规定的超出时间内不断地刷新页面在寻找该元素,直到找到该元素,如果超时还是找不到该元素,则会报错。这种方法适合元素缺少的情况。
'''
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import  WebDriverWait

service = Service('E:\\python\\Scripts\\chromedriver.exe')      #实例化一个谷歌浏览器
browser = webdriver.Chrome(service=service)
browser.get('https://www.taobao.com')                           #访问淘宝网页首页

browser.implicitly_wait(10)         #设置隐式等待,超过时间为10秒
相关推荐
trayvontang5 分钟前
Python虚拟环境与包管理工具(uv、Conda)
python·conda·uv·虚拟环境·miniconda·miniforge
伊织code8 分钟前
pdfminer.six
python·pdf·图片·提取·文本·pdfminer·pdfminer.six
hqxstudying34 分钟前
JAVA项目中邮件发送功能
java·开发语言·python·邮件
Q_Q5110082851 小时前
python的软件工程与项目管理课程组学习系统
spring boot·python·django·flask·node.js·php·软件工程
合作小小程序员小小店1 小时前
SDN安全开发环境中常见的框架,工具,第三方库,mininet常见指令介绍
python·安全·生成对抗网络·网络安全·网络攻击模型
后台开发者Ethan2 小时前
Python需要了解的一些知识
开发语言·人工智能·python
北京_宏哥2 小时前
Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
前端·python·面试
盼小辉丶2 小时前
PyTorch生成式人工智能——使用MusicGen生成音乐
pytorch·python·深度学习·生成模型
HAPPY酷4 小时前
给纯小白的Python操作 PDF 笔记
开发语言·python·pdf
传奇开心果编程5 小时前
【传奇开心果系列】Flet框架实现的家庭记账本示例自定义模板
python·学习·ui·前端框架·自动化