python selenium 三种等待方式详解

2023-11-08

引言:

  • 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素还没出来就已经报错了,试着程序调试程序运行速度,等待元素可见再继续运行程序;

1.强制等待(sleep)

  • 优点:简单明了,需要等待的时候直接time.sleep(),个人感觉3~5秒就行
  • 缺点:不智能,设置的时间太短,元素还没有加载出来,那照样会报错;设置的时间太长,case多了,代码量大了,很多个几秒就会影响整体的运行速度了;所以尽量少用这个
from time import sleep
from selenium import webdriver

driver = webdriver.Chrome('D:\\Documents\\pica_test\\browser_driver\\chromedriver.exe')  
driver.get('https://www.baidu.com')
sleep(3) # python3中默认单位为秒(s)
driver.quit()  

2.隐性等待(implicitly_wait())

  • 优点:相比sleep() ,隐性更加智能,它会在你设置的时间内判断网页是否加载完成,如果完成了,就进行下一步;在设置的时间内没有加载完成,则会报超时加载;
  • 缺点:随着ajax技术的广泛应用,页面的元素往往都可以局部加载,也就是在整个页面没有加载完的时候,可能我们需要的元素已经加载完成了,那就么有必要再等待整个页面的加载
from selenium import webdriver

driver = webdriver.Chrome()  
driver.implicitly_wait(20) # 隐性等待,最长等30秒  
driver.get('https://www.baidu.com')
driver.quit()

注意:

  • 1.隐性等待的设置时全局性的,在开头设置过之后,整个的程序运行过程中都会有效,都会等待页面加载完成;不需要每次设置一遍;
  • 2.页面加载完成后新打开的弹窗是没有等待效果的

3.显性等待(WebDriverWait)

  • 优点:他会不断的根据你设定的条件去判断,直到超过你设置的等待时间,如果设置的条件满足,然后进行下一步操作,如果没有满足会报一个'selenium.common.exceptions.TimeoutException: Message: '错误

 

from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
try:
#为了更好的对比效果,首先我们设置了一个存在的元素,然后在去找一个不存在的元素,同样设置了10s的等待时间
#kw元素存在时
    print(datetime.now())  #
    element = WebDriverWait(driver,10).until(   #until 也属于WebDriverWait,代表一直等待,直到某元素可见,until_not与其相反,判断某个元素直到不存在
    EC.presence_of_element_located((By.ID, "kw"))  #presence_of_element_located主要判断页面元素kw在页面中存在。
)
#kw111元素不存在时
    print(datetime.now())
    element = WebDriverWait(driver,10).until(
    EC.presence_of_element_located((By.ID, "kw111"))
)


finally:
    print(datetime.now())
    driver.quit()

注意:最好对于元素选择全部独立封装成方法,在每个方法中可以加上日志、显示等待;

参考:原文

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

python selenium 三种等待方式详解 的相关文章

  • 【系统篇 / 文件】01. 文件服务安装与配置 ❀ Windows Server 2008 R2

    简介 文件服务提供帮助管理存储 启用文件复制 管理共享文件夹 确保快速搜索文件 以及启用对UNXI客户端计算机访问的技术 使用文件服务 组织可以将文件存储到中心位置 然后通过公司网络与用户共享 可以为这些共享文件创建索引 以帮助用户快速查找
  • K8S deployment可视化故障排查指南

    这是一个示意图 可帮助您调试Kubernetes中的deployemnt 当您希望在Kubernetes中部署应用程序时 通常定义三个组件 一个deployment 这是创建名为Pods的应用程序副本的秘诀 一个service 内部负载平衡
  • cocos creator 中读取Excel表格中的数据

    一 使用相应工具将Excel文件转化成JSON文件导入到cocos creator资源文件 二 在VS中对Excel文本中的数据进行转换 Excel文本中各项数据的名称对应代码中的data export default class Task

随机推荐

  • Apache-tomcat-8.5.82下载安装以及环境变量配置

    一 下载apache tomcat 8 5 82 1 进入apache官网 Apache Tomcat Welcome 选择Download gt Tomcat8 进入Apache Tomcat Apache Tomcat 8 Softwa
  • 分布式计算,泛在计算,BOINC

    BOINC平台简介 知乎 Download BOINC client software 开源源代码 https github com BOINC boinc 介绍 https www equn com wiki BOINC 使用指南 htt
  • 【Antdv】a-date-picker showTime带时间默认00:00:00

    show time 默认当前系统时间 设置默认 00 00 00
  • 预编码

    原则上说MIMO技术并不一定需要预编码 使用预编码的前提是发射端可以及时获取信道信息 也就是CSIT 在通常情况下 只有接收端可以知道信道信息CSIR 在这个情况下 接收端通过复杂的信号处理算法 如MMSE SIC 可以解调出多路的MIMO
  • Zookeeper 通知更新可靠吗? 解读源码找答案!

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由特鲁门发表于云 社区专栏 导读 遇到Keepper通知更新无法收到的问题 思考节点变更通知的可靠性 通过阅读源码解析了解到zk Watch的注册以及触发的机制 本地调试运行模拟
  • 软件架构及几种典型框架

    什么是软件架构 什么是软件框架 很多时候 我们常常会混用架构和框架这两个词 实际上 广义上的架构和框架在概念上有很大的不同 架构给人的感觉 包容上更大 所以实际上架构是包含了框架的概念的 广义的架构应为一个系统的架构 不仅仅涉及软件中的技巧
  • BOM编程

    1 BOM概述 BOM 浏览器对象模型 Browser Object Model 它提供了独立于内容的 可以与浏览器窗口进行互动的对象结构 通过BOM可以操作浏览器窗口 比如弹出框 控制浏览器跳转 获取分辨率等 BOM是把 浏览器 当做一个
  • 实操理解node_modules目录结构

    环境 2022 8 16 node v gt v16 15 1 npm v gt 8 11 0 yarn v gt 1 22 19 pnpm v gt 7 9 0 npm0 mkdir npm0 cd npm0 npm install el
  • 从源头理解Batch Normalization (顺带搞懂为什么做参数初始化)

    一 BN LN等一系列Normalization方法的动机 因为一个网络中某层的参数的梯度 最终是由训练样本中这层输入的各个feature的具体数值决定的 如果feature的数值变化范围过大 比如不同特征的含义就导致了取值范围不在一个数量
  • 标签传递算法:java版

    标签传递算法 java版 标签传递算法 java版 java labelpropagation 本地测试 数据集 LPAlgorithm loadJSON vertexAdjMap和vertexInAdjMap的区别在哪里 根据每个节点的权
  • 【计算机视觉

    文章目录 一 前言 二 简介 三 相关方法 3 1 实时目标检测器 3 2 端到端目标检测器 3 3 目标检测的多尺度特征 四 检测器端到端速度 4 1 分析NMS 4 2 端到端速度基准 五 The Real time DETR 5 1
  • 我的世界虚拟服务器联机,我的世界模拟城市联机教程-的世界怎么联机

    我的世界联机分为服务器联机和本地WIFI联机两种 首先我们先说下服务器联机方法 一 打开游戏后 点击Play进入游戏列表 再点击右上角的Edit 然后点击External 然后将会进入添加服务器的界面 第一行 ServerName 那里填写
  • 安卓默认启动的活动界面

    是在AndroidManifest 的activity 的标签中 加入 的活动是默认启动的
  • ENVI5.3安装

    一 下载地址 BT下载地址 链接 https pan baidu com s 1Z1l0qXQjSaEf3VQj9 qcAw 提取码 4il4 压缩包下载 链接 https pan baidu com s 1EbdO0uDiBdbFFdQx
  • java中定义score方法_elasticsearch 自定义 script score JavaAPI查询详解

    一 自定义score的应用场景 先打个比方 比如新产品上架了 我想让最新上架的产品搜索时候 排在前面 怎么办呢 很简单按时间排序 嗯这种方法很好实现 但下面又有个需求 比如我要求排序中上架时间的比重为40 自营产品为20 促销产品的比重为4
  • git branch管理常用命令

    本文转载至 http www 2cto com os 201307 229235 html git branch管理常用命令 查看本地分支 plain git branch dev master 代表当前位于dev分支 查看远程分支 pla
  • python netcdf4读取nc格式的气象数据

    一 nc格式数据介绍 NetCDF全称为network Common Data Format 中文译法为 网络通用数据格式 netcdf文件开始的目的是用于存储气象科学中的数据 现在已经成为许多数据采集软件的生成文件的格式 从数学上来说 n
  • PROJ4是什么?

    GIS Geographic Information System 地理信息系统 领域中最常提及 的一个概念是坐标系统 当我们提及一个地理位置的时候 与之伴随而产生的是该位置必定在一个空间参考下 当我们使用GPS设备获取到某个位置的经纬度的
  • Linux常用配置及硬件检测命令

    一些比较常见的linux命令 主要用于检测服务器的配置和硬件信息 包括 操作系统 CPU 内存 硬盘分区 系统时间 负载 网络相关 进程 用户 开关机 启动等方面 适用于主流操作系统 常见的centos ubuntu debian等 操作系
  • python selenium 三种等待方式详解

    引言 当你觉得你的定位没有问题 但是却直接报了元素不可见 那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素还没出来就已经报错了 试着程序调试程序运行速度 等待元素可见再继续运行程序 1 强制等待 sleep 优点 简单明了 需