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基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
python爬取淘宝商品详情页数据
Feb 23 Python
python如何生成网页验证码
Jul 28 Python
python 获取图片分辨率的方法
Jan 08 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
基于python使用tibco ems代码实例
Dec 20 Python
Numpy之reshape()使用详解
Dec 26 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
python复合条件下的字典排序
Dec 18 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 Python
python必学知识之文件操作(建议收藏)
May 30 Python
python周期任务调度工具Schedule使用详解
Nov 23 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中mysql模块部分功能的简单封装
2011/09/30 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
jQuery textarea的长度进行验证
2009/05/06 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
简洁的十分钟Python入门教程
2015/04/03 Python
Django自定义用户认证示例详解
2018/03/14 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
pandas DataFrame运算的实现
2020/06/14 Python
python excel多行合并的方法
2020/12/09 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
班主任评语大全
2014/04/26 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
美术教师个人工作总结
2015/02/06 职场文书
初中团支书竞选稿
2015/11/21 职场文书
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android