Python & Selenium:driver.implicitly_wait() 和 time.sleep() 之间的区别

Posted

技术标签:

【中文标题】Python & Selenium:driver.implicitly_wait() 和 time.sleep() 之间的区别【英文标题】:Python & Selenium: Difference between driver.implicitly_wait() and time.sleep() 【发布时间】:2019-05-04 11:08:54 【问题描述】:

是的,我知道两者都习惯于等待某个指定的时间。

硒:

driver.implicitly_wait(10)

Python:

import time
time.sleep(10)

这两者有什么区别吗?

【问题讨论】:

time.sleep() 将停止您在该行上的代码执行,但 selenium implicitly_wait() 只是驱动程序的设置。你可以阅读更多here 【参考方案1】:

time.sleep(秒)

time.sleep(secs) 将当前线程的执行挂起给定的秒数。该参数可以是一个浮点数,以指示更精确的睡眠时间。实际的挂起时间可能少于请求的时间,因为任何捕获的信号都会在执行该信号的捕获例程后终止 sleep()。此外,由于系统中其他活动的调度,暂停时间可能比请求的时间长。

您可以在How to sleep webdriver in python for milliseconds找到详细讨论


implicitly_wait(time_to_wait)

implicitly_wait(time_to_wait) 指定WebDriver 实例,即驱动程序 在搜索元素时应等待的时间量,如果它没有立即出现在@987654324 中@in-terms of SECONDS 尝试查找一个或多个元素(如果它们不是立即可用)时。默认设置是0,这意味着driver当找到一个或多个元素的指令时,搜索开始并且结果立即可用。

在这种情况下,在重新加载网页后,一个或多个元素可能会/可能不会在立即搜索中找到。因此,您的自动化脚本可能会遇到以下任何异常:

NoSuchElementException TimeoutException ElementNotVisibleException ElementNotSelectableException ElementClickInterceptedException ElementNotInteractableException

因此我们引入 ImplicitWait。通过引入ImplicitWait驱动程序将轮询DOM Tree,直到在配置的时间内找到元素,然后在抛出NoSuchElementException之前寻找元素或元素.到那时,您一直在寻找的一个或多个元素可能在 html DOM 中可用。在您的代码中,您已经将 ImplicitWait 设置为 10 秒的值,驱动程序 将轮询 HTML DOM 10 秒。

您可以在Using implicit wait in selenium找到详细讨论

【讨论】:

【参考方案2】: time.sleep(10) 恰好暂停代码执行 10 秒。 driver.implicitly_wait(10) 最多等待 10 秒以等待元素的存在。如果 2 秒后发现,则代码将继续执行,无需再等待 8 秒。

【讨论】:

【参考方案3】:

当我们在测试脚本中使用隐式等待时,它是全局声明的,它将自动应用于该脚本上的所有元素,例如在 java 中,如果您使用隐式等待。 --> 驱动程序。 manage().timeouts().implicitwait(10,timeunit.seconds);.此代码将等待元素出现在 DOM 中,直到元素变得可见时,它才会等待,执行将继续。在保持脚本执行期间停止。

在这种情况下,在 thread.sleep(1000) 中,脚本将保持 1000 毫秒,无论元素是否在 500 毫秒时在 dom 上可见,它都会一直保持到 1000 毫秒。

Thread.sleep() 是一个静态等待,它将脚本持续时间保持固定的时间。隐式等待将暂停脚本执行,直到元素在 DOM 中可见。

希望这会有所帮助!

【讨论】:

以上是关于Python & Selenium:driver.implicitly_wait() 和 time.sleep() 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

python+selenium-基础知识

Python+selenium自动循环扔QQ邮箱漂流瓶

Python+selenium自动循环扔QQ邮箱漂流瓶

python+selenium七:下拉框选项框select用法

Selenium+python --定位下拉列表框并选取内容

python爬虫笔记----4.Selenium库(自动化库)