Python Xpath完全不工作

Python Xpath完全不工作,python,html,selenium,xpath,element,Python,Html,Selenium,Xpath,Element,快速信息:我正在使用MacOS,Python3 我有800个链接需要在一个页面上点击(还有更多的页面需要自动点击) 它们是隐藏的,因为只有当您将鼠标悬停在上面时,才能看到这些链接。 我通过注入CSS规则修复了这个问题(只是说万一这是它不起作用的原因) 当我试图通过xpath查找元素时,它不希望在之后单击链接,而且它也不会找到所有元素,它们总是只有4个(即使视图中显示了更多) HTML: 但当我这样使用它时,它不起作用: driver.find_elements_by_xpath('//*[@id

快速信息:我正在使用MacOS,Python3

我有800个链接需要在一个页面上点击(还有更多的页面需要自动点击)

它们是隐藏的,因为只有当您将鼠标悬停在上面时,才能看到这些链接。 我通过注入CSS规则修复了这个问题(只是说万一这是它不起作用的原因)

当我试图通过xpath查找元素时,它不希望在之后单击链接,而且它也不会找到所有元素,它们总是只有4个(即使视图中显示了更多)

HTML:

但当我这样使用它时,它不起作用:

driver.find_elements_by_xpath('//*[@id="tiles"]/li[3]/div[2]/ul/li[2]/a')
所以有两个问题:

  • 我怎么才能把它们都弄到手
  • 我如何让它点击每一个
  • XPath中的模式是相同的,
    /li[3]
    是唯一更改的数字,为此,我创建了一个for循环,以根据我成功完成的页面计数创建它们

    所以,若可以使用我在inspector中复制XPath时所对应的我自己生成的XPath来完成,那个么我只需要回答问题2

    注:这是第一个HTML的父HTML:

    <li onclick="openPopup(event, 'collect', {item_id: 165214})" class="collect" data-item-id="165214"><a href="#" title="Display">Display</a></li>
    
  • 此XPath

    //a[.="Display"]
    

    将根据您的问题选择锚文本等于
    “Display”

    的所有
    a
    链接,您共享的
    HTML
    和您的代码尝试没有必要获取
  • 标记。相反,我们将在列表中获得
    标记。因此,要回答您的第一个问题,您可以使用以下代码行:

    all_Display = driver.find_elements_by_xpath("//*[@id='tiles']//li/div[2]/ul/li[@class='collect']/a[@title='Display']")
    
    下一步
    要单击它们中的每一个
    ,您必须创建一个
    循环
    ,以遍历所有
    标记,如下所示:

    all_Display = driver.find_elements_by_xpath("//*[@id='tiles']//li/div[2]/ul/li[@class='collect']/a[@title='Display']")
    for each_Display in all_Display :
        each_Display.click()
    

    使用XPath和按位置排列的元素并不理想。而是使用CSS选择器来匹配目标元素的属性

    比如:

    all_Display = driver.find_elements_by_css_selector("#tiles li[onclick][data-item-id] a[title]")
    
    然后,如果它们都没有加载新页面,则可以在循环中单击它们:

    for element in all_Display:
        element.click()
    

    在此处发布代码时,请确保使用代码工具(
    {}
    )缩进代码。特别是对于HTML,除非格式化代码,否则代码将消失。
    find\u elements\u by\u get()
    ?这不应该是
    find_elements\u by_xpath()
    ?是的,很抱歉,就像你在我的代码中说的那样,这是从meDid重新键入的,你还输入了HTML,因为你不得不在注释中与你的回答者进行大量的来回交流,这表明你可能没有提供真正的问题?很抱歉,这是一个新的问题(编码并询问相关问题)好的,首先我创建了一个名为each_Display的变量,并输入了您建议的代码。但我没有得到任何回报(过程以退出代码0结束)。此外,我尝试在没有变量each_Display的情况下使用该变量,这也给了我相同的结果。(没有错误,只有空结果)此外,我还进行了计数检查,以查看是否找到了任何元素,并得到了0作为响应。(创建了变量count并在for循环中添加了1)@breinvi这本质上意味着您强制我们使用的xpath不是唯一标识该元素的。共享相关HTML。(不熟悉编码,所以我不知道与之相关的是什么…您正试图通过文本收集哪些元素,如
    Display
    ?与@DebanjanB的答案相同,没有任何返回,没有错误。它只是完成代码,没有结果。(过程结束,退出代码为0)我还做了计数检查,看看是否找到了任何元素,并得到了0作为响应。(创建了变量count,并在for循环中添加了1)然后,当您说
    在HTML中,或者它在未说明的框架中,或者它在XPath计算后未动态创建时,您报告了不正确的情况。出现错误:selenium.common.exceptions.NoSuchElementException:Message:无此类元素:无法找到元素:{“方法”:“css选择器”,“选择器”:“#tiles li[onclick][data item id]a[title]”(会话信息:chrome=63.0.3239.108)
    find_elements\u by_css_selector
    不会引发
    NoSuchElementException
    ,除非您定义了隐式等待。请确保目标元素不在框架中。除此之外,您应该获得一些元素,因为它与您提供的HTML匹配。我阅读了您案例中的错误代码,问题出在其他地方,我运行了您的建议再次出现,我的柜台上显示0,退出代码为0
    all_Display = driver.find_elements_by_css_selector("#tiles li[onclick][data-item-id] a[title]")
    
    for element in all_Display:
        element.click()