我在我的脚本中使用了time
库:
import time
time.sleep(1)
它可以让我的Selenium WebDriver休眠一秒钟,但是如何做到250毫秒呢?
我在我的脚本中使用了time
库:
import time
time.sleep(1)
它可以让我的Selenium WebDriver休眠一秒钟,但是如何做到250毫秒呢?
要暂停Webdriver的执行若干毫秒,您可以按以下方式传递秒数
或浮点秒数
:
import time
time.sleep(1) #sleep for 1 sec
time.sleep(0.25) #sleep for 250 milliseconds
然而,当使用 Selenium 和 WebDriver 进行自动化时,使用 time.sleep(secs)
而没有任何特定条件来实现会 破坏了自动化的目的,应该尽一切可能避免使用。 根据文档:
time.sleep(secs)
会暂停当前线程的执行给定秒数。参数可以是浮点数以表示更精确的睡眠时间。实际挂起时间可能会比请求的时间少,因为任何捕获的信号都将在执行该信号捕获程序后终止 sleep()。此外,由于系统中其他活动的调度,悬挂时间可能会比请求的时间长。
因此,根据讨论,您应该使用 WebDriverWait()
与 expected_conditions()
结合使用来验证元素状态,其三个广泛使用的 expected_conditions 如下:
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(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(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中找到详细讨论。
expected_conditions
之后,我的selenium脚本更加稳定,需要的维护也更少。非常有用的信息! - PixelEinsteinimport time
time.sleep(0.25)
#0.25 > 250ms
#0.1 > 100ms
#0.05 > 50ms
time.sleep(0.25)
会引起250毫秒的等待。然而,实际等待时间可能比精确的250毫秒短或长。这是因为:
使用selenium进行等待的其他方法包括:由于任何捕获的信号都将终止执行该信号捕获例程后的睡眠(),因此实际挂起时间可能小于所请求的时间。此外,由于系统中其他活动的安排,挂起时间可能比所请求的时间长。
driver.implicitly_wait(0.25)
WebDriverWait(driver).until(document_initialised)