Не ждите загрузки страницы, используя Selenium в Python
Как сделать, чтобы селен щелкал по элементам и очищал данные до полной загрузки страницы? Мое подключение к интернету довольно ужасное, поэтому иногда требуется полная загрузка страницы, есть ли что-нибудь подобное?
4 ответа
Как вы спрашиваете упоминания о click on elements and scrape data before the page has fully loaded
в этом случае мы можем воспользоваться помощью атрибута pageLoadStrategy
, Когда Selenium загружает страницу / URL по умолчанию, он следует конфигурации по умолчанию с pageLoadStrategy
установлен в normal
, Selenium может начать выполнение следующей строки кода из разных Document readiness state
, В настоящее время Selenium поддерживает 3 разных Document readiness state
который мы можем настроить через pageLoadStrategy
следующее:
none
(Не определено)eager
(страница становится интерактивной)normal
(полная загрузка страницы)
Вот блок кода для настройки pageLoadStrategy
:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
binary = r'C:\Program Files\Mozilla Firefox\firefox.exe'
caps = DesiredCapabilities().FIREFOX
# caps["pageLoadStrategy"] = "normal" # complete
caps["pageLoadStrategy"] = "eager" # interactive
# caps["pageLoadStrategy"] = "none" # undefined
driver = webdriver.Firefox(capabilities=caps, firefox_binary=binary, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe")
driver.get("https://google.com")
Для Chromedriver он работает так же, как и в ответе @DebanjanB, однако стратегия загрузки страниц "рвением" пока не поддерживается
Так что для chromedriver вы получаете:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
caps = DesiredCapabilities().CHROME
# caps["pageLoadStrategy"] = "normal" # Waits for full page load
caps["pageLoadStrategy"] = "none" # Do not wait for full page load
driver = webdriver.Chrome(desired_capabilities=caps, executable_path="path/to/chromedriver.exe")
Обратите внимание, что при использовании стратегии "нет" вам, скорее всего, придется реализовать собственный метод ожидания, чтобы проверить, загружен ли нужный элемент.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
WebDriverWait(driver, timeout=10).until(
ec.visibility_of_element_located((By.ID, "your_element_id"))
)
Теперь вы можете начать взаимодействовать со своим элементом до полной загрузки страницы!
ТАК ЖЕ, КАК ВЫШЕ, для тех, кто использует хром. РАБОТАЕТ ИДЕАЛЬНО. Сильно ускорил мое время.
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
caps = DesiredCapabilities().CHROME
# caps["pageLoadStrategy"] = "normal" # Waits for full page load
caps["pageLoadStrategy"] = "eager" # Do not wait for full page load
driver = webdriver.Chrome(desired_capabilities=caps, executable_path="path/to/chromedriver.exe")
Используйте как это
timeout = 10
try:
element_name = EC.presence_of_element_located((By.ID, 'Id of element'))
WebDriverWait(browser, timeout).until(element_name)
print "Element is there"
except TimeoutException:
print "Element is not there"