Puppeteer 中的选择器语法

Posted

技术标签:

【中文标题】Puppeteer 中的选择器语法【英文标题】:Selector Syntax in Puppeteer 【发布时间】:2020-10-29 09:30:24 【问题描述】:

我正在尝试创建一个脚本,该脚本的部分功能是使用 Puppeteer 在网页上按下按钮。在尝试执行如下所示的行后,我不断收到“不是有效的选择器”错误或未定义的变量。

var termselector = await page.$$( ":button" );
//yields "not a valid selector"


var termselector = await page.$$( "#zci-images > div.detail.detail--slider.detail--images.detail--xd > div > div.detail__panes.js-detail-panes > div:nth-child(1) > div > div.detail__body.detail__body--images > div > div > a" );
//yields "termselector undefined"

也许我只是从根本上误解了选择器的工作原理,但我查看了一些 JQuery 文档,但我似乎仍然无法正确格式化我的选择器。我在哪里可以找到用于 puppeteer 的正确选择器语法的规则?请原谅我的无知

【问题讨论】:

【参考方案1】:

随行:

await page.$$( );

你必须使用css 选择器:https://www.w3schools.com/cs-s-ref/css_selectors.asp

或者你也可以使用xpath查询:https://www.w3schools.com/xml/xpath_syntax.asp

await page.$x( );

如果你熟悉JQuery,不妨试试cheerio:

https://tshaped.io/javascript-scraping-for-marketers-cheerio-and-puppeteer/https://github.com/cheeriojs/cheerio


your provided link 上第一张图片的 CSS 选择器示例:

$$('#zero_click_wrapper img[src^="//external-content"]')[0]

意思是:

开始匹配 html 节点 ID:zero_click_wrapper ...后跟图像imgsrc 标记以//external-content 开头

【讨论】:

请允许我说得更具体一些。如果您访问此链接(我在脚本中使用的链接):duckduckgo.com/?q=bruh&t=hk&iax=images&ia=images,您可以查看选择器:"#zci-images > div.detail.detail--slider.detail--images.detail--xd > div > div.detail__panes.js-detail-panes > div:nth-child(1) > div > div.detail__body.detail__body--images > div > div > a",如果您右键单击该元素并复制其路径,您将获得该选择器。如何将其格式化为可用的选择器? 这是不匹配的。 $$("#zci-images > div.detail.detail--slider.detail--images.detail--xd > div > div.detail__panes.js-detail-panes > div:nth-child(1) > div > div.detail__body.detail__body--images > div > div > a")[0] 你想检索什么?图片? 在我的帖子中添加了示例 是的,或者任何类型的文件。我真的只是想了解这种语言的正确选择器语法。在我对 CSS 选择器的理解中,我似乎遗漏了一些东西。谢谢你的例子。我在哪里可以找到有关您专门使用的格式的文档?另外:var termselector = await page.$$('#zero_click_wrapper img[src^="//external-content"]')[0]; 产生了“未定义术语选择器”

以上是关于Puppeteer 中的选择器语法的主要内容,如果未能解决你的问题,请参考以下文章

Puppeteer/JQuery:选择器在滚动脚本中不起作用

Puppeteer之爬虫入门

Puppeteer之爬虫入门

使用 Puppeteer 时等待文本出现

Puppeteer爬取Youtube列表页面

Web前端之CSS语法与选择器