【发布时间】:2020-02-18 16:33:24
【问题描述】:
我在使用 selenium 和 xpath 时遇到了一个非常奇怪的问题。我有一个页面可以呈现 25 个 <a> 并带有嵌套的 <img/> 标签。我需要使用findElements() 所有这些元素。如果我获得页面源并通过文本搜索以下子字符串:“alt="Expand List"" 我会出现 25 次。但是当我执行命令let items = await driver.findElements(By.xpath("//a[//img[contains(@alt,'Expand List')]]")) 时,我得到了 32 个项目。我在 google chrome 中记录了这些项目,并在列表中添加了 <a>,其中包含具有不同 alt 值的图像。有任何想法吗?这段代码:
let text = await driver.getPageSource();
var count = (text.match(/alt="Expand List"/g) || []).length;
let items = await driver.findElements(By.xpath("//a[//img[contains(@alt,'Expand List')]]"))
console.log(count, items.length); //outputs 25, 32
【问题讨论】:
-
你能试试像
//a//img[contains(@alt,'Expand List')]这样的XPATH吗? -
我认为您的 xpath 错误地定义了谓词。我认为(?)它正在找到任何 A ,然后为您的谓词 (//img[contains(@alt,'Expand List')]) 返回 true,因为它使用 //。试试上面评论中的例子,我认为它更接近你的意图。
标签: javascript selenium selenium-webdriver web-scraping selenium-chromedriver