使用 selenium webdriver 等待网络空闲?

sym*_*mon 5 javascript python selenium

Puppeteer 具有等待网络完全空闲的能力,是否可以使用 python selenium web 驱动程序或通过从驱动程序上下文执行一些 javascript 直接使用一些 javascript 变通方法来实现相同的显式等待?

等待jQuery.active /页就绪状态等是常见的做法,但不能做到,我们可以查询挂起的请求,并等待,直到网络是完全空闲?

小智 2

所以我在这个问题中看到两个问题:

  1. Selenium 是否有办法监控所有基于 Web 的 API 调用?在 3.xx 之前我还没有在任何 Selenium 实现中看到这一点
  2. 我们可以实现这样的方法吗?是的。我们可以为每个触发的请求增加一个计数器,并为每个满足的请求减少它,只有在计数器为零时才继续测试脚本。我可以设想这是通过 Chrome Dev 协议 (Selenium 4+) 或 Web 代理 (browsermob) 来实现的。

注1:Selenium官方建议使用流畅等待或显式等待来解决此类问题。

注2:我见过一些等待文档就绪状态的粗略和抽象的实现,如下所示:

public void waitForPagetoLoad() throws InterruptedException {
    long millis = 1000;
    Thread.sleep(millis);
    do {
        Thread.sleep(millis);
        millis = millis + 2000;
    } while (!(((JavascriptExecutor) driver).executeScript("return document.readyState").toString()
            .equals("complete")) || millis <= 10000);
    Reporter.log("Web page loading is complete in " + (millis / 1000) + "  Seconds");

}
Run Code Online (Sandbox Code Playgroud)