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