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秒
相关推荐
初学小刘16 分钟前
基于 U-Net 的医学图像分割
python·opencv·计算机视觉
B站计算机毕业设计之家34 分钟前
Python招聘数据分析可视化系统 Boss直聘数据 selenium爬虫 Flask框架 数据清洗(附源码)✅
爬虫·python·selenium·机器学习·数据分析·flask
雪碧聊技术40 分钟前
爬虫是什么?
大数据·爬虫·python·数据分析
FL16238631291 小时前
[yolov11改进系列]基于yolov11使用fasternet_t0替换backbone用于轻量化网络的python源码+训练源码
python·yolo·php
Freshman小白1 小时前
python算法打包为docker镜像(边缘端api服务)
python·算法·docker
岁岁岁平安1 小时前
python mysql-connector、PyMySQL基础
python·mysql·pymysql
铁锹少年1 小时前
当多进程遇上异步:一次 Celery 与 Async SQLAlchemy 的边界冲突
分布式·后端·python·架构·fastapi
梨轻巧1 小时前
pyside6常用控件:QCheckBox() 单个复选框、多个复选框、三态模式
python
寒秋丶2 小时前
Milvus:集合(Collections)操作详解(三)
数据库·人工智能·python·ai·ai编程·milvus·向量数据库
寒秋丶2 小时前
Milvus:Schema详解(四)
数据库·人工智能·python·ai·ai编程·milvus·向量数据库