我正在尝试使用.execute_script检查网站的.readyState,但我一直收到错误消息。
我在chromedriver中使用的pageLoadStrategy为“ none”,所以我试图测试网站readystate不再“正在加载”。
注意:这个问题是特定于Python的。
WebDriverWait(driver, timeout=20).until(
driver.execute_script('return document.readyState') == 'interactive'
)
value = method(self._driver) TypeError:“ str”对象不可调用
我也尝试使用不会引发错误的lambda,但是打印readystate将返回有冲突的结果。
WebDriverWait(driver, timeout=20).until(
lambda driver: driver.execute_script('return document.readyState') == 'interactive'
)
print(driver.execute_script('return document.readyState'))
加载
答案 0 :(得分:1)
您可以将条件移入JS:
WebDriverWait(driver, timeout=20).until(
lambda driver: driver.execute_script('return document.readyState === "interactive"')
)
print(driver.execute_script('return document.readyState'))
如果网站成角度,则可以使用pendingRequests.length === 0
参见this answer。
希望这会有所帮助!
答案 1 :(得分:1)
将pageLoadStrategy
用作 none
,然后将 WebDriverWait 用作document.readyState
的 interactive
并不是一个好方法。您可以为pageLoadStrategy
使用document.readyState
或 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
的身份{@ {1}}:
eager
使用 WebDriverWait 以 WebDriverWait(driver, 20).until(lambda driver: driver.execute_script("return document.readyState").equals("interactive"))
的身份{@ {1}}:
document.readyState
您可以在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