1、目的背景

解决问题:下拉框定位不到、弹框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待。

原因:代码运行速度快,而浏览器加载渲染速度慢

解决办法:加等待,目前三种等待方式:强制等待、隐性等待、显性等待

2、强制等待 sleep(xx)

不管你浏览器是否加载完了,程序都得等待XX秒,XX秒一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。

3、隐性等待 implicitly_wait(xx)

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。

注意:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

弊端:那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步

4、显性等待 WebDriverWait

程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者

# -*- coding: utf-8 -*-

from selenium import webdriver

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

driver = webdriver.Firefox()

driver.implicitly_wait(10) # 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者

driver.get('https://huilansame.github.io')

locator = (By.LINK_TEXT, 'CSDN')

try:

WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator)) # 每隔 0.5s 执行一次,直到 20s

print driver.find_element_by_link_text('CSDN').get_attribute('href')

finally:

driver.close()

WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

selenium.webdriver.support.wait.WebDriverWait(类)

__init__

driver: 传入WebDriver实例,即我们上例中的driver

timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)

poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒

ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。

until

method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False

message: 如果超时,抛出TimeoutException,将message传入异常

until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同,不再赘述。

method

message

python的等待代码是什么_Python selenium 三种等待方式详解相关推荐

  1. python selenium 等待页面加载_python selenium 三种等待方式详解(实战常用)

    引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待了,等待元素可见再继续运行程序: 注:当使用该放发的时 ...

  2. python三种等待方式_Python selenium 三种等待方式详解

    本文摘自:http://blog.csdn.net/huilan_same/article/details/52544521 发现太多人不会用等待了,博主今天实在是忍不住要给大家讲讲等待的必要性. 很 ...

  3. python编程midi键盘按键_Python中捕获键盘的方式详解

    python中捕获键盘操作一共有两种方法 第一种方法: 使用pygame中event方法 使用方式如下:使用键盘右键为例 if event.type = pygame.KEYDOWN and even ...

  4. python获取键盘按键_Python中捕获键盘的方式详解

    python中捕获键盘操作一共有两种方法 第一种方法: 使用pygame中event方法 使用方式如下:使用键盘右键为例 if event.type = pygame.KEYDOWN and even ...

  5. python selenium 三种等待方式详解

    引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待了,等待元素可见再继续运行程序: 正文: 1.强制等待 ...

  6. python数据清理的实践总结_python 数据的清理行为实例详解

    python 数据的清理行为实例详解 数据清洗主要是指填充缺失数据,消除噪声数据等操作,主要还是通过分析"脏数据"产生的原因和存在形式,利用现有的数据挖掘手段去清洗"脏数 ...

  7. python采用单例模式游戏_Python实现Singleton模式的方式详解

    前言 使用python实现设计模式中的单例模式.单例模式是一种比较常用的设计模式,其实现和使用场景判定都是相对容易的.本文将简要介绍一下python中实现单例模式的几种常见方式和原理.一方面可以加深对 ...

  8. python源程序文件的扩展名_python程序文件扩展名知识点详解

    python程序文件的扩展名称是什么 python程序的扩展名有.py..pyc..pyo和.pyd..py是源文件,.pyc是源文件编译后的文件,.pyo是源文件优化编译后的文件,.pyd是其他语言 ...

  9. python分析方向的第三方库_Python标准库与第三方库详解

    干货大礼包!21天带你轻松学Python(文末领取更多福利) 点击查看课程视频地址 本课程来自于千锋教育在阿里云开发者社区学习中心上线课程<Python入门2020最新大课>,主讲人姜伟. ...

最新文章

  1. 浅析高端网站建设策划方案都包括哪些内容?
  2. android WPS如何绘制垂直和水平的直线
  3. cometoj contest 6(记录型博客)
  4. java异常处理机制_Java编程中的异常机制
  5. UVA 10129 Play on Words
  6. 对抗攻击之SMI-FGSM:北航提出用空间动量提高对抗迁移性
  7. Redis 排行榜 相同分数根据时间优先排行
  8. Android 系统性能优化(74)---如何减少lowmemory的发生几率
  9. 全国计算机二级报名入口新疆,新疆2019年3月全国计算机等级(NCRE)考试(第54次)报名入口...
  10. JSP(一):JSP概要
  11. 别再写一堆的 for 循环了!Java 8 中的 Stream 轻松遍历树形结构,是真的牛逼!...
  12. java图片循环_java – 如何实现无限图像循环?
  13. tar打包忽略某个目录
  14. C++ opencv基于帧差法的关键帧提取
  15. 关于DJI Phantom 3 Advanced大疆精灵3A遥控器固件升级问题的解决办法
  16. 易思ESPCMS企业建站管理系统 P8.21120101 稳定版
  17. MySQL Error:1677
  18. VINS-Mono视觉SLAM总体设计框架解读
  19. Oracle定时任务dbms_scheduler
  20. mencoder的配置文件

热门文章

  1. 暖通专业标准规范大全_完美!暖通空调专业工程量计算知识大全
  2. 前端证券项目_证监会公告[2018]6号 证券公司投资银行类业务内部控制指引
  3. linux下expdp定时备份_Linux下定时任务的配置
  4. 2020计算机原理组成1254,1254计算机科学与技术专业计算机组成原理A科目2020年09月国家开 放大学(中央广播电视大学)考试试题及答案.pdf...
  5. Linux pwn入门教程,i春秋linux_pwn入门教程复现之栈溢出基础
  6. socket、端口、进程的关系
  7. BZOJ4591 SHOI2015超能粒子炮·改(卢卡斯定理+数位dp)
  8. Hibernate 连接不同数据库的方言
  9. 17秋 软件工程 团队第五次作业 Alpha Scrum9
  10. js判断设备、浏览器类型