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类和继承用法实例
Jul 07 Python
Python的Django框架下管理站点的基本方法
Jul 17 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
django中的图片验证码功能
Sep 18 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
python3下pygame如何实现显示中文
Jan 11 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
Python如何绘制日历图和热力图
Aug 07 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
宝塔更新Python及Flask项目的部署
Apr 11 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中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
js计数器代码
2006/11/04 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
asm.js使用示例代码
2013/11/28 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
python 实现堆排序算法代码
2012/06/05 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
Django模板Templates使用方法详解
2019/07/19 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
解决python3输入的坑——input()
2020/12/05 Python
python用700行代码实现http客户端
2021/01/14 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
《太阳》教学反思
2014/02/21 职场文书
职业女性的职业规划
2014/03/04 职场文书
助理政工师申报材料
2014/06/03 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
用Java实现简单计算器功能
2021/07/21 Java/Android
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript