我尝试使用 .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
使用 pageLoadStrategy
或 WebDriverWait,如下所示:
要将 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/