如何让 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 secondsfloating point number of seconds,如下所示:

import time
time.sleep(1) #sleep for 1 sec
time.sleep(0.25) #sleep for 250 milliseconds

但是,在使用 SeleniumWebDriver 进行 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 休眠几毫秒的主要内容,如果未能解决你的问题,请参考以下文章

Selenium二次封装-Python版本

python selenium,我无法从文本框中找到元素类或 id

如何使用 Python 中的 subprocess 模块启动和停止 Linux 程序?

Selenium WebDriver如何使滚动条滚动到最元素位置

学习小狂欢~Python利用 Selenium实现案例

爬虫入门Selenium用法简介