【问题标题】:Find ancestor element and click on link using Selenium + Python使用 Selenium + Python 查找祖先元素并单击链接
【发布时间】:2020-03-19 20:09:13
【问题描述】:

我正在尝试使用 xpath 单击“a”标签,但无法这样做。根据我的方法,它有两个部分: 1) 查找具有文本“查看评论”的 div 元素 - 这在一定程度上起作用

2) 找到祖先标签并单击它 - 这不起作用。我怎样才能做到这一点?

我的代码:

a = browser.find_element_by_xpath("//*[contains(text(),'See Reviews')]")

这工作没有错误。但如果将其更改为 text()="See Reviews",我会得到 NoSuchElementException

此外,对于 2) 我试过这个,但它抛出 NoSuchElementException

a.find_element_by_xpath(".//ancestor::a").click()

下面是 HTML 结构:

<a class="cd ay at ce al cf cg b8 ch aq c7 c8 ci" href="/home/e747d172-2647-476a-a3d3-661a7b952919/feedback/restaurant?userUuid=undefined&amp;userExcludeExperiments=undefined"><div class="cj">See Reviews</div><svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform: rotate(0deg);"><path d="M15.65 7L10.775 13.75H8.15L12.275 8.125H0.5V5.875H12.275L8.15 0.25H10.775L15.65 7Z" fill="black"></path></svg></a>

【问题讨论】:

    标签: python selenium xpath


    【解决方案1】:

    您可以在同一个 xpath 中使用 preceding 来查找祖先 a 标记。
    你的代码应该是这样的:

    a = browser.find_element_by_xpath("//div[contains(text(),'See Reviews')]//preceding::a")
    a.click()
    

    【讨论】:

    • 这似乎不起作用。我仍然收到 NoSuchElementError。问题似乎是它不匹配 div 元素。当我尝试 browser.find_element_by_xpath("//*[contains(text(),'See Reviews')]") 时,它可以工作,但是当我尝试查找祖先并单击时,它显示 ElementNotInteractable
    【解决方案2】:

    这个 XPath 应该可以正常工作。

    最短形式:

    //a[//div[.="See Reviews"]]
    

    替代方案:

    //div[.="See Reviews"]/ancestor::a
    //div[.="See Reviews"]/parent::a
    

    更安全的选择:

    //a[//div[normalize-space(.)="See Reviews"]]
    //div[normalize-space(.)="See Reviews"]/ancestor::a
    //div[normalize-space(.)="See Reviews"]/parent::a
    

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 2014-10-11
      • 1970-01-01
      • 2020-04-22
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多