【发布时间】:2019-05-22 19:46:08
【问题描述】:
我正在尝试使用 Puppeteer 和 Chromium 在 Chrome 中自动化一些功能。我可以登录,选择主导航元素,然后出现子导航菜单。我目前正在控制台中寻找正确的选择器以传递给 Puppeteer,但是,我遇到了困难。
以下 HTML:
<div id="popupTaskMenu" class="launcher...">
<div -not important to task></div>
<nav class="task_launcher_item_heading">
<div task-item="0" class="task_launcher_item_click">Text</div>
<div task-item="1" class="task_launcher_item">Text</div>
</nav>
<div>
在 Chrome 控制台中,我可以通过使用 document.getElementsByClassName("task_launcher_item_heading")[0].childNodes[0].innerText 访问 <nav> 项目,这将返回元素的 innerText,但使用 .click() 方法返回未定义。
任何想法都会有所帮助。
【问题讨论】:
-
嗨,你能告诉我们你的点击功能吗?你到底在哪里使用
.click()函数 -
您可能想使用more complex selector,然后在puppeteer 中使用
document.querySelector或page.$。 -
更复杂的选择器是一个很棒的工具,我可以在 JS 控制台中将 .click() 发送到该元素,但是,我不确定如何在 puppeteer 中使用它。
await page.$('#popupTaskMenu > nav > div.nth-child(2)')我相信是正确的,但我如何发送 .click() 到那个?我会阅读和玩耍更多。 -
所以我尝试了几个不同的选项,但无论如何,我都会收到一条错误消息,指出“ERR 评估失败:DOMException:无法在 'Document' 上执行 'querySelector':'#popupTaskMenu > nav > div.nth-child(2)' 不是有效的选择器。我尝试的最后一行是
await page.evaluate((selector) => document.querySelector('#popupTaskMenu > nav > div.nth-child(2)').click();
标签: javascript selector puppeteer