首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NightmareJS:“无法对‘Document’执行'querySelector‘:'#LINK1$1’不是有效的选择器。”

NightmareJS:“无法对‘Document’执行'querySelector‘:'#LINK1$1’不是有效的选择器。”
EN

Stack Overflow用户
提问于 2018-06-01 12:11:42
回答 1查看 611关注 0票数 0

我正在使用NightmareJS抓取一个网站的数据,该网站在他们的锚标签上使用id,类似于下面的代码。

代码语言:javascript
复制
<div>
    <a id="#LINK1$1"></a>
</div>

我正在尝试使用‘.click(选择器)’方法,它使用querySelector作为默认值,但是我似乎不能通过id获得锚标签。我都试过了

代码语言:javascript
复制
.click('#LINK1$1'),
.click('\u{0023}LINK\u{0031}\u{0024}\u{0031}')

但它们都会导致相同的错误

代码语言:javascript
复制
"Failed to execute 'querySelector' on 'Document': '#LINK1$1' is not a valid selector."

我该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2018-06-08 05:12:49

您可以使用Xpath方式来完成此操作。Puppeteer有一个xpath函数。

理论

从他们的文档来看,

代码语言:javascript
复制
page.$x(expression)
expression <string> Expression to evaluate.
returns: <Promise<Array<ElementHandle>>>
The method evaluates the XPath expression.

它将返回一个元素数组。我们可以随心所欲地click它们。

实践

获取元素的xpath,

现在应用它,

代码语言:javascript
复制
// 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();

完成了!

顺便说一句,这也适用于浏览器,

代码语言:javascript
复制
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>​
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50635994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档