傀儡师:浏览器:启动器试图杀死

问题描述 投票:0回答:1
当我打电话给

setContent

时,
puppeteer 正在关闭我的页面。

如何调试为什么会发生这种情况?

代码:

chrome = await puppeteer.launch();
page = await chrome.newPage();
await page.setUserAgent(ua);
await page.setViewport({width: Number(width), height: Number(height)});
console.warn("here4");
if (input) {
    console.warn("input found");
    await page.setContent(input);
}
console.warn("here5");

日志:

2025-01-20T00:54:47.099Z puppeteer:browsers:launcher Launching /home/user/.cache/puppeteer/chrome-headless-shell/linux-132.0.6834.83/chrome-headless-shell-linux64/chrome-headless-shell --allow-pre-commit-input --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-crash-reporter --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-hang-monitor --disable-infobars --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-search-engine-choice-screen --disable-sync --enable-automation --export-tagged-pdf --force-color-profile=srgb --generate-pdf-document-outline --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --disable-features=Translate,AcceptCHFrame,MediaRouter,OptimizationHints,ProcessPerSiteUpToMainFrameThreshold,IsolateSandboxedIframes --enable-features=PdfOopif --headless --hide-scrollbars --mute-audio about:blank --remote-debugging-port=0 --user-data-dir=/tmp/puppeteer_dev_chrome_profile-BQX8Ok { detached: true, env: {}, stdio: [ 'pipe', 'ignore', 'pipe' ] }
2025-01-20T00:54:47.116Z puppeteer:browsers:launcher Launched 2692983
here4
input found
2025-01-20T00:54:47.490Z puppeteer:browsers:launcher Trying to kill 2692983
2025-01-20T00:54:47.490Z puppeteer:browsers:launcher Browser process 2692983 exists
/home/user/v14-staging/apps/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:80
            this._reject(callback, new Errors_js_1.TargetCloseError('Target closed'));

编辑: 打印“Trying to Kill”的函数是 Process 类上的kill() https://github.com/puppeteer/puppeteer/blob/89f4f3b1079874b2dd91c727bc058c1b6e09096e/packages/browsers/src/launch.ts#L408 然而,看起来这只是对目标被关闭做出的反应。

在协议跟踪中,在我执行

page.setViewport
之后,我看到: 2025-01-21T00:02:12.267Z 木偶师:协议:发送 ► [ '{“method”:“Target.closeTarget”,“params”:{“targetId”:“F8275C626B6FC4F650B5D03DA59FECD9”},“id”:4}' ] 但我不会在我的代码中发送它

代码中只有两个地方发送此消息:webworker 和 page。最合乎逻辑的地方是这里的页面: https://github.com/puppeteer/puppeteer/blob/89f4f3b1079874b2dd91c727bc058c1b6e09096e/packages/puppeteer-core/src/cdp/Page.ts#L1143

所以看起来在我调用 page.setViewport 之后有东西正在调用 page.close()

编辑2: 搞乱了代码,如果我在打开页面后等待,看起来好像有东西正在调用 page.close()

puppeteer
1个回答
0
投票

看起来 puppeteer 不喜欢您在加载任何内容之前调用

page.setViewport

如果你这样做,看起来就像调用了 page.close() 。

如果有人尝试使用 puppeteer 调试问题,我建议从 shell 中使用此行启动它:

env DEBUG="puppeteer:*" node puppeteer_script.js "$@" <&0

这应该可以帮助您找到问题。

编辑:

实际上划掉我上面的答案。

我认为提前终止的真正原因是我正在使用异步函数进行屏幕截图,但忘记了通话中的

await

因此父函数在承诺解决之前关闭了浏览器。

© www.soinside.com 2019 - 2024. All rights reserved.