NightmareJS:“无法在'文档'上执行'querySelector':'#LINK1 $ 1'不是有效的选择器。”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (156)

我正在使用NightmareJS来搜索网站上的数据,该网站使用id作为锚点标签,其方式与下面的代码类似。

<div>
    <a id="#LINK1$1"></a>
</div>

我正在尝试使用'.click(Selector)'方法,该方法使用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."

我该怎么办?

提问于
用户回答回答于

您可以使用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>​

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动