Selenium WebDriver не может найти класс

Вопрос или проблема

Мне нужно извлечь подэлементы из класса этого элемента:

<td data-automation-id="horse-racing-section-row-1-meeting-cell" class="meetingCellDesktopMediumAbove_femjjxq">

Подэлементы:

<a href="/horse-racing/australia-nz/ballarat"><div class="meetingCellInternalContainerAbove_fyg3mg0"><div class="leftCellContainer_frjo067"><span class="size14_f7opyze medium_f1wf24vo meetingName_f1jzu4qi" data-automation-id="horse-racing-section-row-1-meeting-name">Ballarat</span>

Я использовал все эти методы, чтобы попытаться найти его:

races = driver.find_elements(By.XPATH, "//td[@class, 'meetingCellDesktopMediumAbove_femjjxq']")

races = driver.find_elements(By.XPATH, "//td[contains(@class, 'meetingCellDesktopMediumAbove_femjjxq')]")

races = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//td[contains(@class, 'meetingCellDesktopMediumAbove_femjjxq')]")))

races = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[contains(@class, 'meetingCellDesktopMediumAbove_femjjxq')]")))

races = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[@class, 'meetingCellDesktopMediumAbove_femjjxq']")))

races = driver.execute_script('return document.querySelectorAll("td.meetingCellDesktopMediumAbove_femjjxq")')

races = driver.find_elements(By.CSS_SELECTOR, 'meetingCellDesktopMediumAbove_femjjxq')

races = WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, 'td.meetingCellDesktopMediumAbove_femjjxq')))

Когда я пытаюсь:

for race in races:
    print(race.text)

Он ничего не возвращает.

Ответ или решение

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

  1. Проверка локатора: Убедитесь, что класс элемента правильно задан. Если ваш класс meetingCellDesktopMediumAbove_femjjxq может изменяться динамически, это может быть причиной, по которой Selenium не может его найти. Попробуйте использовать более надежные локаторы, такие как data-automation-id.

    Пример локатора для поиска элемента по data-automation-id:

    races = driver.find_elements(By.XPATH, "//td[@data-automation-id='horse-racing-section-row-1-meeting-cell']")
  2. Проверка состояния элемента: Поскольку элементы могут отсутствовать или быть скрытыми во время загрузки страницы, используйте явное ожидание для проверки их наличия или видимости. Попробуйте следующее:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    try:
       races = WebDriverWait(driver, 10).until(
           EC.presence_of_all_elements_located((By.XPATH, "//td[@data-automation-id='horse-racing-section-row-1-meeting-cell']"))
       )
    except TimeoutException:
       print("Элементы не найдены в течение заданного времени.")
  3. Проверка текста: Если вы успешно находите элементы, но при попытке вывести их текст они возвращают пустую строку, проверьте, содержится ли нужный текст внутри дочерних элементов. Например, текст может находиться внутри <span>:

    for race in races:
       meeting_name = race.find_element(By.XPATH, ".//span[@data-automation-id='horse-racing-section-row-1-meeting-name']")
       print(meeting_name.text)
  4. Использование CSS селектора: Можно также использовать CSS-селекторы, чтобы найти элемент. Например:

    races = WebDriverWait(driver, 10).until(
       EC.presence_of_all_elements_located((By.CSS_SELECTOR, "td[data-automation-id='horse-racing-section-row-1-meeting-cell']"))
    )
  5. Обработка JavaScript: Если ваш код не находит элементы, возможно, они создаются динамически с помощью JavaScript. Попробуйте использовать JavaScript для получения элемента:

    races = driver.execute_script('return document.querySelectorAll("td[data-automation-id=\'horse-racing-section-row-1-meeting-cell\']")')

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

Оцените материал
Добавить комментарий

Капча загружается...