我正在尝试使用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']
我非常感谢您的见解!
答案 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。