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中操作mysql的pymysql模块详解
Sep 13 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
Python模块搜索路径代码详解
Jan 29 Python
python如何求解两数的最大公约数
Sep 27 Python
Python的iOS自动化打包实例代码
Nov 22 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
django实现支付宝支付实例讲解
Oct 17 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
Python调用飞书发送消息的示例
Nov 10 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
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
Vue自定义指令详解
2017/07/28 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
Python 学习笔记
2008/12/27 Python
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
Python根据服务获取端口号的方法
2019/09/25 Python
python网络编程之五子棋游戏
2020/05/14 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
爱情寄语大全
2014/04/09 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
新年晚会开场白
2015/05/29 职场文书
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers