Как найти XML-элементы через XPath в Python и достать от туда значение.

PiVAS

Новичок
Пользователь
Фев 18, 2021
9
0
1
Здраствуйте. При использовании библиотеки Selenium на Python
Не могу правильно составить поиск. Я тупо не понимаю как.
Есть кусок странице

HTML:
<div class="valueItem-3JDGGSt_">

    <div class="valueValue-3kA0oJs5" style="color: rgb(142, 21, 153);">30.18</div>

</div>

На странице примерно 4 class="valueItem-3JDGGSt_ также 14 штук class="valueValue-3kA0oJs5" но у всех разное значение style="color: rgb(142, 21, 153) и 30.18
Мне нужно получить значение 30,18 как это сделать?

например

Python:
a = driver.find_element_by_xpath('//div[@class="valueValue-3kA0oJs5"][@style="color: rgb(142, 21, 153)"]/div')

Получаю ошибку Message: Unable to locate element:
 
Последнее редактирование:

Noor

Пользователь
Пользователь
Ноя 13, 2020
85
19
8
Не думаю что это XML - элементы, это элементы DOM-дерева
попробуй так

Python:
elements = browser.find_elements_by_class_name('valueItem-3JDGGSt_')
a = elements[0].get_attribute('innerText')
 
Последнее редактирование:
  • Мне нравится
Реакции: PiVAS

PiVAS

Новичок
Пользователь
Фев 18, 2021
9
0
1
Не думаю что это XML - элементы, это элементы DOM-дерева
попробуй так

Python:
elements = browser.find_elements_by_class_name('valueItem-3JDGGSt_')
a = elements[0].get_attribute('innerText')

Спасибо. Помоги разобрать, в моей ошибке. Все как обычно ошибся методом поиска, потому-что есть 2 метода browser.find_element_by_class_name и browser.find_elements_by_class_name
Правда при таком подходе если изменится структура сайта поиск уже будет не верен, а есть вариант найти по
style="color: rgb(142, 21, 153) или даже 142, 21, 153, или что-то типо найти совпадение текста и взять целиком
<div class="valueValue-3kA0oJs5" style="color: rgb(142, 21, 153);">30.18</div> и уже потом с него вытащить значение?
 

PiVAS

Новичок
Пользователь
Фев 18, 2021
9
0
1
Появился вопрос, почему если на странице имеется один класс с уникальным именем
Python:
<div class="valueValue-3kA0oJs5">30.18</div>
И мы применяем
Python:
resul = driver.find_element_by_class_name('valueValue-3kA0oJs5').text
То все ок получаем 30,18, а вот если
Python:
element = driver.find_elements_by_class_name('valueValue-3kA0oJs5')

В массиве "a" лежит 1 элемент
resul = element[0].get_attribute('innerText')
print(resul)
То мы получаем пустую строку. Почему так?
 

Noor

Пользователь
Пользователь
Ноя 13, 2020
85
19
8
у меня все работает
1613725842672.png

find_elements_by_class_name - нужно использовать для поиска списка элементов (множественное число elements как бы намекает), а если обращаться к единственному элементу по классу то можно просто find_element_by_class_name (но учти, что он возьмет только первый элемент, если их несколько) и тогда можно без [0] обойтись
Python:
element = driver.find_element_by_class_name('valueValue-3kA0oJs5')
result = element.get_attribute('innerText')
print(result)

а есть вариант найти по
style="color: rgb(142, 21, 153) или даже 142, 21, 153, или что-то типо найти совпадение текста и взять целиком
<div class="valueValue-3kA0oJs5" style="color: rgb(142, 21, 153);">30.18</div> и уже потом с него вытащить значение?

если прям нужно по стилю, то пробуй через css селектор искать
Python:
element = driver.find_element_by_css_selector('div[style="color: rgb(142, 21, 153);"]')
result = element.get_attribute('innerText')
print(result)

как совет: пробуй найти нужный xPath или css селектор в chrome dev tool (ну ли каким там браузером тебе удобнее) Там все сразу наглядно видно, что находит , а что нет.

CSS одного элемента будет начинаться с одного снака $ (это аналог find_element_by_css_selector)
Код:
$('div[style="color: rgb(142, 21, 153);"]').innerText
1613729376604.png

CSS списка элементов будет начинаться с двойного $$ (это аналог find_elements_by_css_selector)
Код:
$$('div[style="color: rgb(142, 21, 153);"]')[0].innerText
1613729345697.png

xPath = $x
Код:
$x('//div[@style="color: rgb(142, 21, 153);"]')[0].innerText
1613729294244.png
 
Последнее редактирование:

PiVAS

Новичок
Пользователь
Фев 18, 2021
9
0
1
как совет: пробуй найти нужный xPath или css селектор в chrome dev tool (ну ли каким там браузером тебе удобнее) Там все сразу наглядно видно, что находит , а что нет.
Действительно удобно про dev tool не знал. Спасибо. И вообще Ваша помощь не оценима, за ваши 2 поста, научили многому)))
 

Форум IT Специалистов