快速信息:我使用的是Mac OS,Python 3。
我有800个链接需要在页面上点击(还有更多页面需要自动化)。
它们是隐藏的,因为当您将鼠标悬停在上方时,您只会看到这些链接。 我通过注入CSS规则来解决这个问题(只是说它以及它不起作用的原因)。
当我尝试通过xpath查找元素时,它不希望之后单击链接,并且它也不会发现它们总是只有4(即使在视图中显示更多)。
HTML:
<a href="#" title="Display">Display</a>
当我在检查中单击确定复制xpath时,它会给我:
//*[@id="tiles"]/li[3]/div[2]/ul/li[2]/a
但是当我像这样使用它时它不起作用:
driver.find_elements_by_xpath('//*[@id="tiles"]/li[3]/div[2]/ul/li[2]/a')
所以有两个问题:
XPath中的模式是相同的,/li[3]
是唯一更改的数字,为此,我创建了一个for循环,根据我成功完成的页数创建它们。
因此,如果可以使用我自己生成的XPath来完成,这与我在检查器中复制XPath时相对应,那么我只需要回答问题2。
PS:这是第一个HTML的父级HTML:
<li onclick="openPopup(event, 'collect', {item_id: 165214})" class="collect" data-item-id="165214"><a href="#" title="Display">Display</a></li>
答案 0 :(得分:1)
这个XPath,
//a[.="Display"]
将选择锚文本等于a
的所有"Display"
个链接。
答案 1 :(得分:0)
根据您的问题,您共享的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>
标记,如下所示:
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()
答案 2 :(得分:0)
使用带位置元素的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()