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 判断一个进程是否存在
Apr 09 Python
go和python调用其它程序并得到程序输出
Feb 10 Python
python中的yield使用方法
Feb 11 Python
matlab中实现矩阵删除一行或一列的方法
Apr 04 Python
简单了解python关系(比较)运算符
Jul 08 Python
Django 外键的使用方法详解
Jul 19 Python
python3.7 的新特性详解
Jul 25 Python
wxpython布局的实现方法
Nov 01 Python
Python操作多维数组输出和矩阵运算示例
Nov 28 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
如何在Python中创建二叉树
Mar 30 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 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 将excel导入mysql
2009/11/09 PHP
PHP中用正则表达式清除字符串的空白
2011/01/17 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
python 捕获shell脚本的输出结果实例
2017/01/04 Python
django框架如何集成celery进行开发
2017/05/24 Python
python skimage 连通性区域检测方法
2018/06/21 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
《落花生》教学反思
2014/02/25 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
五四青年节的活动方案
2014/08/20 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
护士年终考核评语
2014/12/31 职场文书
二年级语文下册复习计划
2015/01/19 职场文书
初中体育教学随笔
2015/08/15 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL
一文简单了解MySQL前缀索引
2022/04/03 MySQL