selenium web自动化判断页面元素加载完毕
主要方便以后用到时查阅,侵删!
三种等待方法:
1.强制等待sleep(xx)
强制等待,不管你浏览器是否加载完了,程序都得等待,时间一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。
2.隐性等待implicitly_wait(xx)
隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。有些时候我们不需要等到所有元素加载完成,我想等我要的元素出来之后就立马执行下一步,那就应该用显性等待。
3.显性等待WebDriverWait(driver,timeout,xx),配合该类的until()和until_not()方法
程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。
判断条件:expected_conditions
导入模块:selenium.webdriver.support.expected_conditions
#coding=utf-8
from selenium import webdriver
from time import sleep
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()
url = "https://www.baidu.com"
timeout = 20
driver.implicitly_wait(10) #隐式等待和显示等待都存在时,超时时间取二者中较大的
driver.get(url)
#强制等待:强制等3秒再执行下一步
#sleep(3)#隐性等待:隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步
#隐性等待对整个driver的周期都起作用,所以只要设置一次即可
#driver.implicitly_wait(30)#显性等待:WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。
#它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException
#until方法:当某元素出现或什么条件成立则继续执行
#until_not方法:当某元素消失或什么条件不成立则继续执行#expected_conditions:selenium的一个模块,其中包含一系列可用于判断的条件:
#以下两个条件类验证title,验证传入的参数title是否等于或包含于driver.title
#title_is
#title_contains#以下两个条件验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, ‘kw’)
#顾名思义,一个只要一个符合条件的元素加载出来就通过;另一个必须所有符合条件的元素都加载出来才行
#presence_of_element_located
#presence_of_all_elements_located#以下两个条件判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value
#text_to_be_present_in_element
#text_to_be_present_in_element_value#以下条件判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
#frame_to_be_available_and_switch_to_it#以下条件判断是否有alert出现
#alert_is_present#以下条件判断元素是否可点击,传入locator
#element_to_be_clickable#以下四个条件判断元素是否被选中,第一个条件传入WebElement对象,第二个传入locator元组
#第三个传入WebElement对象以及状态,相等返回True,否则返回False
#第四个传入locator以及状态,相等返回True,否则返回False
#element_to_be_selected
#element_located_to_be_selected
#element_selection_state_to_be
#element_located_selection_state_to_be#最后一个条件判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了
#staleness_oflocator = (By.LINK_TEXT,"设置")
try:print(WebDriverWait(driver,timeout).until(EC.title_is(u"百度一下,你就知道")))print(WebDriverWait(driver,timeout).until(EC.title_contains(u"知道")))WebDriverWait(driver,timeout).until(EC.presence_of_element_located(locator))WebDriverWait(driver,timeout).until(EC.visibility_of_element_located((By.ID,'su')))WebDriverWait(driver,timeout).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u"设置"))WebDriverWait(driver,timeout).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))WebDriverWait(driver,timeout).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))WebDriverWait(driver,timeout).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()#WebDriverWait(driver,timeout).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]")))'''instance = WebDriverWait(driver,timeout).until(EC.alert_is_present())print(instance.text())instance.accept()''''''判断某个页面上是否存在alert,如果有alert则返回alert内容,并通过'''print(driver.find_element_by_link_text("设置").get_attribute('href'))# 打印当前页面titleprint(driver.title)# 打印当前页面URLprint(driver.current_url)
finally:#关闭当前页面driver.close()
#退出浏览器
#driver.quit()
selenium web自动化判断页面元素加载完毕相关推荐
- selenium之如何等待页面元素加载完成
webdriver中我们用两种方式进行等待:明确的等待和隐性的等待. 明确的等待 明确的等待是指在代码进行下一步操作之前等待某一个条件的发生.最不好的情况是使用Thread.sleep()去设置一段确 ...
- Selenium Web 自动化 - 如何找到元素
Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp ...
- 如何判断C# webbrower页面是否加载完毕方法
如何判断C# webbrower页面是否加载完毕方法 ? | 浏览:116 | 更新:2014-08-21 14:48 webbrower里面,每次打开一个页面,里面有多个iframe,那么navig ...
- python 爬虫+selenium 全自动化下载JS动态加载漫画
** python 爬虫+selenium 全自动化下载JS动态加载漫画 最近刚学的python,代码可能并不规范,希望大家见谅! 爬取之前,我们首先需要做一些准备工作,因为很多网站都有反爬检索,为了 ...
- html 判断页面加载完成,Javascript判断页面是否加载完成
很多时候我们在使用document.getElementById的时候直接在script标签中获取对象,然后使用,此时程序会出现该对象为undefined. var dom=document.getE ...
- JavaScript 判断 DOM 何时加载完毕
处理HTML DOM文档存在一个难题是,JavaScript可以在DOM完全加载之前执行,这会给你的代码引发不少的潜在问题.浏览器的渲染和操作顺序大致如下列表: HTML解析完毕 外部脚本和样式表加载 ...
- js 判断iframe是否加载完毕
js 判断iframe是否加载完毕 CreationTime--2018年9月13日15点30分 Author:Marydon 1.javascript实现 window.onload = funct ...
- 【转】JS判断SWF,JPG加载完毕、兼容(Activex,plugIn)所有浏览器
JS判断SWF,JPG加载完毕.兼容(Activex,plugIn)所有浏览器 这里主要说下监听SWF的加载. 网上流传已久的监听方法,只能在IE(Activex插件下)下实现.在使用plugin的浏 ...
- jQuery:等页面DOM加载完毕后再执行代码
等着页面DOM加载完毕后再执行代码 第一种方式(比较麻烦,不常用): $(document).ready(function(){ - }) 第二种方式(常用): $(function(){ - }) ...
最新文章
- Rocksdb DeleteRange实现原理
- Android 获取apk签名的fingerprint
- 一九四六年首台电子计算机,2012年计算机一级MsOffice第四十九套练习题及答案解析...
- uva111346Probability
- 常用数据结构及复杂度
- Python rfind()方法
- 一款非常好用的音乐标签及管理工具:Yate for Mac
- JAVA面试要点010---重入锁_ReentrantLock 详解
- java逻辑判断_阿里JAVA开发强制要求的10条条件控制及逻辑判断的规范,切记
- linux网卡参数配置方法,Linux网卡参数配置方法教程
- maven内存不足:Unexpected error occurred: Not enough memory to allocate buffers for rehashing Java heap
- yb3防爆电机型号含义_温州出租大型发电机定做-智慧动力机械设备租赁
- 数学知识——博弈论(巴什博奕、尼姆博奕、威佐夫博奕)思路及例题
- OpenCV入门(八)——形态学技术
- ESP32编译速度慢问题
- 红帽子企业Linux 5安装序列号
- 4.1 c++左值和右值、类型转换
- 我的博客 http://aofengblog.blog.163.com/
- MVC设计模式 吉软
- 使用钉钉Api 向企业群发送文件 python
热门文章
- 浅谈一个新人的大数据之路-HiveQLSpark-SQL中谓词下推
- 天刀服务器在线人数统计,天刀手游各大区活跃人数统计 神刀削弱后不降反增!...
- Bandizip便携版右键菜单注册
- 学生计算机培训照片,四川新华电脑学校三维项目实训室参观照片
- PMP新考纲 敏捷题目 (五)
- Python实现将一张图片切成9宫格
- 分段概率密度矩估计_2017年考研《数学一》大纲
- 服务器2颗cpu的性能,DIY从入门到放弃:两颗CPU性能更强吗?
- 编程语言与冯诺伊曼体系结构
- 2019年6款最佳的wordpress主机推荐(优缺点分析)