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 相关文章推荐
寻找网站后台地址的python脚本
Sep 01 Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
python复制文件到指定目录的实例
Apr 27 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
java中的控制结构(if,循环)详解
Jun 26 Python
Python实现微信翻译机器人的方法
Aug 13 Python
Python Scrapy图片爬取原理及代码实例
Jun 12 Python
Python装饰器结合递归原理解析
Jul 02 Python
Python执行时间的几种计算方法
Jul 31 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 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
一个基于PDO的数据库操作类
2011/03/24 PHP
基于php下载文件的详解
2013/06/02 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
python函数装饰器用法实例详解
2015/06/04 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
详解Django 时间与时区设置问题
2019/07/23 Python
python绘制分布折线图的示例
2020/09/24 Python
python 通过exifread读取照片信息
2020/12/24 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
为什么要用EJB
2014/04/17 面试题
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
实习单位推荐信范文
2013/11/27 职场文书
大学生专科学习生活的自我评价
2013/12/07 职场文书
保密承诺书范文
2014/03/27 职场文书
Mysql数据库命令大全
2021/05/26 MySQL
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android