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中format()函数的简单使用教程
Mar 14 Python
python的dataframe和matrix的互换方法
Apr 11 Python
Django rest framework工具包简单用法示例
Jul 20 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
Python实现简单的用户交互方法详解
Sep 25 Python
对python添加模块路径的三种方法总结
Oct 16 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
Python OpenCV图像指定区域裁剪的实现
Oct 30 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 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
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
vue中Element-ui 输入银行账号每四位加一个空格的实现代码
2018/09/14 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
python操作oracle的完整教程分享
2018/01/30 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Python 实现自动登录+点击+滑动验证功能
2020/06/10 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
DataList 能否分页,请问如何实现?
2015/05/03 面试题
运动会领导邀请函
2014/01/10 职场文书
青年文明号服务承诺
2014/03/31 职场文书
师德师风演讲稿
2014/05/05 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
作弊检讨书
2015/01/27 职场文书
爱国教育主题班会
2015/08/14 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang