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

С помощью селена в питоне я хочу собрать данные о пользователе по имени «Грэм» на веб-сайте ниже: https://github.com/GrahamDumpleton/wrapt/graphs/contributors

Следуя предыдущему вопросу, я нашел заголовок, включающий имя «Грэм», найдя XPath:

driver.find_elements(By.XPATH, "//h3[contains(@class,'border-bottom')][contains(.,'Graham')]")

Как мне найти элемент под этим расположенным заголовком?
XPath:

//*[@id = "contributors"]/ol/li/span/h3/span[2]/span/div/a

Спасибо.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
210
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Искомый элемент может быть однозначно расположен по следующему XPath: //a[contains(.,'commit')].
Итак, если вы хотите напрямую найти все суммы фиксаций пользователей на странице, это можно сделать следующим образом:

commits = driver.find_elements(By.XPATH, "//a[contains(.,'commit')]")
for commit in commits:
    print(commit.text)

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

header = driver.find_elements(By.XPATH, "//h3[contains(@class,'border-bottom')][contains(.,'Graham')]")
commit = header.find_element(By.XPATH, ".//a[contains(.,'commit')]")
print(commit.text)

Обращать внимание.

  1. Здесь header.find_element(By.XPATH, ".//a[contains(.,'commit')]") мы применили find_element метод к header объекту веб-элемента, а не к driver объекту.
  2. Мы используем точку . в начале XPath, чтобы начать поиск с текущего узла (header), а не с начала всего DOM.

UPD
добавление можно найти с помощью этого XPath: //span[@class='cmeta']//span[contains(.,'++')] и удаление с //span[@class='cmeta']//span[contains(.,'--')]

Большое спасибо! @Пророк. Я также хочу собрать число добавления и удаления Грэма. Итак, я пытаюсь: добавление = header.find_element(By.XPATH, ".//a[содержит(.,'++')]"); удаление = header.find_element(By.XPATH, ".//a[содержит(.,' --')]"), но не может найти ни одного элемента. Не могли бы вы помочь мне понять, где может быть проблема? Еще раз спасибо! Xpath добавления и удаления: //*[@id = "contributors"]/ol/li/span/h3/span[2]/span/div/span[‌​1]; //*[@id = "contributors"]/ol/li/span/h3/span[2]/span/div/span[‌​2]

KDWB 27.11.2022 21:13

Большое спасибо, @Prophet. Оно работает. Но он предоставляет такую ​​информацию: 495 коммитов 31 627 ++ 9 898 -- Мой код: дополнение = header.find_element(By.XPATH, ".//span[contains(@class,'cmeta')][contains(., '++')]"). Как мне улучшить код, чтобы он отображал только добавление?

KDWB 27.11.2022 21:33

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

Prophet 27.11.2022 21:41

Выражение Xpath (//*[@class = "border-bottom p-2 lh-condensed"])[1] выберет индивидуальный профиль

Пример:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import time

webdriver_service = Service("./chromedriver") #Your chromedriver path
driver = webdriver.Chrome(service=webdriver_service)

driver.get('https://github.com/GrahamDumpleton/wrapt/graphs/contributors')
driver.maximize_window()
time.sleep(5)

n = driver.find_element(By.XPATH,'(//*[@class = "border-bottom p-2 lh-condensed"])[1]')
name= n.find_element(By.XPATH, './/a[@class = "text-normal"]').text
print(name)

Выход:

GrahamDumpleton

Другие вопросы по теме