Selenium Python教程第5章

news/2024/11/23 23:52:39/

5. 等待页面加载完成(Waits)

在这里插入图片描述

现在的大多数的Web应用程序是使用AJAX技术。当一个页面被加载到浏览器时,该页面内的元素可以在不同的时间点被加载。这使得定位元素变得困难。如果元素不再页面之中,会抛出 ElementNotVisibleException 异常。 使用 waits功能,我们可以解决这个问题。waits提供了一些操作之间的时间间隔- 主要是定位元素或针对该元素的任何其他操作。
Selenium Webdriver 提供两种类型的waits :隐式和显式。 显式等待会让WebDriver等待满足一定的条件以后再进一步的执行。 而隐式等待让Webdriver等待一定的时间后再才是查找某元素。

5.1 显式等待

显式等待是你在代码中定义等待一定条件发生后再进一步执行你的代码。 最糟糕的案例是使用time.sleep(),它将条件设置为等待一个确切的时间段。 这里有一些方便的方法让你只等待需要的时间。WebDriverWait结合ExpectedCondition 是实现的一种方式。

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 ECdriver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:driver.quit()

在抛出TimeoutException异常之前将等待10秒或者在10秒内发现了查找的元素。 WebDriverWait 默认情况下会每500毫秒调用一次ExpectedCondition直到结果成功返回。 ExpectedCondition成功的返回结果是一个布尔类型的true或是不为null的返回值。

预期的条件

对于自动化的Web浏览器中一些常用的预期条件,如下面的列表, Selenium Python binding通过expected_condition 类实现了这些方法

  • title_is
  • title_contains
  • presence_of_element_located
  • visibility_of_element_located
  • visibility_of
  • presence_of_all_elements_located
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value
  • frame_to_be_available_and_switch_to_it
  • invisibility_of_element_located
  • element_to_be_clickable
  • staleness_of
  • element_to_be_selected
  • element_located_to_be_selected
  • element_selection_state_to_be
  • element_located_selection_state_to_be
  • alert_is_present

如element_to_be_clickable()方法,下面的语句示例,系统将等待 id为 someid的元素被单击,最多等待10秒。

from selenium.webdriver.support import expected_conditions as ECwait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))

alert_is_present()方法示例,等待web页面弹出1个警告框

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ecdriver = webdriver.Chrome()
driver.get("path to test-page.html")
driver.find_element_by_id("show-alert").click()
wait = WebDriverWait(driver, 10)
alert = wait.until(ec.alert_is_present())
alert.accept()
driver.close()

5.2. 隐式等待

如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。

from selenium import webdriverdriver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

http://www.ppmy.cn/news/283636.html

相关文章

arduino nano基于超声波的平衡小车

在网上一直看到两轮平衡车,是通过陀螺仪的角度变化结合pid实现的 某宝上卖的平衡车也买过一个,的确是平衡能力很强,有个很大的原因是电机后装了编码器,可以比较精确的得到和控制轮子走的距离。 但价格贵呀。。。 所以我们就用ardu…

调试平衡小车过程中间遇到的问题

目录 定时器函数执行周期跟定时时间不一致? drv8833这款驱动器可以制作平衡小车用吗? 电机编码器AB相无输出? 平衡小车的角度标定一定要准确 平衡小车前进后退的控制逻辑是什么? 定时器函数执行周期跟定时时间不一致&#xf…

Arduino平衡小车

Arduino平衡小车 1.概述 此Arduino平衡小车在主控方面由Arduino UNO R3和Arduino sensor shield v5.0传感器扩展板组成。采用TB6612FNG作为电源和电机之间的中介给带编码器的直流电机供电以及传送PWM信号。采用六轴MPU6050进行角度采集并传给Arduino由Arduino计算角度偏差以及…

乘法器介绍

阵列乘法器 实现乘法的比较常用的方法是类似与手工计算乘法的方式: 对应的硬件结构就是阵列乘法器(array multiplier)它有三个功能:产生部分积,累加部分积和最终相加。 阵列乘法器的关键路径为(下图标出了两条可能的关…

小希的数表

题目描述 【问题描述】 Gardon 昨天给小希布置了一道作业&#xff0c;即根据一张由不超过 5000 的 N(3<N<100)个正整数组成的数表两两相加得到 N*(N-1)/2 个和&#xff0c;然后再将它们排序。例如&#xff0c;如果数表里含有四个数 1&#xff0c;3&#xff0c;4&#x…

小希的迷宫

小希的迷宫 上次Gardon的迷宫城堡小希玩了很久&#xff08;见Problem B&#xff09;&#xff0c;现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样&#xff0c;首先她认为所有的通道都应该是双向连通的&#xff0c;就是说如果有一个通道连通了房间A和B&#…

小希的

小希的迷宫-杭电地址 小希的迷宫Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 65877 Accepted Submission(s): 20676 problem Description 上次Gardon的迷宫城堡小希玩了很久&#xff08;见Problem B&#xff09;…

小希的新工作

【问题描述】 小希最近找到了大公司的客户经理的新工作&#xff0c;每天工作时间为 L 分钟&#xff0c;他主要为 n 个固定的高端客人服务&#xff0c;第 i 个客人会在第 ti 分钟到来&#xff0c;他需要为其服务 li 分钟&#xff0c;在此期间不会有其他客人到来。 他喜欢在工作的…