Xpath单击不起作用

2024-04-19 18:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

快速信息:我使用的是macos,python3。在

我有大约800个链接,需要点击一个网页(和更多的网页去,所以需要自动化)。在

它们是隐藏的,因为你只看到那些链接当你悬停。 我通过注入CSS规则修复了这个问题(只是说万一它不起作用)。在

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

HTML格式:

<a href="#" title="Display">Display</a>

当我在inspect中单击ok copy xpath时,它会显示:

^{pr2}$

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

^{3}$

所以有两个问题:

  1. 我怎么把它们都弄到?在
  2. 我如何让它点击每一个?在

XPath中的模式是相同的,/li[3]是唯一更改的数字,为此,我创建了一个for循环,根据我成功完成的页面计数创建它们。在

因此,如果可以用我自己生成的XPath来完成,这些XPath与我在inspector中复制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>

Tags: 信息id元素网页title链接htmldisplay
3条回答

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

比如:

all_Display = driver.find_elements_by_css_selector("#tiles li[onclick][data-item-id] a[title]")

如果没有加载新页面,则可以循环单击它们:

^{pr2}$

这个XPath

//a[.="Display"]

将选择锚文本等于"Display"的所有a链接。在

根据您的问题,您共享的HTML和代码尝试没有必要获取<li>标记。相反,我们将得到列表中的<a>标记。因此,要回答您的第一个问题How do I get them all,您可以使用以下代码行:

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

接下来,to click on each of them您必须创建一个loop来迭代所有的<a>标记,如下所示:

^{pr2}$

相关问题 更多 >