Расположение элемента по имени класса с двойным подчеркиванием - PullRequest
3 голосов
/ 04 октября 2019

Я пытаюсь найти элемент по имени класса. К сожалению, имя класса, которое я должен выбрать, содержит двойное подчеркивание с ошибкой «нет такого элемента».

div-element для выбора:

<div class="result-list-entry__data">
...
</div>

выбор:

last_named_class = result.find_element_by_class_name('result-list-entry__data')

Текущий результат (ошибка):

selenium.common.exceptions.NoSuchElementException: Сообщение: такого элемента нет: Невозможно найти элемент: {"method": "css selector", "selector": ". result-list-entry__data"} (Информация о сеансе: chrome = 77.0.3865.90) ​​

Можно ли избежать двойного подчеркивания?

Ответы [ 5 ]

1 голос
/ 04 октября 2019

Прежде всего, проверьте, есть ли какие-либо iframes. если элемент находится в iframe, вам придется переключиться на фрейм, прежде чем делать что-либо с этим элементом.

Вы можете найти этот элемент, используя частичное совпадение строк в атрибуте класса, что-то вроде этого,

last_named_class = result.find_element_by_xpath("//*[contains(@class,'result-list-entry')]")
1 голос
/ 04 октября 2019

Вы можете попытаться получить список всех элементов с помощью class = "result-list-entry__data", используя

Если у вас есть более одного класса в DOM, итерируйте массив elementResult на основе позиции

 elementResult=[];
 elementResult = driver.find_elements_by_class_name("result-list-entry__data");

остальное

elementResult = driver.find_elements_by_class_name("result-list-entry__data");
1 голос
/ 04 октября 2019

Возможно, вы могли бы использовать запрос содержимого в вашем селекторе. Попробуйте что-то вроде этого:

last_named_class = result.find_element_by_xpath("//div[contains(@class, 'result-list')]")

Надеюсь, это немного поможет.

0 голосов
/ 04 октября 2019

Попробуйте следующие вещи,

  1. Применить обязательное ожидание (явное или явное ожидание)
    driver.implicitly_wait(15)
wait = WebDriverWait(driver, 10)
wait.until(ec.visibility_of_element_located((By.XPATH, "//*[contains(@class,'result-list-entry')]")))

Проверьте, является ли элемент дочерним по отношению к элементу iframe. если это так, переключитесь на iframe и попробуйте нажать

Использовать xpath с содержит, если значение свойства элемента часто меняется

    last_named_class = result.find_element_by_xpath("//*[contains(@class,'result-list-entry')]")
0 голосов
/ 04 октября 2019

Вы можете использовать подход, предложенный ранее с двумя, содержит:

last_named_class = result.find_element_by_xpath("//div[contains(@class, 'result-list') and contains(@class, 'data')]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...