当所有输入的功能都相同时,如何获得按钮的唯一XPATH

时间:2018-11-18 20:31:55

标签: python selenium xpath web-scraping selenium-chromedriver

我正在尝试使用python中的硒网络驱动程序提取NBA球员的统计信息,这是我的尝试:

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 :(得分:2)

请尝试在XPAth下选择所需的“转到”按钮:

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

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

请注意,您不应在XPath表达式中混合使用单引号和双引号,并且正确使用ancestor轴是

//descendant_node/ancestor::ancestor_node

答案 1 :(得分:1)

您还可以切换到CSS选择器,并使用后代组合,在这种组合中,您可以通过Go按钮使用父元素将其限制为适当的形式

#player_roster #go_button

那是

browser.find_element_by_css_selector("#player_roster #go_button")

#是ID选择器。

CSS选择器通常比XPath更快,除非是较旧的IE版本。更多info