我正在使用NightmareJS抓取一个网站的数据,该网站在他们的锚标签上使用id,类似于下面的代码。
<div>
<a id="#LINK1$1"></a>
</div>
我正在尝试使用‘.click(选择器)’方法,它使用querySelector作为默认值,但是我似乎不能通过id获得锚标签。我都试过了
.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."
我该怎么办?
发布于 2018-06-08 05:12:49
您可以使用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>
https://stackoverflow.com/questions/50635994
复制相似问题