Selenium成长之路-15设置等待时间

2023-11-12

为了保证运行的脚本正常加载,我们需要的是设置等待时间,具体有以下几种:

sleep():设置固定等待时间,主要由time包提供,也可叫强制等待,

也就是说不管页面是否加载完成,都会等待这些时间。

代码如下:

 

# coding = utf-8
from selenium import  webdriver
import time
from selenium.webdriver.common.by import By
# from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
url = 'http://www.baidu.com'
driver.get(url)

#在百度输入框输入python
browser = driver.find_element(By.ID,'kw')
browser.send_keys("pythonn")



time.sleep(5)
driver.quit()

 

implicitly_wait():webdriver包提供的一个等待方法,也叫隐式等待,

 

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

代码如下:

 

# coding = utf-8
from selenium import  webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
url = 'http://www.baidu.com'
driver.get(url)

#在百度输入框输入python
browser = driver.find_element(By.ID,'kw')
inp=browser.send_keys("pythonn")
driver.implicitly_wait(3)

#删除一个n
browser.send_keys(Keys.BACK_SPACE)
driver.implicitly_wait(3)

#回车键
browser.send_keys(Keys.ENTER)
driver.implicitly_wait(10)

driver.quit()

 

WebDriverWait():同样也是 webdirver 提供的方法,也叫显示等待,

 

语法结构如下:

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

driver:webdriver.Chrome()   主要就是指webdriver的驱动程序

timeout:超时时间,默认单位是秒

poll_frequency:休眠时间的间隔时间,默认0.5秒

ignored_exceptions:超时后的异常信息,默认抛出NoSuchElementException异常

配合该类的until()和until_not()方法使用,详细如下:

until(method,message=''):调用该方法提供的驱动程序作为一个参数,直到返回值不为False

unitl_not(method,message=''):调用该方法提供的驱动程序作为一个参数,直到返回值为False

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

代码如下:

 

# coding = utf-8
from selenium import  webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
url = 'http://www.baidu.com'
driver.get(url)

browser = driver.find_element(By.ID,'kw')

#设置现实等待,NoSuchElementException 可以不写
# WebDriverWait(driver,10,1).until(lambda  driver:browser)

try:
    WebDriverWait(driver,10,2,NoSuchElementException).until(lambda driver:browser)
    print("test pass")
except Exception as e:
    print("test file ",format(e))


driver.quit()

这里应用了一个新函数:lambda 表达式,也叫匿名函数,宗旨就是能一句话写完的代码不需要写两句话,把def函数简单化

不懂得可以看一下廖大大的Python教程:点击这里

一般在实际项目中,隐式等待使用的频率会更高一些,但是并不是说现实等待或者强制等待不会去使用。

所以具体怎么去使用以及使用什么方法,只要能保证脚本正常运行不出错,就是可行的。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium成长之路-15设置等待时间 的相关文章

随机推荐

  • Spring Cloud中的Hystrix的实现和使用

    Spring Cloud Hystrix 是 Spring Cloud 生态系统中的一个断路器组件 它可以帮助开发者优雅地处理分布式系统中的故障 提高系统的容错能力 下面介绍 Spring Cloud Hystrix 的实现和使用 引入依赖
  • QT获取lineEdit内容并写入文件中

    在ui中创建一个lineEdit 然后 QString sss ui gt lineEdit gt text 这样就获得了lineEdit的内容 并转为了QString格式 接下来参考 https editor csdn net md ar
  • 残差网络模型

    1 原始残差网络 最基本的残差块 中间的两层神经网络学习输入输出之间的残差 而旁边的链接就像一个高速公路 使得反向传播算法中的残差能通过这条路传到前边去 当网络变深时可以使得中间的输出为0 那么网络就能自适应的变成一个浅一点的网络 左边ba
  • Java 根据EXCEL下标获取EXCEL的列名

    通过根据EXCEL下标获取EXCEL的列名 用于给单元格设置公式用 num 是以0开头的下标 public static String getExcelColumn Integer num if num null return null S
  • 树的概念:层次、高度、深度、宽度

    目录 层次 宽度 深度 高度 其中只有层次是树原生的概念 其他都是从树中的结点来的 层次 从根节点开始算起 根节点算第一层 如图所示的树 第1层 A 第2层 B C 第3层 D E F 第4层 G H I 宽度 其实就是度 把结点的子树的棵
  • 大并发下请求合并(并发处理技巧)

    大并发下请求合并 一次请求消耗的资源 旧的方式 改造后 批量请求处理器 批量请求包装类 使用 性能测试 旧的 改造后的 一次请求消耗的资源 我们经常碰到查询请求的操作 例如根据用户id查询该用户的信息 接口仓储层查询用户正常的做法是通过id
  • adam算法介绍和总结

    19 adam算法 Adam 是一种可以替代传统随机梯度下降 SGD 过程的一阶优化算法 它能基于训练数据迭代地更新神经网络权重 Adam 最开始是由 OpenAI 的 Diederik Kingma 和多伦多大学的 Jimmy Ba 在提
  • ubuntu18.04编译Openwrt出现的问题解决

    ubuntu18 04编译Openwrt出现的问题解决 问题1 Build dependency Please install Git git core gt 1 6 5 问题2 gdate c 2497 7 error format no
  • 微信小程序授权打开摄像头,授权相册保存图片

    1 授权打开摄像头 doTakePhoto let that this wx getSetting success res 第一次未授权 if res authSetting scope camera undefined wx author
  • vscode中配置代码片段

    步骤如下 设置 gt 用户代码片段 新增全局代码片段 起全局代码片段文件名 xxx code snippets 这里以配置vue2初始代码片段为例 配置具体代码片段 按enter进入文件配置 以下是vue2的代码片段示例 具体可以自己随意配
  • 若依缓存使用浅析

    配置 这块主要涉及两个类 FastJson2JsonRedisSerializer 继承 RedisSerializer 接口自定义使用 fastjson 进行序列化和反序列化 RedisConfig 配置使用 StringRedisSer
  • Vue大型项目之分模块运行/打包

    最近写的小项目比较多 而且都是差不太多的 每个项目创建个工程 多少有点不好维护 所以决定把他们放在一个项目下 以vue cli3 为例 实现多系统集成下的分模块打包 分模块打包方式多种多样 可以适用于多系统之间互不干扰 主系统可集成各子系统
  • antDesignPro自定义渲染展开列

    效果如图 先上代码 文件目录如图 在这里插入图片描述 index tsx import ProColumns ProTable from ant design pro components import PageContainer from
  • 订单功能模块设计与实现

    在商城项目中 之前我们介绍了购物车功能模块的实现 商品加入到购物车之后 就是到购物车结算 然后显示购物车的商品列表 点击去结算 然后到了未提交前的订单列表 点击提交订单后 生成此订单 返回订单的订单号 付款金额 订单预计到达时间 订单系统是
  • 电子设计小知识点汇总-发光二极管篇

    电子设计小知识点汇总 发光二极管篇 发光二极管在电路中 常作为指示接在电路的电源上观察电路上电是否正确 接在单片机上观看程序是否正常工作等各项工作 选型常关注一下几个方面 1 颜色 2 封装 有贴片的 插装的 3 正向电压 正向电流为规定值
  • java----抽象类和接口的联系和区别

    目录 一 抽象类 1 为什么使用抽象类 2 抽象类的特点 二 接口 1 为什么java使用接口 2 接口的特征 相同点 不同点 一 抽象类 1 为什么使用抽象类 抽象类是为了把相同的但不确定的东西的提取出来 为了以后的重用 定义成抽象类的目
  • ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和Sql...

    ASP NET MVC深入浅出 被替换 一 谈情怀 ASP NET体系 从事 Net开发以来 最先接触的Web开发框架是Asp Net WebForm 该框架高度封装 为了隐藏Http的无状态模式 ViewState功不可没 通过的控件的拖
  • 数据库的三级模式结构

    数据库管理系统 DBMS 从三个层次来管理数据 外部层次 External Level 概念层次 Conceptual Level 和内部层次 Internal Level 作用 数据库采用外模式 概念模式和内模式三级模式结构 并存在着二级
  • 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”

    来源 http blog csdn net wpc320 article details 8496957 生成错误 error LNK2038 检测到 RuntimeLibrary 的不匹配项 值 MT StaticRelease 不匹配值
  • Selenium成长之路-15设置等待时间

    为了保证运行的脚本正常加载 我们需要的是设置等待时间 具体有以下几种 sleep 设置固定等待时间 主要由time包提供 也可叫强制等待 也就是说不管页面是否加载完成 都会等待这些时间 代码如下 coding utf 8 from sele