Как спарсить данные на Python через Selenium?

Мне нужно достать данные с помощью Selenium со страницы, которых нет в самом коде страницы (я не шарю, но, видимо, это JavaScript). Вот как я делаю:

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

path = '...'
URL = '...'
driver = webdriver.Chrome(executable_path=path) # он подключается к Chrome
driver.get(URL)                                 # и успешно переходит по ссылке, все ОК

Для справки

Вот так выглядит код 1 из элементов, которые мне нужны:

<span class="wrapper__top_3ztMC">
      Машинное зрение DA
</span>

И тут у меня возникает 3 вопроса.

Вопрос первый. Почему не работает это:

1)

result = driver.find_element_by_class_name('wrapper__top_3ztMC')
result = driver.find_element(By.XPATH, "//span[@class='wrapper__top_3ztMC']")
result = driver.find_element_by_xpath('//span[@class="wrapper__top_3ztMC"]')

Везде 1 и та же ошибка:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//span[@class='wrapper__top_3ztMC']"}
  (Session info: chrome=86.0.4240.75)

Вопрос второй. Почему не работает это:

result = driver.execute_script("return document.getElementsByClassName('wrapper__top_3ztMC')")
result

Возвращает пустой массив [].

НО! Вот это:

element = WebDriverWait(driver, 50).until(
        EC.presence_of_element_located((By.CLASS_NAME, "wrapper__top_3ztMC"))
    )

возвращает мне элемент самый первый (так как я делаю задержку до обнаружения). В итоге: видимо, первые случаи не работают, а последний работает, потому что данные отображаются не сразу, и требуется немного подождать, пока страница прогрузится.

Вопрос главный.

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


Ответы (0 шт):