как получить уникальный XPATH для кнопок, когда функции для всех входов одинаковы - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь извлечь статистику игроков NBA с помощью веб-драйвера Selen в Python, и вот моя попытка:

from selenium import webdriver
from selenium.webdriver.support.ui import Select


browser = webdriver.Chrome()

browser.get('https://www.basketball-reference.com')

xp_1 = "//select[@id='selector_0' and @name='team_val']"
team = Select(browser.find_element_by_xpath(xp_1))
team.select_by_visible_text('Golden State Warriors')

xp_2 = "//select[@id='selector_0' and @name='1']"
player = Select(browser.find_element_by_xpath(xp_2))
player.select_by_visible_text('Jordan Bell')

Проблема, с которой я столкнулся, состоит в том, что на этой странице есть 4 кнопки «Перейти», и все они имеютте же функции ввода.Другими словами, следующий xpath возвращает 4 кнопки:

//input[@type='submit'and @name="go_button" and @id="go_button" and @value="Go!"]

Я безуспешно пытался добавить предка, как показано ниже, но он не возвращает xpath:

//input[@type='submit' and @name="go_button" and @id="go_button" and @value="Go!"]/ancestor::/form[@id='player_roster']

Я ценю любое понимание!

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

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

#player_roster #go_button

То есть

browser.find_element_by_css_selector("#player_roster #go_button")

# является селектором идентификатора.

Селекторы CSS обычно работают быстрее, чем XPath, за исключением случаев более старых версий IE.Подробнее info .

0 голосов
/ 19 ноября 2018

Попробуйте ниже XPAth, чтобы выбрать требуемую кнопку Go:

"//input[@value='Go!' and ancestor::form[@id='player_roster']]"

или

"//form[@id='player_roster']//input[@value='Go!']"

Обратите внимание, что вы не должны смешивать одинарные и двойные кавычки в выражении XPath и правильно использоватьancestor ось

//descendant_node/ancestor::ancestor_node
...