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中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
Python实现的排列组合计算操作示例
Oct 13 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
Python列表解析配合if else的方法
Jun 23 Python
Python中修改字符串的四种方法
Nov 02 Python
python内存监控工具memory_profiler和guppy的用法详解
Jul 29 Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
利用python在excel中画图的实现方法
Mar 17 Python
Python短信轰炸的代码
Mar 25 Python
python基于pexpect库自动获取日志信息
Feb 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代码的函数
2008/07/22 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
php for 循环使用的简单实例
2016/06/02 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
php获取excel文件数据
2017/04/21 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
用jquery仿做发微博功能示例
2014/04/18 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
简单谈谈python中的语句和语法
2017/08/10 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
python logging日志模块以及多进程日志详解
2018/04/18 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
Python如何telnet到网络设备
2021/02/18 Python
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
意大利男装网店:Vrients
2019/05/02 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书