python - 在 Selenium Python 中检查网站的 .readyState 的正确语法是什么?

标签 python selenium selenium-webdriver webdriver pageloadstrategy

我尝试使用 .execute_script 检查网站的 .readyState,但总是收到错误。

我在 chromedriver 中使用“none”的 pageLoadStrategy,因此我尝试测试网站的就绪状态是否不再“正在加载”。

注意:这个问题是特定于 Python 的。

WebDriverWait(driver, timeout=20).until(
    driver.execute_script('return document.readyState') == 'interactive'
)

value = method(self._driver) TypeError: 'str' object is not callable

我也尝试过使用 lambda,它不会引发错误,但是打印就绪状态将返回冲突的结果。

WebDriverWait(driver, timeout=20).until(
    lambda driver: driver.execute_script('return document.readyState') == 'interactive'
)
print(driver.execute_script('return document.readyState'))

loading

最佳答案

使用pageLoadStrategy作为none,然后使用WebDriverWait作为document.readyState因为交互式并不是一个好的方法。您可以对 document.readyState 使用 pageLoadStrategyWebDriverWait,如下所示:

要将 pageLoadStrategy 配置为 None,您可以使用以下任一解决方案:

  • Firefox:

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().FIREFOX
    caps["pageLoadStrategy"] = "none"
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "normal"  #  complete
    driver = webdriver.Firefox(desired_capabilities=caps, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get("http://google.com")
    
  • Chrome:

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().CHROME
    caps["pageLoadStrategy"] = "none"
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "normal"  #  complete
    driver = webdriver.Chrome(desired_capabilities=caps, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("http://google.com")
    

使用WebDriverWait来等待document.readyState作为eager:

WebDriverWait(driver, 20).until(lambda driver: driver.execute_script("return document.readyState").equals("interactive"))

使用WebDriverWait作为正常等待document.readyState:

WebDriverWait(driver, 20).until(lambda driver: driver.execute_script("return document.readyState").equals("complete"))

You can find a detailed discussion in How to make Selenium not wait till full page load, which has a slow script?

<小时/>

片尾

Do we have any generic function to check if page has completely loaded in Selenium

关于python - 在 Selenium Python 中检查网站的 .readyState 的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728656/

相关文章:

python - 如何让 Perl 和 Python 打印正在执行的程序的每一行?

python - 在 ipython 5.0+ 中按 Ctrl-C 时在屏幕上留下不完整的行

python - 防止在 Python 驱动的 PhantomJS/Selenium 中下载 CSS/其他资源

python - USB : usb_device_handle_win. cc:1020 在 Windows10 上使用 Selenium 的 ChromeDriver v87/Chrome v87 无法从节点连接错误中读取描述符

selenium - 在 Selenium Webdriver 中通过 xpath 查找元素或通过 css 查找元素哪个更好?

java - Selenium webdriver 不退出 chrome 驱动程序

python - 在 python 中显示原始图像像素而不是掩码

python - 在 GAE Python 中运行 XG 事务

java - 如何检查表中的特定 TD 是否包含我想要的值?

java - 找到 Selenium 按钮但未执行单击