Драйвер Selenium не возвращает все веб-элементы, даже если они одного класса - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь создать парсер для веб-страницы с использованием селена.

веб-страница - https://www.supersport.hr/sport/dan/0/sport/1

Я могу получить большую часть веб-элементы, которые я пытаюсь получить, но мой скрипт не возвращает их все, даже если они одного и того же класса.

пример страницы: enter image description here

В этом случае мой скрипт возвращает все вышеперечисленные div, но останавливается на «SRL GRČKA 1». и не получает ни одной лиги ниже.

наценка HTML для каждой из этих лиг одинакова:

enter image description here

Я получаю список этих элементов в python, например:

football_leagues_elements = driver.find_elements_by_css_selector("div.sportska-liga.nogomet")

Я также пробовал использовать этот код, но он возвращает тот же результат:

football_leagues_elements = driver.find_elements_by_xpath("//div[contains(@class, 'sportska-liga-wrap')]//div[contains(@class, 'nogomet')]")

Я думаю, что все лиги загружаются на страницу одновременно.

Мой вопрос: почему некоторые div не включены в список веб-элементов?

Любая помощь приветствуется.

1 Ответ

1 голос
/ 09 мая 2020

Веб-сайт здесь НЕДОСТУПЕН. Однако попробуйте Induce Explicit дождитесь и дождитесь появления всех элементов.

football_leagues_elements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"div.sportska-liga.nogomet")))

Вам необходимо импортировать следующие библиотеки.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

Если описанное выше не работает, попробуйте сначала прокрутить страницу, а затем проверьте наличие элементов.

#Scroll bottom of the page.
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
#Get the elements.
football_leagues_elements=WebDriverWait(driver,20).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"div.sportska-liga.nogomet")))
...