python-3.x - Selenium 可以检测 Python3 中网页何时完成加载吗?

标签 python-3.x selenium webdriverwait document-ready pageloadstrategy

在 python 中我写道:

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get(url)
try:
    WebDriverWait(driver, 10).until(
        lambda driver: driver.execute_script('return document.readyState') == 'complete')
except se.TimeoutException:
    return False
# Start Parsing

尽管我在解析某些网站时已经等待了 readyState,但我发现没有复选框。但是,如果我在解析同一网站之前添加 time.sleep(5) ,我会发现有一个复选框。

我的问题是,如何才能拥有适用于大多数网站的通用解决方案?我不能只写 time.sleep(5) 因为有些网站可能需要更多,有些可能会在 0.001 秒内完成(这会对性能产生不良影响......)

我只是想刺激一个真正的浏览器,并且在刷新按钮再次出现之前不处理任何事情(这意味着所有内容都已加载)。

最佳答案

理想情况下,Web 应用程序在通过 get() 访问时,仅在 document.readyState equals to complete 时才将控件返回给 WebDriver 。因此,除非 AUT(测试中的应用程序)有其他行为,否则以下代码行通常是开销:

WebDriverWait(driver, 10).until(lambda driver: driver.execute_script('return document.readyState') == 'complete')

但是,根据您的测试要求,您可以配置 pageLoadStrategy要么是:

  • 渴望
  • 正常

You can find a detailed discussion in What is the correct syntax checking the .readyState of a website in Selenium Python

此时需要注意的是使用time.sleep(secs)没有任何特定条件来实现违背了自动化的目的,应该不惜一切代价避免。


解决方案

适用于所有网站的通用方法是诱导 WebDriverWait根据当前的测试场景。举个例子:

  • 要等待元素出现,您需要调用 presence_of_element_ located() 的预期条件
  • 要等待元素的可见性,您需要调用 visibility_of_element_ located() 的预期条件
  • 要等待元素可见、启用并可交互以便您可以单击它,您需要调用 element_to_be_clickable() 的预期条件

关于python-3.x - Selenium 可以检测 Python3 中网页何时完成加载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71592662/

相关文章:

java - Selenium Webdriver - 无法使用 css 或 xpath 进行搜索,但可以使用 'by id' 或 'by class' 进行搜索

java.lang.NoSuchMethodError : org. openqa.selenium.support.ui.FluentWait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;

python - 如何去除字符串中模式 "On x John wrote:"之后的所有内容

python 3 : UnboundLocalError: local variable referenced before assignment

python - 在 Python 3 中,如何判断 Windows 是否被锁定?

python - 使用正则表达式从 git 日志中获取评论 block

java - Selenium JUnit 测试失败

java - 使用 Selenium 使用 sendKeys() 时,大写字母被重新排列/交换

angular - 如何构造 XPath 以包含 HTML 中的特定元素?