如何正确使用selenium-python中的.readyState等待网页"complete"?
How to properly use .readyState in selenium-python to wait for a web page to be "complete"?
我试图让 selenium 使用 .readyState 等待页面完全加载,但我找不到正确的方法让 selenium 在继续之前测试网页的 .readyState。
这两行散列线是我让它工作的最佳尝试,包括下面 link 中的示例;其中“.equals”似乎没有任何作用。
Is there a way with python-selenium to wait until all elements of a page has loaded?
当 运行 带有散列行的代码时,输出将打印 "loading" 并引发错误,因为打印函数之后的元素尚未加载。
注意:使用等待和预期条件可以轻松解决此问题,但问题在于使用 .readyState。
ps:我的理解是,当 pageLoadStrategy 设置为 "normal" 时,selenium 默认等待 .readyState 为 "complete",但是 pageLoadStrategy 无法在 [=29] 之间切换=] 和 "normal" 一旦驱动程序启动。
如果有人知道,那么这可能是一个可能的解决方案。
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")
您需要使用 Explicit Wait and read 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
我试图让 selenium 使用 .readyState 等待页面完全加载,但我找不到正确的方法让 selenium 在继续之前测试网页的 .readyState。
这两行散列线是我让它工作的最佳尝试,包括下面 link 中的示例;其中“.equals”似乎没有任何作用。
Is there a way with python-selenium to wait until all elements of a page has loaded?
当 运行 带有散列行的代码时,输出将打印 "loading" 并引发错误,因为打印函数之后的元素尚未加载。
注意:使用等待和预期条件可以轻松解决此问题,但问题在于使用 .readyState。
ps:我的理解是,当 pageLoadStrategy 设置为 "normal" 时,selenium 默认等待 .readyState 为 "complete",但是 pageLoadStrategy 无法在 [=29] 之间切换=] 和 "normal" 一旦驱动程序启动。 如果有人知道,那么这可能是一个可能的解决方案。
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")
您需要使用 Explicit Wait and read 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