提问者:小点点

python-selenium有没有办法等到页面的所有元素都加载完成?


我要求一般检查页面的所有元素是否已加载。有办法基本上检查吗?

在具体的例子中,有一个页面,我点击了一些按钮,然后我必须等到我点击“下一步”按钮。然而,这个“下一步”按钮是可用的,可选择的,可一直点击。那么如何用selenium检查页面的“状态”(?)?

提醒一下:这是一个关于硒的问题,而不是有问题的网页质量……


共3个答案

匿名用户

由于您的问题是关于python-selenium是否有办法等到页面的所有元素都加载完成,因此答案是否定的。

从根本上讲,您可以编写一行代码(或通过函数实现它)来检查“文档. readyState”==“完成”,如下所示:

self.driver.execute_script("return document.readyState").equals("complete"))

但是这种方法有一个缺点,它没有考虑到要完成的JavaScript/AJAX调用。

编写上面提到的等待页面加载的行默认是通过Selenium实现的。所以重写相同的是一个完全的开销。客户端(即Web浏览器)永远不会将控件返回给WebDriver实例,直到并且除非'Document. readyState'等于"完成"。一旦满足这个条件,Selenium执行下一行代码。

值得一提的是,尽管客户端(即Web浏览器)可以在实现等于完成的文件状态后将控件返回给WebDriver实例,但它不能保证新的超文本标记语言DOM上的所有WebElements是否存在、可见、可交互和可点击。

因此,根据我们的要求,如果您必须与之交互的下一个*WebElement在实现等于“完成”的“文档. readyState”时无法交互,您必须结合匹配的expected_conditions来诱导WebDriver等。以下是一些最常用的expected_condition:

  • element_to_be_clickable(定位器)
  • presence_of_element_located(定位器)
  • visibility_of(元素)

您可以在以下链接中找到一些相关的讨论:

  • 我们是否有任何通用函数来检查页面是否已在Selenium中完全加载
  • SeleniumIEWebDriver仅在调试时工作
  • Selenium如何管理等待页面加载?

匿名用户

可靠地确定页面是否已完全加载可能具有挑战性。没有办法知道是否所有元素都已像那样加载。您必须在每个页面中定义一些“锚点”,以便据您所知,如果这些元素已加载,则可以公平地假设整个页面已加载。通常这涉及测试组合。因此,例如,您可以定义如果以下测试组合通过,则认为页面已加载:

  • JavaScript文档. readyState==='完成'
  • “锚点”元素
  • 各种“纺纱机”,如果存在,就消失了。

匿名用户

有一种称为Document. readyState的东西,您可以通过Selenium执行JavaScript脚本来检索它。这不适用于动态加载的内容。它返回以下三种状态之一:

加载文档仍在加载中,没有css或其他资源可用

互动文档已加载完成,无css或其他资源可用

完成文档和css/其他资源都加载完成

您至少在寻找Interactive。您可以通过调用execute_script来检索状态:

driver.execute_script("return document.readyState")