【问题标题】:how to get unique XPATH for buttons when the features for all input are the same当所有输入的功能都相同时,如何为按钮获取唯一的 XPATH
【发布时间】:2019-04-21 06:04:33
【问题描述】:

我正在尝试在 python 中使用 selenium web 驱动程序提取 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']

感谢任何见解!

【问题讨论】:

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


    【解决方案1】:

    尝试在 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
    

    【讨论】:

    • @Andersson-感谢并为我使用祖先的错误感到抱歉;我只是在学习硒
    【解决方案2】:

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

    #player_roster #go_button
    

    那是

    browser.find_element_by_css_selector("#player_roster #go_button")
    

    # 是一个 id 选择器。

    CSS 选择器通常比 XPath 快,但旧版 IE 除外。更多info。

    【讨论】:

    • @QHarr-感谢您的建议。 CSS 选择器相对于 xpath 的优缺点是什么?
    • 在大多数情况下,CSS 选择器比 XPath 更快,而且通常更健壮。 stackoverflow.com/a/52039249/6241235
    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2013-01-17
    相关资源
    最近更新 更多