【发布时间】:2020-10-03 23:44:42
【问题描述】:
我目前正在开发一个 node.js 脚本,它需要使用 Puppeteer 启动一个 headful chromium 实例,然后每 3 秒对页面进行一次屏幕截图,这是我的代码:
const puppeteer = require('puppeteer');
async function init (){
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
await page.goto('https://example.com');
screenshot(page)
};
async function screenshot(page){
let buffer = await page.screenshot();
let imageBuffer = buffer.toString('base64');
// save imageBuffer to database
setTimeout(screenshot, 3000, page)
}
我当前的问题是我需要用户仍然能够在浏览器和他的计算机上正常导航,但这不可能:
- 截屏时页面滞后,如下视频所示:https://youtu.be/Tl2w-qKckkc
- 制作屏幕截图时,浏览器窗口聚焦并位于所有窗口的顶部。
我也尝试过使用 Playwright,但将它与 chromium 一起使用时会出现同样的错误。有人可以帮忙吗?
【问题讨论】:
-
究竟是什么阻止了:“用户仍然能够在浏览器和他的计算机上正常导航”?您是说 puppeteer 创建屏幕截图时闪烁(缩小)会导致问题吗?从第一个版本开始就是这样,它不会影响任何东西,只是一个视觉故障。
-
当您需要每 3 秒截屏一次时,它确实有效果。此外,它使窗口成为焦点。
-
这些现象与 Chromium 本身有关,与 Puppeteer 或 Playwright 无关。如果您在屏幕截图创建过程中遇到性能问题,这是一个已知且记录在案的问题 pptr.dev/… bugs.chromium.org/p/chromium/issues/detail?id=741689,尤其是 OS X 的情况,但我也听说过有关性能相关的抱怨,也就是 headful 和 headless 运行。 ...
-
...您可以尝试使用
ignoreDefaultArgs: ['--disable-dev-shm-usage']args 启动Puppeteer,它可能会提供更好的性能。关于window的焦点:它只是一个视觉的东西,它不影响Puppeteer如何与页面交互。如果您感到困扰,请随时为 Chromium 团队提出票:bugs.chromium.org/p/chromium/issues/entry。 -
好的,谢谢,我会尽快报告。
标签: javascript node.js automation puppeteer playwright