相当于硒中的time.sleep()



我意识到这是一个相对简单的问题,但我还没有找到答案。

我在for循环中使用driver.get(),该循环遍历一些url。为了避免我的IP地址被阻塞,我在for循环中的driver.get statement之前实现了time.sleep(5)

基本上,我只想等待一段时间,让我的刮痧看起来更自然。

我认为time.sleep可能会导致页面崩溃。硒中time.sleep的当量是多少?据我所知,implicitly_wait只是设置了抛出异常之前的时间,但我不确定这是我想要的吗?我希望司机有一段特定的等待时间。

time.sleep((

sleep((函数来自时间模块,该模块将当前线程的执行挂起给定的秒数。

现在,WebDriver是一个进程外库,它指示浏览器执行什么,同时web浏览器本质上是异步的,WebDrivers无法跟踪HTML DOM的活动实时状态。这会导致使用SeleniumWebDriver时出现一些间歇性问题,这些问题受到浏览器和用户指令之间出现的竞争条件的影响。

到目前为止,Selenium没有任何与time.sleep()相同的方法,但有两种等效的方法可供您使用,可以根据您的自动测试的主要条件使用。

  • 隐式等待:在这种情况下,WebDriver在试图查找任何元素时会轮询DOM一段时间。当网页上的某些元素不能立即可用并且需要一些时间加载时,这可能很有用。

    def implicitly_wait(self, time_to_wait) -> None:
    """
    Sets a sticky timeout to implicitly wait for an element to be found,
    or a command to complete. This method only needs to be called one
    time per session. To set the timeout for calls to
    execute_async_script, see set_script_timeout.
    :Args:
    - time_to_wait: Amount of time to wait (in seconds)
    :Usage:
    ::
    driver.implicitly_wait(30)
    """
    self.execute(Command.SET_TIMEOUTS, {
    'implicit': int(float(time_to_wait) * 1000)})
    
  • 显式等待:这种类型的等待允许代码停止程序执行或冻结线程,直到传递的条件解决为止。例如:

    • presence_of_element_located((
    • 元素类别的可见性((
    • element_to_be_clickle((

Selenium中没有像time.sleep()通用Python方法那样的用于硬编码暂停的特定方法
正如您所提到的,有一个implicitly_wait和预期条件显式WebDriverWait等待,但这两个都不是硬编码的暂停
implicitly_waitWebDriverWait都用于设置超时-轮询某个元素存在或条件的时间,因此,如果满足该条件或元素出现,程序流将立即继续到下一个代码行
因此,如果您想暂停,您必须使用一些通用的Python方法,该方法将暂停程序/线程运行,如time.sleep()

最新更新