在使用selenium进行操作时,有时候在定位元素时会报错。这可能是因为元素还没有来得及加载导致的。可以等过元素等待,等待元素出现。有强制等待,显式等待,隐式等待。

强制等待

就是之前文章中的time.sleep(),只是为了看到界面操作效果才那样设置的。这个是不管找没找到都会等待的。基本代码中不会用这个。

显式等待

WebDriverWait类是WebDriver提供的等待方法。在设置的时间内,会每隔一段时间去检查一次当前页面元素是否存在,如果超过设置时间还没有见到到就抛出异常。具体格式如下:

需要先导入from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver:浏览器实例

timeout:超时时间,默认已秒为单位

poll_frequency:检测时间间隔,默认0.5秒

ignored_exceptions:报错信息,默认抛出NoSuchElementException

一般是配合until()和until_not()方法使用

until():可以传两个参数,第一个参数是判断条件,直到第一个参数返回True。第二个参数可以写文字说明。

until_not():可以传两个参数,第一个参数是判断条件,直到第二个参数返回False。第二个参数可以写文字说明

expected_conditions类下提供预期条件判断方法,具体有哪些方法可以自己查下,以title_is()方法举例,对比title是否正确的。

需要先导入from selenium.webdriver.support import expected_conditions

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
dr = webdriver.Chrome()
dr.maximize_window()
dr.get("https://www.baidu.com")#打开百度
tr = dr.title#获取title
wait = WebDriverWait(dr,10)#实例化显示等待,设置等待时间10秒
s = wait.until_not(expected_conditions.title_is(tr),'出错了')#对比title
print(s)

因为title肯定一致,返回的是True,所以until_not()肯定不会对。会一直等待着,直到10秒结束。可以改成until()再看下。

隐式等待

WebDriver类下的implicitly_wait()方法可以设置隐式等待。这个只会在脚本进行元素定位相关的时候执行,会在设置的时间内不断的判断这个元素是否被找到了

from selenium import webdriver
from time import ctime
dr = webdriver.Chrome()
dr.maximize_window()
dr.implicitly_wait(10)
try:
dr.get("https://www.baidu.com")#打开百度
print(ctime())
tr = dr.find_element_by_id('kw123')
except BaseException as f:
print(f)
print(ctime())
finally:
dr.close()

因为没有一个id是叫kw123,所以肯定会找不到,通过秒数可以看到等待了10秒。

一般这个用的比较多,在浏览器初始化之后设置。之后所有定位元素的操作,都会有等待时间的设置。

python3+selenium入门07-元素等待的更多相关文章

  1. selenium webdriver——设置元素等待

    如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibl ...

  2. Selenium 3----设置元素等待

    在做Web应用的自动化测试时,定位元素必不可少,这个过程经常出现定位不到元素的情况,常见原因有哪些呢? 1.描述错误 提高编写水平.细心 2.Frame/Iframe框架原因 在元素所在框架里定位该元 ...

  3. selenium学习之元素等待(四)

    --为什么要设置元素等待: 目前大多数web应用程序都是使用AJAX和JavaScript开发,每次加载一个网页,包括静态网页和动态网页,也就是加载各种HTML标签和JS文件.在网页中进行元素定位时, ...

  4. python3+selenium入门05-元素操作及常用方法

    学习了元素定位之后,来看一些元素的操作,还有一些常用的方法 clear()清空输入框内容 click()点击 send_keys()键盘输入 import time from selenium imp ...

  5. python3+selenium入门01-环境搭建

    作为一个测试,在最近两年应该有明显的感觉.那就是工作变的难找,要求变的高了,自动化测试,性能测试等.没有自动化测试能力,只会点点点工作难找不说,工资也不高.所以还是要学习一些技术.首先要学习一门编程语 ...

  6. selenium - webdriver - 设置元素等待

    隐式等待:implicitly_wait(value), value默认是0 from selenium import webdriverfrom selenium.common.exceptions ...

  7. selenium - 三种元素等待

    1.sleep 休眠方法 sleep()由python的time模块提供. 当执行到sleep()方法时,脚本会定时休眠所设置的时长,sleep()方法默认参数是s(秒),sleep(2) 表示休眠2 ...

  8. Python +selenium之设置元素等待

    注:本文转载http://www.cnblogs.com/mengyu/p/6972968.html 当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给元素的定位增加了困难.如果因为在加 ...

  9. python3+selenium入门15-执行JavaScript

    有时有些功能需要通过js来执行,比如拖动浏览器的滚动条.通过execute_script()方法可以执行js的代码 window.scrollTo()可以传两个参数,第一个参数是下方滚动条的位置,第二 ...

随机推荐

  1. 【C#】C#创建自定义Object对象

    艹,老是忘!!! }; 记录一下,var obj = new { Name="lily",Age=12};

  2. ESB简介及选型(转) http://www.cnblogs.com/skyme/archive/2012/08/06/2623414.html

    什么是ESB 企业服务总线(Enterprise Service Bus,ESB)的概念是从面向服务体系架构(Service Oriented Architecture, SOA)发展而来的.SOA描 ...

  3. Chrome DevTools: Export your raw Code Coverage Data

    The Code Coverage tool visually shows you which lines of code in your CSS and JavaScript are used an ...

  4. golang实现tcp编程

    实现简单的tcp服务 package main import ( "fmt" "net" ) func main() { fmt.Println("服 ...

  5. Oracle的to_char()函数使用

    (1)用作日期转换: to_char(date,'格式'); select to_date('2005-01-01 ','yyyy-MM-dd') from dual; select to_char( ...

  6. Information Retrieval 倒排索引 学习笔记

    一,问题描述 在Shakespeare文集(有很多文档Document)中,寻找哪个文档包含了单词“Brutus”和"Caesar",且不包含"Calpurnia&quo ...

  7. 代码管理工具:使用github和git工具管理自己的代码

    一.git工具和账户创建 1.1 安装 Git 是 Linus Torvalds 最近实现的源代码管理软件."Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系 ...

  8. 【python小练】0014题 和 0015 题

    第 0014 题: 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: { ":["张三",150,120,100], ":[& ...

  9. solr 中文分词器IKAnalyzer和拼音分词器pinyin

    solr分词过程: Solr Admin中,选择Analysis,在FieldType中,选择text_en 左边框输入 “冬天到了天气冷了小明不想上学去了”,点击右边的按钮,发现对每个字都进行分词. ...

  10. tensorflow faster rcnn 代码分析一 demo.py

    os.environ["CUDA_VISIBLE_DEVICES"]=2 # 设置使用的GPU tfconfig=tf.ConfigProto(allow_soft_placeme ...