我正在尝试使用.execute_script检查网站的.dreadystate,但我一直遇到错误。
我在Chromedriver中使用了"无"的Pagelodstrategy,因此我正在尝试测试ReadyState不再"加载"的网站。
注意:这个问题是特定于Python的。
WebDriverWait(driver, timeout=20).until(
driver.execute_script('return document.readyState') == 'interactive'
)
value =方法(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'))
加载
使用 pageLoadStrategy
用作 none
,然后使用 web driverwait document.readyState
作为 interactive
不会是好的方法。您可以将pageLoadStrategy
或 WebDriverWait 用于document.readyState
,如下所示:
将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:UtilityBrowserDriversgeckodriver.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:UtilityBrowserDriverschromedriver.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
作为 normal
:
WebDriverWait(driver, 20).until(lambda driver: driver.execute_script("return document.readyState").equals("complete"))
您可以找到一个详细的讨论,即如何使硒不要等到整页加载,哪个具有缓慢的脚本?
uno
我们是否有任何通用功能可以检查页面是否已完全加载在硒中
您可以将条件移至JS:
WebDriverWait(driver, timeout=20).until(
lambda driver: driver.execute_script('return document.readyState === "interactive"')
)
print(driver.execute_script('return document.readyState'))
如果网站在Angular中,则可以使用pendingRequests.length === 0
请参阅此答案。
希望这会有所帮助!