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线程池的实现实例
Nov 18 Python
python实现逆波兰计算表达式实例详解
May 06 Python
浅谈使用Python变量时要避免的3个错误
Oct 30 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
Python给图像添加噪声具体操作
Mar 03 Python
python 设置输出图像的像素大小方法
Jul 04 Python
django 信号调度机制详解
Jul 19 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
用python写一个带有gui界面的密码生成器
Nov 06 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
如何判断pytorch是否支持GPU加速
Jun 01 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
PHP - Html Transfer Code
2006/10/09 PHP
剖析 PHP 中的输出缓冲
2006/12/21 PHP
php 魔术方法使用说明
2009/10/20 PHP
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
php Session无效分析资料整理
2016/11/29 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
node.js读取文件到字符串的方法
2015/06/29 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
python3监控CentOS磁盘空间脚本
2018/06/21 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
Python ellipsis 的用法详解
2020/11/20 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
自我评价怎么写正确呢?
2013/12/02 职场文书
大队干部竞选演讲稿
2014/04/28 职场文书
2015年实习单位评语
2015/03/25 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server