我正在使用NightmareJS抓取一个网站以获取数据,并且该网站使用id来 anchor 定标签,其方式类似于下面的代码。
<div>
<a id="#LINK1$1"></a>
</div>
我正在尝试使用'.click(Selector)'方法,该方法默认使用querySelector,但是我似乎无法通过id获得 anchor 标记。
我都尝试过
.click('#LINK1$1'),
.click('\u{0023}LINK\u{0031}\u{0024}\u{0031}')
但是它们都导致相同的错误
"Failed to execute 'querySelector' on 'Document': '#LINK1$1' is not a valid selector."
我该怎么办?
最佳答案
您可以使用Xpath方法来执行此操作。 Puppeteer具有xpath功能。
理论
根据他们的文档,
page.$x(expression)
expression <string> Expression to evaluate.
returns: <Promise<Array<ElementHandle>>>
The method evaluates the XPath expression.
它将返回一个元素数组。我们可以根据需要
click
它们。实践
获取元素的xpath,
现在应用
// we execute the xpath
const elems = await page.$x(`//*[@id="#LINK1$1"]`)
// We click the first element, since it returns an array
await elems[0].click();
完毕!
顺便说一句,这也适用于浏览器,
function getElementByXpath(path) {
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
getElementByXpath(`//*[@id="#LINK1$1"]`)
// >> Returns single node <a id="#LINK1$1">Test</a>
关于javascript - NightmareJS : “Failed to execute ' querySelector' on 'Document' : '#LINK1$1' is not a valid selector.”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50635994/