Python爬虫之Selenium设置元素等待的方法


Posted in Python onDecember 04, 2020

一、显式等待

WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常(TimeoutException)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')

element = WebDriverWait(driver, 5, 0.5).until(
      EC.presence_of_element_located((By.ID, "kw"))
      )
element.send_keys('selenium')
time.sleep(5)

driver.quit()

语法:

  • WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None).until(method, message=‘')

参数说明如下:

  • driver:浏览器驱动
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔时间,默认为0.5s
  • ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
  • until(method, message=‘'):调用该方法提供的驱动程序作为一个参数,直到返回值为True
  • until_not(method, message=‘'):调用该方法提供的驱动程序作为一个参数,直到返回值为False
  • presence_of_element_located():判断元素是否存在。

二、隐式等待

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time

driver = webdriver.Chrome()

# 设置隐式等待为5秒
driver.implicitly_wait(5)
driver.get("http://www.baidu.com")

try:
 print(time.strftime('%Y-%m-%d %H:%M:%S'))
 driver.find_element_by_id("123456").send_keys('selenium') #不存在的id,看输出报错和时间
 # driver.find_element_by_id("kw").send_keys('selenium') # 存在的id
except NoSuchElementException as e:
 print(e)
finally:
 print(time.strftime('%Y-%m-%d %H:%M:%S'))
 driver.quit()

implicitly_wait() 默认0,参数的单位为秒,上边设置的等待时间为5秒,这个时间不像time.sleep(5)那样直接睡5秒;当执行流程到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以循环的方式不断地判断元素是否被定位到。比如说在1秒的时候定位到了,那么直接向下运行如果超出设置时长,则抛出异常。

Selenium文集传送门:

标题 简介
Python爬虫 - Selenium(1)安装和简单使用 详细介绍Selenium的依赖环境在Windows和Centos7上的安装及简单使用
Python爬虫 - Selenium(2)元素定位和WebDriver常用方法 详细介绍定位元素的8种方式并配合点击和输入、提交、获取断言信息等方法的使用
Python爬虫 - Selenium(3)控制浏览器的常用方法 详细介绍自定义浏览器窗口大小或全屏、控制浏览器后退、前进、刷新浏览器等方法的使用
Python爬虫 - Selenium(4)配置启动项参数 详细介绍Selenium启动项参数的配置,其中包括无界面模式、浏览器窗口大小设置、浏览器User-Agent (请求头)等等
Python爬虫 - Selenium(5)鼠标事件 详细介绍鼠标右击、双击、拖动、鼠标悬停等方法的使用
Python爬虫 - Selenium(6)键盘事件 详细介绍键盘的操作,几乎包含所有常用按键以及组合键
Python爬虫 - Selenium(7)多窗口切换 详细介绍Selenium是如何实现在不同的窗口之间自由切换
Python爬虫 - Selenium(8)frame/iframe表单嵌套页面 详细介绍如何从当前定位的主体切换为frame/iframe表单的内嵌页面中
Python爬虫 - Selenium(9)警告框(弹窗)处理 详细介绍如何定位并处理多类警告弹窗
Python爬虫 - Selenium(10)下拉框处理 详细介绍如何灵活的定位并处理下拉框
Python爬虫 - Selenium(11)文件上传 详细介绍如何优雅的通过send_keys()指定文件进行上传
Python爬虫 - Selenium(12)获取登录Cookies,并添加Cookies自动登录 详细介绍如何获取Cookies和使用Cookies进行自动登录
Python爬虫 - Selenium(13)设置元素等待 详细介绍如何优雅的设置元素等待时间,防止程序运行过快而导致元素定位失败
Python爬虫 - Selenium(14)窗口截图 详细介绍如何使用窗口截图
Python爬虫 - Selenium(15)关闭浏览器 详细介绍两种关闭窗口的区别

到此这篇关于Python爬虫之Selenium设置元素等待的方法的文章就介绍到这了,更多相关Selenium 元素等待内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
Python的设计模式编程入门指南
Apr 02 Python
python引用DLL文件的方法
May 11 Python
简单谈谈Python中的反转字符串问题
Oct 24 Python
python虚拟环境virtualenv的安装与使用
Sep 21 Python
详解Python locals()的陷阱
Mar 26 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 Python
Python实现播放和录制声音的功能
Aug 12 Python
pytorch中的model.eval()和BN层的使用
May 22 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 #Python
Python爬虫中Selenium实现文件上传
Dec 04 #Python
利用python进行文件操作
Dec 04 #Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 #Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 #Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 04 #Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 #Python
You might like
我的论坛源代码(九)
2006/10/09 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
python+selenium+autoit实现文件上传功能
2017/08/23 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
python命令行参数用法实例分析
2019/06/25 Python
python django生成迁移文件的实例
2019/08/31 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2015年推普周活动总结
2015/03/27 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
详解redis分布式锁的这些坑
2021/05/19 Redis
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android