这些方式仅供参考,实际使用体验并不好,最好对find_element()方法进行二次封装。

# coding=utf-8
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait url = "http://www.baidu.com"
driver = webdriver.Chrome()
'''隐式等待和显示等待都存在时,超时时间取二者中较大的'''
driver.implicitly_wait(5)
driver.get(url)
wait = WebDriverWait(driver, 10) '''判断title,返回布尔值'''
wait.until(EC.title_is(u"百度一下,你就知道")) '''判断title,返回布尔值'''
wait.until(EC.title_contains(u"百度一下")) '''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''
wait.until(EC.presence_of_element_located((By.ID, 'kw'))) # 注意(By.ID, 'kw')是元组 '''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''
wait.until(EC.visibility_of_element_located((By.ID, 'su'))) '''判断元素是否可见,如果可见就返回这个元素'''
wait.until(EC.visibility_of(driver.find_element(by=By.ID, value='kw'))) '''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''
wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav'))) '''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''
wait.until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR, '.mnav'))) '''判断指定的元素中是否包含了预期的字符串,返回布尔值'''
wait.until(EC.text_to_be_present_in_element((By.XPATH, "//*[@id='u1']/a[8]"),u'设置')) '''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''
wait.until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR, '#su'),u'百度一下')) '''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''
# 注意这里并没有一个frame可以切换进去
# wait.until(EC.frame_to_be_available_and_switch_to_it(locator)) '''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''
# 注意#swfEveryCookieWrap在此页面中是一个隐藏的元素
wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap'))) '''判断某个元素中是否可见并且是enable的,代表可点击'''
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u1']/a[8]"))).click() '''等待某个元素从dom树中移除'''
# 这里没有找到合适的例子
driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()
# wait.until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()
# wait.until(EC.staleness_of(driver.find_element(By.ID,'su'))) '''判断某个元素是否被选中了,一般用在下拉列表'''
wait.until(EC.element_to_be_selected(driver.find_element(By.XPATH, "//*[@id='nr']/option[1]"))) '''判断某个元素的选中状态是否符合预期'''
wait.until(EC.element_selection_state_to_be(driver.find_element(By.XPATH, "//*[@id='nr']/option[1]"),True)) '''判断某个元素的选中状态是否符合预期'''
wait.until(EC.element_located_selection_state_to_be((By.XPATH, "//*[@id='nr']/option[1]"), True)) '''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''
gxszButton = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='gxszButton']/a[1]")))
gxszButton.click()
instance = wait.until(EC.alert_is_present()) print(instance.text)
instance.accept()
driver.close()

selenium等待方式详解的更多相关文章

  1. python selenium 三种等待方式详解[转]

    python selenium 三种等待方式详解   引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...

  2. Python selenium 三种等待方式详解

    1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: ...

  3. Selenium 三种等待方式详解

    我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...

  4. Python selenium 三种等待方式详解(必会)

    很多人在群里问,这个下拉框定位不到.那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么 ...

  5. Selenium:三种等待方式详解

    我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...

  6. Python爬虫之selenium库使用详解

    Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...

  7. guava-retrying 源码解析(等待策略详解)

    一.等待策略相关类: 1.等待策略接口:WaitStrategy接口 该接口只有一个方法,就是返回尝试失败之后,下一次尝试之前的等待时间.long computeSleepTime(Attempt f ...

  8. vuex的使用及持久化state的方式详解

    vuex的使用及持久化state的方式详解 转载  更新时间:2018年01月23日 09:09:37   作者:baby格鲁特    我要评论 这篇文章主要介绍了vuex的使用及持久化state的方 ...

  9. JavaEE实战——XML文档DOM、SAX、STAX解析方式详解

    原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...

随机推荐

  1. 莫烦python教程学习笔记——总结篇

    一.机器学习算法分类: 监督学习:提供数据和数据分类标签.--分类.回归 非监督学习:只提供数据,不提供标签. 半监督学习 强化学习:尝试各种手段,自己去适应环境和规则.总结经验利用反馈,不断提高算法 ...

  2. windows10 安装 Mysql8.0

    目录 1.Mysql8.0下载 2.配置环境变量 3.在安装目录下创建my.ini文件 4 初始化Mysql 5 安装至系统服务 6 更改密码 1.Mysql8.0下载 2.配置环境变量 将下载后文件 ...

  3. CF20B Equation 题解

    Content 解方程 \(ax^2+bx+c=0\). 数据范围:\(-10^5\leqslant a,b,c\leqslant 10^5\). Solution 很明显上求根公式. 先来给大家推推 ...

  4. LuoguP7041 [NWRRC2016]King's Heir 题解

    Content 给出现在的日期,请从 \(n\) 个人当中选出一个人,使得他是所有成年人(\(\geqslant 18\) 岁的人)中年龄最小的. 数据范围:设日期为 \(yy/mm/dd\),则有 ...

  5. SQL:查询Mysql表结构

    背景:有时需要做数据字典,其中最重要的就是表结构.经整理,编写SQL如下: 代码: 1 -- drop TABLE `cfg_data_dict` ; 2 CREATE TABLE `cfg_data ...

  6. Pointcut 表达式

    AOP 概念篇 今天介绍 Pointcut 的表达式 通配符 常见的通配符如下 .. 含义一:方法表达式中.代表任意数量的参数 @Service public class HelloService { ...

  7. iframe父子页面js之间的调用

    父级页面:mian.html 子页面1:top.html 子页面2:index.html 页面关系 <div onclick="_top()">调用contentTop ...

  8. 【九度OJ】题目1473:二进制数 解题报告

    [九度OJ]题目1473:二进制数 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1473 题目描述: 大家都知道,数据在计算机里中存 ...

  9. 【剑指Offer】矩阵覆盖 解题报告(Python)

    [剑指Offer]矩阵覆盖 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...

  10. 【LeetCode】659. Split Array into Consecutive Subsequences 解题报告(Python)

    [LeetCode]659. Split Array into Consecutive Subsequences 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...