Какой правильный синтаксис проверяет.readyState веб-сайта в Selenium Python?
Я пытаюсь проверить состояние.readyState веб-сайта с помощью.execute_script, но постоянно получаю сообщение об ошибке.
Я использую pageLoadStrategy "none" в chromedriver, поэтому я пытаюсь проверить, что готовность веб-сайтов больше не "загружается".
Примечание: этот вопрос специфичен для Python.
WebDriverWait(driver, timeout=20).until(
driver.execute_script('return document.readyState') == 'interactive'
)
значение = метод (self._driver) TypeError: объект 'str' не вызывается
Я также попытался использовать лямбду, которая не выдает ошибку, однако печать готовности приведет к противоречивым результатам.
WebDriverWait(driver, timeout=20).until(
lambda driver: driver.execute_script('return document.readyState') == 'interactive'
)
print(driver.execute_script('return document.readyState'))
погрузка
2 ответа
С помощью pageLoadStrategy
как none
а затем с помощью WebDriverWait для 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:\Utility\BrowserDrivers\geckodriver.exe') driver.get("http://google.com")
Хром:
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
как 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"))
Вы можете найти подробное обсуждение в разделе Как заставить Selenium не ждать полной загрузки страницы с медленным сценарием?
Outro
Есть ли у нас какая-либо общая функция, чтобы проверить, полностью ли загружена страница в Selenium?
Вы можете переместить условие в 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
увидеть этот ответ.
Надеюсь это поможет!