硒 wait.until 方法

Selenium wait.until method

各位程序员大家好,我有一个简单的问题。

wait = WebDriverWait(browser, 10)

相当于

time.sleep(10)

?

我正在开发这个 selenium 应用程序,有时服务器流量非常大,导致从一个页面移动到另一个页面时加载时间不同。我发现 time.sleep(N) 效率不高,但如果我使用 wait.until EC 块,代码会在满足条件后执行吗?
如果使用 wait = WebDriverWait(browser, 60) 并且页面在 3 秒内加载,这不会浪费时间吗?

time.sleep(10)的硬编码暂停和wait = WebDriverWait(browser, 10)的显式等待绝对不一样。
time.sleep(10) 的硬编码暂停将无条件地暂停代码执行 10 秒。
wait = WebDriverWait(browser, 10) 的显式等待将轮询网页,直到满足指定条件。一旦满足条件,您的代码将立即继续执行。
例如,如果您定义了显式等待,直到 div.selected 所在的元素可见,Selenium 将每隔某个预定义的时间轮询 DOM,假设每 100 毫秒一次,当它发现此类元素可见时 wait 将完成,您的代码将继续执行。
如果条件未达到定义的超时,在上面的示例中为 10 秒,Selenium 将抛出 TimeoutException 异常。
有很多关于这个的教程,例如here

time.sleep(10)wait = WebDriverWait(browser, 10) 都是 显式等待。

主要区别在于

time.sleep(10) 是最糟糕的一种显式等待。

意思是暂停程序执行定义的时间段,在本例中,10 secs.

WebDriverWait 将每隔 500 毫秒查找 EC 条件 如果找到,则 return 如果找不到,则一次又一次地重试,直到发生超时然后扔

TimeOutException

这又是一个一般性错误。

此外,

Since explicit waits allow you to wait for a condition to occur, they make a good fit for synchronising the state between the browser and its DOM, and your WebDriver script.

这是官方的 docs 显式等待。