提问者:小点点

如何在selenium-python中正确使用. readyState等待网页“完成”?[重复]


我试图让selenium等待使用. readyState完全加载页面,但我找不到正确的方法让selenium在继续之前测试网页的.readyState。

这两行散列线是我让它工作的最佳尝试,包括下面链接中的示例;其中“. equals”似乎没有任何效果。

python-selenium有没有办法等到页面的所有元素都加载完成?

使用散列行运行代码时,输出将打印“加载”并引发错误,因为打印函数后的元素尚未加载。

注意:这个问题可以使用等待和预期条件轻松解决,但问题是关于使用. readyState。

ps:我的理解是,当pageLoadStrategy设置为“正常”时,selenium默认为等待. readyState“完成”,但是一旦驱动程序启动,pageLoadStrategy就不能在“无”和“正常”之间切换。如果有人知道否则这可能是一个可能的解决方案。

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities().CHROME.copy()
caps["pageLoadStrategy"] = "none"

driver = webdriver.Chrome(
    desired_capabilities=caps,
    executable_path=r'C:\chromedriver_win32\chromedriver.exe'
    )

driver.get("https://www.google.com/maps")
# driver.execute_script("return document.readyState").equals("complete"))
# driver.execute_script("return document.readyState == 'complete'")

print(driver.execute_script("return document.readyState"))
driver.find_element_by_xpath('//*[@id="searchboxinput"]').send_keys("somewhere")

共1个答案

匿名用户

您需要使用显式等待并读取readyState属性值,如下所示:

WebDriverWait(driver, 10).until(lambda driver: driver.execute_script('return document.readyState') == 'complete')

您还需要以下导入:

from selenium.webdriver.support.ui import WebDriverWait

更多信息:如何使用Selenium使用AJAX技术测试Web应用程序