Не ждите загрузки страницы, используя 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 следующее:

  1. none (Не определено)
  2. eager (страница становится интерактивной)
  3. 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"
Другие вопросы по тегам