在 Selenium Python 中检查网站的 .readyState 的正确语法是什么? [英] What is the correct syntax checking the .readyState of a website in Selenium Python?

查看:24
本文介绍了在 Selenium Python 中检查网站的 .readyState 的正确语法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 .execute_script 检查网站的 .readyState,但我一直收到错误消息.

我在 chromedriver 中使用了none"的 pageLoadStrategy,所以我试图测试网站 readystate 不再加载".

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

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

<块引用>

值=方法(self._driver)类型错误:str"对象不可调用

我也尝试过使用不会引发错误的 lambda,但是打印 readystate 将返回相互冲突的结果.

WebDriverWait(driver, timeout=20).until(lambda 驱动程序:driver.execute_script('return document.readyState') == 'interactive')打印(driver.execute_script('返回文档.readyState'))

<块引用>

正在加载

解决方案

Using pageLoadStrategy as none 然后使用 WebDriverWait 对于 document.readyState 作为 interactive 不是一个好方法.您可以对 document.readyState 使用 pageLoadStrategyWebDriverWait ,如下所示:

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

  • 火狐:

    from selenium import webdriver从 selenium.webdriver.common.desired_capabilities 导入 DesiredCapabilitiescaps = DesiredCapabilities().FIREFOXcaps["pageLoadStrategy"] = "none"#caps["pageLoadStrategy"] = "eager" # 交互#caps["pageLoadStrategy"] = "normal" # 完成driver = webdriver.Firefox(desired_capabilities=caps, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')driver.get("http://google.com")

  • Chrome:

    from selenium import webdriver从 selenium.webdriver.common.desired_capabilities 导入 DesiredCapabilitiescaps = DesiredCapabilities().CHROMEcaps["pageLoadStrategy"] = "none"#caps["pageLoadStrategy"] = "eager" # 交互#caps["pageLoadStrategy"] = "normal" # 完成driver = webdriver.Chrome(desired_capabilities=caps, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')driver.get("http://google.com")

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

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

使用 WebDriverWait 等待 document.readyState 作为 normal :

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

<块引用>

您可以在 如何让 Selenium 不等到整个页面加载,它的脚本很慢?

<小时>

尾声

我们是否有任何通用函数来检查页面是否已在 Selenium 中完全加载

I'm trying to check the .readyState of a website using .execute_script but I keep getting an error.

I'm using a pageLoadStrategy of "none" in chromedriver so I'm trying to test that the websites readystate is no longer "loading".

Note: this question is Python-specific.

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

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

I've also tried using lambda which doesn't throw an error, however printing the readystate will return conflicting results.

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

loading

解决方案

Using pageLoadStrategy as none and then using WebDriverWait for document.readyState as interactive won't be a good approach. You can use either pageLoadStrategy or WebDriverWait for document.readyState as follows:

To configure pageLoadStrategy as None you can use either of the following solutions:

  • 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")
    

Using WebDriverWait to wait for document.readyState as eager:

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

Using WebDriverWait to wait for document.readyState as normal:

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?


Outro

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

这篇关于在 Selenium Python 中检查网站的 .readyState 的正确语法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆