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

时间:2019-06-18 08:36:30

标签: python selenium selenium-webdriver readystate

我正在尝试让硒使用.readyState等待页面完全加载,但我找不到继续进行操作之前获取硒来测试网页的.readyState的正确方法。

我最好的尝试是使这两行杂乱无章,包括下面链接中的示例;其中“ .equals”似乎没有任何作用。

Is there a way with python-selenium to wait until all elements of a page has loaded?

运行带有任一哈希行的代码时,输​​出将输出“正在加载”,并且由于尚未加载打印功能之后的元素而引发错误。

注意:使用等待和期望条件可以轻松解决此问题,但问题是有关使用.readyState。

ps:我的理解是,当pageLoadStrategy设置为“ normal”时,硒默认等待直到.readyState“完成”,但是一旦启动驱动程序,就无法在“ none”和“ normal”之间切换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 个答案:

答案 0 :(得分:0)

您需要使用Explicit Wait并阅读readyState property value,类似:

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

您还需要以下导入:

from selenium.webdriver.support.ui import WebDriverWait

更多信息:How to use Selenium to test web applications using AJAX technology