如何让 Python 中的 Selenium WebDriver 休眠几毫秒
Posted
技术标签:
【中文标题】如何让 Python 中的 Selenium WebDriver 休眠几毫秒【英文标题】:How to sleep Selenium WebDriver in Python for milliseconds 【发布时间】:2019-03-07 07:33:48 【问题描述】:我在我的脚本中使用time
库:
import time
time.sleep(1)
它可以让我的 Selenium WebDriver 睡一秒钟,但怎么可能睡 250 毫秒?
【问题讨论】:
类似这个问题How do I get my Python program to sleep for 50 milliseconds? 这与 Selenium WebDriver(?) 没有任何关系。它是关于 Python 中的睡眠,因此可能存在大量重复的问题(价值超过 10 年)。典型的是 How do I get my Python program to sleep for 50 milliseconds? (尽管没有一个答案真正解决了亚秒级睡眠时间分辨率为 16.66 毫秒的常见问题)——在这种特殊情况下可能不是问题。跨度> 【参考方案1】:要暂停网络驱动程序的执行毫秒,您可以传递number of seconds
或floating point number of seconds
,如下所示:
import time
time.sleep(1) #sleep for 1 sec
time.sleep(0.25) #sleep for 250 milliseconds
但是,在使用 Selenium 和 WebDriver 进行 Automation 时,使用 time.sleep(secs)
而没有任何特定条件实现 违背了自动化的目的,应该不惜一切代价避免。根据文档:
time.sleep(secs)
将当前线程的执行挂起给定的秒数。该参数可以是一个浮点数,以指示更精确的睡眠时间。实际的挂起时间可能少于请求的时间,因为任何捕获的信号都会在执行该信号的捕获例程后终止 sleep()。此外,由于系统中其他活动的调度,暂停时间可能比请求的时间长。
因此根据讨论而不是time.sleep(sec)
,您应该使用WebDriverWait()
与expected_conditions()
结合使用来验证元素的状态,三个广泛使用的expected_conditions 如下:
presence_of_element_located
presence_of_element_located(locator) 定义如下:
class selenium.webdriver.support.expected_conditions.presence_of_element_located(locator)
Parameter : locator - used to find the element returns the WebElement once it is located
Description : An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible or interactable (i.e. clickable).
visibility_of_element_located
visibility_of_element_located(locator) 定义如下:
class selenium.webdriver.support.expected_conditions.visibility_of_element_located(locator)
Parameter : locator - used to find the element returns the WebElement once it is located and visible
Description : An expectation for checking that an element is present on the DOM of a page and visible. Visibility means that the element is not only displayed but also has a height and width that is greater than 0.
element_to_be_clickable
element_to_be_clickable(locator) 定义如下:
class selenium.webdriver.support.expected_conditions.element_to_be_clickable(locator)
Parameter : locator - used to find the element returns the WebElement once it is visible, enabled and interactable (i.e. clickable).
Description : An Expectation for checking an element is visible, enabled and interactable such that you can click it.
参考
您可以在WebDriverWait not working as expected找到详细讨论
【讨论】:
很好地解释了睡眠以及您应该使用什么来代替使用 selenium 进行睡眠。当我第一次开始使用 selenium 时,我曾经使用 sleep 来帮助缩短加载时间,但是在使用expected_conditions
之后,我的 selenium 脚本更加稳定并且需要更少的维护。好信息!
“不惜一切代价”避免睡眠太强烈了,并且会假定以最短时间完成为优先事项的极少数情况。事实上,如果没有大量的睡眠,我几乎永远不会写一个 selenium automatrion。如果你不这样做,你可能会最大限度地使用 CPU/驱动器/网络,这通常是一件坏事。相反,如果您放慢一切速度,您将能够更好地管理您的资源,而且您的网络服务器上的负载也会大大减少。【参考方案2】:
time.sleep()
接受浮点参数:
time.sleep(0.25)
Docs(它们值得一读,尤其是因为它们解释了睡眠最终可能比预期短或长的条件)。
【讨论】:
【参考方案3】:如果您希望它在毫秒内休眠,请使用浮点值:
import time
time.sleep(0.25)
#0.25 > 250ms
#0.1 > 100ms
#0.05 > 50ms
【讨论】:
以上是关于如何让 Python 中的 Selenium WebDriver 休眠几毫秒的主要内容,如果未能解决你的问题,请参考以下文章
python selenium,我无法从文本框中找到元素类或 id
如何使用 Python 中的 subprocess 模块启动和停止 Linux 程序?