Puppeteer是一个Node库,它提供了一个高级API,通过DevTools协议控制无头Chrome或Chromium。它还可以配置为使用完整(非无头)Chrome或Chromium。
Page.locator() 是选择元素并与元素交互的推荐方法。为什么它提供的功能比 Page.$() 少?
来自页面互动 |傀儡师: 定位器是选择元素并与其交互的推荐方法。定位器封装了如何选择元素的信息,它们允许 Puppe...
我想在创建帖子时单击 Facebook 的照片/视频按钮。该元素是: 我想在创建帖子时单击 Facebook 的照片/视频按钮 。该元素是: <div aria-label="Photo/video" aria-pressed="false" class="..." role="button" tabindex="0"> <div><div><div class="..."><div class="..."><div class="..."> <img class="..." alt="" src="https://static.xx.fbcdn.net/rsrc.php/v3/y7/r/Ivw7nhRtXyo.png?_nc_eui2=AeHY6dd2udiKCsGGc3_l3Lj2PL4YoeGsw5I8vhih4azDks5jrq6FoGG-iYDYkCJ4e3z08U_itrGNYjc5wzxwesxH" style="height: 24px; width: 24px;"> </div><div class="..." role="none" data-visualcompletion="ignore" style="inset: 0px;"></div></div></div></div><div><div></div></div></div></div> 根据页面互动 | Puppeteer,我认为正确的代码是: await page.locator('::-p-aria([name="Photo/video"][role="button"])').click(); 但它没有点击。将 name 更改为 label 没有帮助。你知道如何让它发挥作用吗? 在 Puppeteer 中,与基于 ARIA 属性的元素交互时,如 aria-label,正确的做法是结合使用 page.click() 和适当的选择器,而不是 ::-p-aria 伪元素方法 以下是如何使用 aria-label 单击“照片/视频”按钮: 正确做法: 您可以通过 aria-label 属性定位元素,确保您定位到具有 role="button": 的按钮 await page.click('[aria-label="Photo/video"][role="button"]'); 此选择器将以 aria-label="Photo/video" 和 role="button" 为目标 div,这是您要查找的元素。 如果您尝试单击的元素位于 iframe 内,或者涉及动态元素,您可能需要使用 waitForSelector 或 waitForFunction 等待该元素变得可用,以确保该元素已准备好可供单击: await page.waitForSelector('[aria-label="Photo/video"][role="button"]'); await page.click('[aria-label="Photo/video"][role="button"]'); 让我知道这是否有帮助。
为什么需要 Array.map(),否则 var 是未定义的? / 如何消除Array.map()?
我在 node.js 中运行一些 JavaScript 代码,它控制 puppeteer 在 Web 浏览器中自动执行任务。 此代码获取页面上的链接列表并将其输出到控制台: 常量链接=...
如何在 stenciljs e2e 测试中将函数作为 prop 传递?
https://stenciljs.com/docs/end-to-end-testing#set-a-prop-on-a-component-using-an-external-reference 它被提到为使用 $evalfrom puppetry。但是当我检查测试浏览器时,我看不到......
尝试捕获页面中的所有 console.log 返回未定义,但我不明白为什么 这是 const anchors = Array.from(document.querySelectorAll(sel));正确的? 常量木偶...
使用 Puppeteer/Node.js 抓取网站时如何等待 JavaScript 函数进行评估?
我有一个网站,我想在其中操作某些用户输入,通过单击按钮生成报告,并通过单击按钮下载结果报告。 我记录了用户的行为(
puppeteer elementHandle 通过索引或通过检查 textContent
我有一个与此类似的页面 一些文字1 一些文字 2 一些T... 我有一个与此类似的页面 <div class="myclass">Some Text 1 </div> <div class="myclass">Some Text 2 </div> <div class="myclass">Some Text 3 </div> <div class="myclass">Some Text 4 </div> 我想使用 puppeter 来获取这些的 elementHandle await page.$('.myclass'); 但是我想通过索引获取元素,类似于 await page.$('document.querySelectorAll(\'div[class="myclass"]\')[' + myIndex ']') 或者通过检查文本内容(伪代码) await page.$('document.querySelectorAll(\'div[class="myclass"]\').foreach => textContent == Some Text 2') 是否可以使用 puppeteer nodejs 来实现这一点? 通过索引获取元素(句柄): 使用这个的人不多,但我最喜欢的通过索引获取元素的方法是使用内置的 css 选择器::nth-child()!这是一个示例(当然是在异步函数内): const index = 2; // second element (nth-child uses 1-based index) const elementHandle = await page.$(`div.myclass:nth-child(${index})`); 您不能在 document.querySelectorAll() 中使用 await page.$(),page.$() 需要一个选择器作为参数,请参阅:https://pptr.dev/api/puppeteer.page。_ 通过文本内容获取元素(句柄) 就像我刚才说的,你只能在page.$()内部传递一个css选择器字符串。我会使用索引解决方案,但如果您想通过文本内容获取元素,您可以使用这个使用 page.evaluateHandle(): 的示例 const textToFind = "Some Text 2"; const elementHandle = await page.evaluateHandle((text) => { return Array.from(document.querySelectorAll('.myclass')) .find(element => element.textContent === text); }, textToFind); 我希望这对某人有帮助!祝你有美好的一天
puppeteer 为 page.close() 安全地分离 CDP 会话
我有这个代码片段,与 puppeteer 一起使用来创建 CDP 会话。 让浏览器=等待puppeteer.launch(选项); const page = 等待 browser.newPage(); const session = 等待 page.target().
我无法在 render.com 上部署我的 dockerized 应用程序,我正在使用 puppeteer-real-browser 库,如果在 Linux 操作系统上运行,则需要安装 xvfb。 我正在使用 Chromium 版本 130.0.672...
我可以忽略“离开站点”吗?使用 Puppeteer 浏览无头时的对话框?
我正在使用 Puppeteer 在网站上测试一些表单。当我运行测试时,我注意到尝试在页面之间导航时执行会卡住。我自己手动进行了一次试运行,并意识到......
我最近经常使用 puppeteer,并且能够毫无问题地单击其他按钮、遍历 DOM 等。 然而,我遇到了一个我无法按下的特定按钮......
如何使用具有 PDF/UA 辅助功能的 puppeteer 将 pdf 从 HTML 制作为 PDF。
如何将 Cloudflare Turnstile 令牌注入 Puppeteer?
我正在尝试自动访问使用 Cloudflare Turnstile 的网站。我已设法从 cf-turnstile-response 获取令牌,但我不知道如何注入它来完成挑战。 康...
Recaptcha enterprise v3,查找操作参数
我正在研究时事通讯自动化,但《华盛顿邮报》是我陷入困境的地方。 这个网站使用的是 v3 验证码,我正在使用 2captcha 服务来解决验证码,现在我被困在这里......
我正在尝试使用 puppeteer 进行自动化。如何从 Shadow dom 中选择选项?屏幕截图显示了 Shadow dom,里面有一个选择选项。我正在尝试使用木偶操作者选择选项。 合作...
我正在尝试将pdf转换为base64并作为电子邮件附件发送,但我无法转换为base64而不是创建一个文件,我想将其转换为base64以便我可以发送...
Puppeteer 可在控制台运行,但在 Cpanel VPS 上从 PHP 调用时则无法运行
我有一个使用 puppeteer 创建 pdf 的脚本,该脚本由使用 shell_exec 的 php 页面调用。这曾经在我以前的服务器上运行,但现在我的主机已将我的 VPS 迁移到新系统上...
PuppeteerSharp 无法在 PDF 输出中显示 Base64 编码的图像
我在 .NET 项目中使用 PuppeteerSharp 将 HTML 页面转换为 PDF。虽然当我在浏览器中查看 HTML 时图像可见,但它们不会出现在生成的 PDF 中。图片是
如何使用await page.click、page.waitForSelector等实现函数
在主代码中我多次使用这个片段: (异步()=> { (一些代码) 尝试 { 等待 page.waitForSelector('.css123', {超时: 5000}); } 捕获 (e) { 控制台.log(错误); ...
我有一个使用 puppeteer 的 NodeJS 脚本。该脚本由 Laravel(一个 PHP 框架)启动。 在本地一切正常,因为 laravel 是在我当前的用户帐户下运行的,这意味着......