我们在使用selenium的时候,会遇到一种定位不到的情况,因为web页面有一个加载的过程 当页面元素未出现时,去定位肯定是定位不到的,所以我们需要用到了‘等待’,该如何使用等待呢,让我们一起来探讨一下吧!

time.sleep()强制等待

time模块,是python专门用来处理时间的内建库。
我们可以使用它时需要导入 import time
time.sleep(2) 意思是强制休眠2秒种的时间
这样等待的弊端是,我们已经定位到元素的时候,还会继续等待,导致我们工作效率很低 所以WebDriver提供了两种类型的等待:隐式等待和显式等待

implicitly_wait()隐式等待

该方法来实现隐式等待,默认参数的单位为秒,如里面的参数设置等待时长为10秒。
当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;
如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。
假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。
该等待设置完是对整个全局起作用,所以只需设置一次即可,不需要导入任何模块,直接使用

WebDriverWait():显式等待

是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔0.5时间检测一次特定的元素是否存在,
如果在设置的时间内找到了元素,则直接执行。如果超过设置最长等待时间检测不到则抛出异常。
默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。
该方法需要导入By 、WebDriverWait 、expected_conditions
下面的代码是对三种等待的具体例子:

 from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECimport timedriver=webdriver.Chrome() driver.implicitly_wait(5) #隐式等待driver.get('http://www.baidu.com')time.sleep(3) #强制等待driver.find_element_by_id('kw').send_keys('特朗普')#每隔0.5秒检查一次(默认就是0.5秒。也可以修改),最多等待10秒,直到找到ID="su"元素就执行,否则抛出异常 element=WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located((By.ID,'su'))) #显式等待element.click()time.sleep(2)driver.quit()

补充一点
presence_of_element_located 检查元素是否存在,但是并不一定可见。
visibility_of_element_located 检查元素存在,并且可见于页面,也就是能定位到它

三种等待方式:强制等待、显式等待、隐式等待相关推荐

  1. CSS的三种链接方式(内联式、嵌入式、外部式)

    内联式CSS样式 其实就是用html中style属性 <p style="color:blue">示例</p> 嵌入式CSS样式 嵌入式css样式,就是可以 ...

  2. Verilog HDL三种描述方式

    一.数据流建模方式 在组合逻辑电路中,数据不会存储,因此输入信号经过电路变为输出信号类似于数据流动.可以通过连续赋值语句这种特性进行建模,这种建模方式通常被称为数据流建模. 连续赋值语句只能用来对连线 ...

  3. Java多线程:多线程同步安全问题的 “三“ 种处理方式 ||多线程 ”死锁“ 的避免 || 单例模式”懒汉式“的线程同步安全问题

    Java多线程:多线程同步安全问题的 "三" 种处理方式 ||多线程 "死锁" 的避免 || 单例模式"懒汉式"的线程同步安全问题 每博一文 ...

  4. FPGA之道(41)HDL的三种描述方式

    文章目录 前言 三种描述方式 结构化描述方式 数据流描述方式 行为级描述方式 前言 常编写Verilog代码的就会知道,我们对于某一功能的描述,可以通过门电路来描述,也可以直接描述其功能等,这就牵扯到 ...

  5. 【 Verilog HDL 】HDL的三种描述方式

    当我们使用HDL代码描述硬件功能的时候,主要有三种基本描述方式,即结构化描述方式.数据流描述方式和行为级描述方式.通过本次总结,我们将明白到底我们描述的电路是什么方式描述的. 结构化描述方式 结构化描 ...

  6. Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)

    阅读目录 一.MVC与MTV 二.多对多表的创建 三.ajax,前后端传输编码格式contentType 四.批量插入数据与自定义分页器 摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端 ...

  7. memcached 分布式锁 java_分布式锁的三种实现方式

    分布式锁的三种实现方式 一.zookeeper 1.实现原理: 基于zookeeper瞬时有序节点实现的分布式锁,其主要逻辑如下(该图来自于IBM网站).大致思想即为:每个客户端对某个功能加锁时,在z ...

  8. vue.js三种安装方式

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

  9. HDL语言三种描述方式--结构化描述方式、数据流描述方式、行为级描述方式

    当我们使用HDL代码在描述硬件功能时,主要有三种描述方式,即结构化描述方式.数据流描述方式.行为级描述方式.在平时编程时,可根据实际情况及个人喜好选择其中一种或者几种混合在一起进行自己的HDL代码编写 ...

  10. xml的三种解析方式

    本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...

最新文章

  1. 皮一皮:论脑回路的新奇指数...
  2. TEEC_RegisterSharedMemory和TEEC_AllocateSharedMemory的区别
  3. 乐鑫代理启明云端分享|ESP32驱动1.54inch(240*240)彩屏
  4. android 学习记录-----------android 活动 意图 碎片
  5. 用数组存储循环序号的数据
  6. vs怎么调试php程序,vscode如何调试运行c#程序
  7. Silkroad 与 Tesseract 通信协议 QuestionModel
  8. linux连不上网 ens33,如何解决Linux 系统下 ifconfig 命令无网络接口 ens33
  9. uip UDP 服务器广播模式(客户端可以任意端口,并且主动向客户端发送数据) (转)...
  10. FluentValidation:一个非常受欢迎的,用于构建强类型验证规则的.NET 库
  11. Java基础三:Java 核心技术
  12. 一分钟了解TCP/IP网络通信协议
  13. 欧姆龙, PLC CJ2M标准程序,一共控制12个伺服电机
  14. Unity属性(Attributes)
  15. 《一只特例独行的猪》摘抄
  16. 故障:不能 demote 域控制器
  17. RO,RW,ZI,FLASH,RAM前世今生
  18. 【XMind学习笔记02】 你不得不知的5大功能
  19. 特斯拉如何开发基于纯视觉的深度学习系统
  20. 中层管理者应该做什么?

热门文章

  1. 笔记本给移动设备共享wifi
  2. java所有单词_JAVA常用英语单词列表
  3. Vue 项目提示:`(Emitted value instead of an instance of Error) the “scope“ attribute for scoped slots
  4. 996M11鹅厂这些互联网行业“黑话”,你知多少?
  5. SATA硬盘电源线或数据线引发的故障
  6. 新的打卡地诞生!三星家电出没网红咖啡厅
  7. 127.0.0.1、192.168.0.111、本机地址、URL
  8. 知乎高赞:35岁的程序员,最后都去了哪儿?是在路边摊炒粉和做烤鸭?
  9. Pr:导出设置之字幕
  10. (近5w字)面向小白のVue全家桶开发电商管理系统项目总结文档