当前位置: 首页 > news >正文

selenium 确保页面完全加载

在使用Python和Selenium进行Web自动化时,确保页面完全加载是非常重要的。为了实现这一点,Selenium提供了两种主要类型的等待:显式等待(Explicit Waits)和隐式等待(Implicit Waits)。此外,还有WebDriverWait结合Expected Conditions来更精确地控制等待。

隐式等待 (Implicit Wait)

隐式等待会告诉WebDriver在尝试查找元素时(不仅是第一次),在指定的时间内周期性地轮询DOM。默认设置为0。一旦设置了隐式等待时间,它将在WebDriver的生命周期内一直有效。

from selenium import webdriverdriver = webdriver.Chrome()
driver.implicitly_wait(10)  # 等待10秒,如果在这期间找到元素则立即返回

隐式等待适用于所有元素,但是如果你需要针对特定元素或条件等待,则应该考虑使用显式等待。

显式等待 (Explicit Wait)

显式等待允许你的代码在一个特定条件下暂停执行,直到等待的条件发生或者达到最大超时时间。显式等待比隐式等待更加灵活,因为它可以针对特定的元素或条件。

WebDriverWait 类配合 expected_conditions 模块中的方法可以用来创建显式等待。例如:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome()# 打开网页
driver.get('http://example.com')try:# 等待最多20秒,直到ID为'myDynamicElement'的元素出现在DOM中并可见element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:driver.quit()

在这个例子中,WebDriverWait 对象会每隔500毫秒检查一次给定的条件(由 expected_conditions 定义),直到条件为真或超过20秒的超时时间。如果条件满足,那么 WebDriverWait 将返回该元素;如果超时,则抛出 TimeoutException

Expected Conditions

expected_conditions 模块提供了多种预定义的条件,比如:

  • title_is: 期待页面标题等于特定值。
  • title_contains: 期待页面标题包含特定字符串。
  • presence_of_element_located: 期待某个元素出现在DOM中,但不一定可见。
  • visibility_of_element_located: 期待某个元素不仅出现在DOM中而且是可见的。
  • element_to_be_clickable: 期待某个元素不仅可见而且是可以点击的。
  • invisibility_of_element_located: 期待某个元素从DOM中消失或变得不可见。
  • text_to_be_present_in_element: 期待某个元素的文本包含特定字符串。
  • frame_to_be_available_and_switch_to_it: 期待某个iframe可用,并切换到该iframe。
  • alert_is_present: 期待一个警告框出现。

你可以根据实际的需求选择合适的条件来进行等待。显式等待通常比隐式等待更推荐,因为它们可以提供更细粒度的控制,并且避免了全局影响。

http://www.lryc.cn/news/515803.html

相关文章:

  • [极客大挑战 2019]HardSQL 1
  • vip与haproxy构建nginx高可用集群传递客户端真实ip
  • Easticsearch介绍|实战?
  • Python图形界面(GUI)Tkinter笔记(二十一):Messagebox信息提示功能控件
  • vue3+ts+element-plus 表单el-form取消回车默认提交
  • Web Services 简介
  • Vue3苦逼的学习之路
  • AcWing练习题:两点间的距离
  • 文献分享:RoarGraph——跨模态的最邻近查询
  • 故事可视化AI
  • 【机器学习篇】从新手探寻到算法初窥:数据智慧的开启之门
  • ffmpeg八大开发库
  • 【ArcGISPro/GeoScenePro】解决常见的空间参考和投影问题
  • Linux上安装配置单节点zookeeper
  • 现代光学基础-1
  • pytorch中nn.Conv2d详解及参数设置原则
  • T-SQL语言的正则表达式
  • UDP_TCP
  • Python 中常见的数据结构之二推导式
  • STM32 拓展 低功耗案例3:待机模式 (hal)
  • 【开源社区openEuler实践】探索 Yocto-Meta-OpenEuler:嵌入式开发的强大基石
  • C++ hashtable
  • JS (node) 的 ACM 模式 + debug方法 (01背包为例)
  • vue设计与实现-框架设计
  • Stable Diffusion和Midjourney有什么区别?
  • 即插即用,无痛增强模型生成美感!字节跳动提出VMix:细粒度美学控制,光影、色彩全搞定
  • 面向对象分析和设计OOA/D,UML,GRASP
  • 【每日学点鸿蒙知识】广告ID、NFC手机充值、CSS支持语法、PC与模拟器交互、SO热更新等
  • 30分钟学会HTML
  • 服务器信息整理:用途、操作系统安装日期、设备序列化、IP、MAC地址、BIOS时间、系统