Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Error: Attempted to use detached Frame 'xxx...xxx' after waking up from standby #12423

Open
2 tasks
systemoperator opened this issue May 11, 2024 · 14 comments

Comments

@systemoperator
Copy link

systemoperator commented May 11, 2024

Minimal, reproducible example

//import puppeteer from 'puppeteer';

const puppeteer = require('puppeteer');

const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));

(async () => {
  // Launch the browser and open a new blank page
  const browser = await puppeteer.launch({headless: false, devtools: true});
  const page = await browser.newPage();

  page.on('console', msg => console.log('PAGE LOG:', msg.text()));

  // Set screen size
  await page.setViewport({width: 1080, height: 1024});

  while (true) {
    try {
      // Navigate the page to a URL
      debugger;
      await page.goto('https://developer.chrome.com/', {waitUntil: 'load', timeout: 40000});
    }
    catch (error) {
      console.error(error);
    }

    console.log("done");

    await wait(10000);
  }

  await browser.close();
})();

Error string

Error: Attempted to use detached Frame '6AC522DD7C67F215C5B95D650D0E708B'.

Bug behavior

  • Flaky
  • PDF

Background

Procedure:

  1. Start the script, let the page load completely, and then switch the PC into standby.
  2. Wake up the PC.
  3. The script repeatedly tries to load the page, but the following error appears steadily:

Error: Attempted to use detached Frame '6AC522DD7C67F215C5B95D650D0E708B'.

This is also the case, after the network connection has been restored.

In earlier puppeteer versions, this worked without any problem.

Currently used software versions:

  • puppeteer version 22.8.0
  • Chromium version 120.0.6099.224 (Official Build) built on Debian 11.8, running on Debian 11.9 (64-bit)
  • Debian 11.9 (64-bit)

Expectation

After standby the there should not show up an error, stating that the Frame is detached.

Reality

In reality, the frame is detached and unusable.

Puppeteer configuration file (if used)

No response

Puppeteer version

22.8.0

Node version

20.11.0

Package manager

npm

Package manager version

10.2.4

Operating system

Linux

Copy link

github-actions bot commented May 11, 2024

This issue was not reproducible. Please check that your example runs locally and the following:

  • Ensure the script does not rely on dependencies outside of puppeteer and puppeteer-core.
  • Ensure the error string is just the error message.
    • Bad:

      Error: something went wrong
        at Object.<anonymous> (/Users/username/repository/script.js:2:1)
        at Module._compile (node:internal/modules/cjs/loader:1159:14)
        at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
        at Module.load (node:internal/modules/cjs/loader:1037:32)
        at Module._load (node:internal/modules/cjs/loader:878:12)
        at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
        at node:internal/main/run_main_module:23:47
    • Good: Error: something went wrong.

  • Ensure your configuration file (if applicable) is valid.
  • If the issue is flaky (does not reproduce all the time), make sure 'Flaky' is checked.
  • If the issue is not expected to error, make sure to write 'no error'.

Once the above checks are satisfied, please edit your issue with the changes and we will
try to reproduce the bug again.


Analyzer run

@OrKoN
Copy link
Collaborator

OrKoN commented May 11, 2024

v22.8.0 is only tested against the Chromium version 124.0.6367.91 Can you reproduce the issue using the Chrome for Testing binary that is downloaded by Puppeteer by default? Could you also include the CDP log when the error happens?

@systemoperator
Copy link
Author

systemoperator commented May 11, 2024

@OrKoN I've updated the working example.

The exact version of puppeteer is not that relevant. I had this issue for a year now, including the puppeteer versions within this time. For example, earlier, I've used puppeteer version 21.11.0 with the same issue. Also older Chromium versions have been used, with the same outcome.

I have now tried it with the Chrome for Testing binary that is downloaded by Puppeteer by default, as you suggested. The same behavior could be observed, with the output:

Error: Attempted to use detached Frame '33AFC84DE51AB885228B5314A97A0242'.
    at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
    at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
    at /home/aaa/xxx/test.js:18:18
done
Error: Attempted to use detached Frame '33AFC84DE51AB885228B5314A97A0242'.
    at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
    at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
    at /home/aaa/xxx/test.js:18:18
done
Error: Attempted to use detached Frame '33AFC84DE51AB885228B5314A97A0242'.
    at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
    at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
    at /home/aaa/xxx/test.js:18:18

Now run with:

Puppeteer version: 22.8.0 (unchanged)
Node version: 20.11.0 (unchanged)
Package manager: npm (unchanged)
Package manager version: 10.2.4 (unchanged)
Operating system: Linux, Debian 11.9 (64-bit) (unchanged)
Chrome version: Google Chrome for Testing, Version 124.0.6367.91 (Official Build) (64-bit)

The CDP log as requested:

done
TargetCloseError: Protocol error (Page.navigate): Target closed
    at CallbackRegistry.clear (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:72:36)
    at CdpCDPSession._onClosed (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/CDPSession.js:101:25)
    at #onClose (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Connection.js:165:21)
    at Immediate.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js:50:34)
    at process.processImmediate (node:internal/timers:478:21)
    at process.callbackTrampoline (node:internal/async_hooks:130:17) {
  cause: ProtocolError
      at <instance_members_initializer> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:93:14)
      at new Callback (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:97:16)
      at CallbackRegistry.create (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:22:26)
      at Connection._rawSend (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Connection.js:88:26)
      at CdpCDPSession.send (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/CDPSession.js:66:33)
      at navigate (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Frame.js:160:51)
      at CdpFrame.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Frame.js:138:17)
      at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:98:27)
      at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
      at /home/aaa/xxx/test.js:21:18
}
done
Error: Attempted to use detached Frame 'A023209FB3205A8676E8E57D6D3D98D6'.
    at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
    at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
    at /home/aaa/xxx/test.js:21:18
done
Error: Attempted to use detached Frame 'A023209FB3205A8676E8E57D6D3D98D6'.
    at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
    at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
    at /home/aaa/xxx/test.js:21:18
done

@systemoperator
Copy link
Author

running with % env DEBUG="puppeteer:*" env DEBUG_COLORS=true node test.js 2>&1 | grep -v '"Network' showed:

puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Target.attachedToTarget","params":{"sessionId":"A88456549EAC4A62CFF1A691AA45E37C","targetInfo":{"targetId":"B2E4E9683F4B3E6BE2C173D327B5A90E","type":"service_worker","title":"Service Worker https://developer.chrome.com/sw.js","url":"https://developer.chrome.com/sw.js","attached":true,"canAccessOpener":false,"browserContextId":"31621F79EEE6CA0B589B34C010202998"},"waitingForDebugger":true},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Runtime.runIfWaitingForDebugger","id":1,"sessionId":"A88456549EAC4A62CFF1A691AA45E37C"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:RECV ◀ [
[...]
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":1,"result":{},"sessionId":"383AD8DE73114917AF90FE8570C1992F"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Target.detachFromTarget","params":{"sessionId":"383AD8DE73114917AF90FE8570C1992F"},"id":4}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":1,"result":{},"sessionId":"A88456549EAC4A62CFF1A691AA45E37C"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Target.detachFromTarget","params":{"sessionId":"A88456549EAC4A62CFF1A691AA45E37C"},"id":19,"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:RECV ◀ [
[...]
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Target.detachedFromTarget","params":{"sessionId":"383AD8DE73114917AF90FE8570C1992F","targetId":"B2E4E9683F4B3E6BE2C173D327B5A90E"}}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [ '{"id":4,"result":{}}' ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Target.detachedFromTarget","params":{"sessionId":"A88456549EAC4A62CFF1A691AA45E37C","targetId":"B2E4E9683F4B3E6BE2C173D327B5A90E"},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":19,"result":{},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
[...]
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.loadEventFired","params":{"timestamp":239988.812602},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"F22625267E234D7275B8C58D6E13AD7B","loaderId":"0BD15FE2B0034EACA8D87F077FA339CF","name":"load","timestamp":239988.812602},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
  done
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.frameStoppedLoading","params":{"frameId":"F22625267E234D7275B8C58D6E13AD7B"},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
[...]
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.frameAttached","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","parentFrameId":"F22625267E234D7275B8C58D6E13AD7B","stack":{"callFrames":[{"functionName":"qw","scriptId":"14","url":"https://www.gstatic.com/devrel-devsite/prod/ve5ef9ac7b497e19ece9427facc78d0c59aaab7a2bc6a0f75fdae93f4ee589f67/js/devsite_app_custom_elements_module.js","lineNumber":263,"columnNumber":494}],"parent":{"description":"await","callFrames":[{"functionName":"fw","scriptId":"14","url":"https://www.gstatic.com/devrel-devsite/prod/ve5ef9ac7b497e19ece9427facc78d0c59aaab7a2bc6a0f75fdae93f4ee589f67/js/devsite_app_custom_elements_module.js","lineNumber":257,"columnNumber":162},{"functionName":"setup","scriptId":"14","url":"https://www.gstatic.com/devrel-devsite/prod/ve5ef9ac7b497e19ece9427facc78d0c59aaab7a2bc6a0f75fdae93f4ee589f67/js/devsite_app_custom_elements_module.js","lineNumber":274,"columnNumber":0}],"parent":{"description":"await","callFrames":[{"functionName":"setup","scriptId":"14","url":"https://www.gstatic.com/devrel-devsite/prod/ve5ef9ac7b497e19ece9427facc78d0c59aaab7a2bc6a0f75fdae93f4ee589f67/js/devsite_app_custom_elements_module.js","lineNumber":288,"columnNumber":356},{"functionName":"connectedCallback","scriptId":"14","url":"https://www.gstatic.com/devrel-devsite/prod/ve5ef9ac7b497e19ece9427facc78d0c59aaab7a2bc6a0f75fdae93f4ee589f67/js/devsite_app_custom_elements_module.js","lineNumber":273,"columnNumber":391},{"functionName":"connectedCallback","scriptId":"14","url":"https://www.gstatic.com/devrel-devsite/prod/ve5ef9ac7b497e19ece9427facc78d0c59aaab7a2bc6a0f75fdae93f4ee589f67/js/devsite_app_custom_elements_module.js","lineNumber":288,"columnNumber":111},{"functionName":"","scriptId":"28","url":"https://www.gstatic.com/devrel-devsite/prod/ve5ef9ac7b497e19ece9427facc78d0c59aaab7a2bc6a0f75fdae93f4ee589f67/js/devsite_devsite_analytics_module.js","lineNumber":0,"columnNumber":57},{"functionName":"","scriptId":"28","url":"https://www.gstatic.com/devrel-devsite/prod/ve5ef9ac7b497e19ece9427facc78d0c59aaab7a2bc6a0f75fdae93f4ee589f67/js/devsite_devsite_analytics_module.js","lineNumber":0,"columnNumber":177}]}}}},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"B82E8C664D3E459BA1917A63DBEA721B","name":"init","timestamp":239988.953262},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.frameStartedLoading","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74"},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Target.targetCreated","params":{"targetInfo":{"targetId":"2AD6636B0D438E76EE882E04DCD25C74","type":"iframe","title":"","url":"","attached":false,"canAccessOpener":false,"browserContextId":"31621F79EEE6CA0B589B34C010202998"}}}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"2AD6636B0D438E76EE882E04DCD25C74","type":"iframe","title":"","url":"","attached":true,"canAccessOpener":false,"browserContextId":"31621F79EEE6CA0B589B34C010202998"}}}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Target.attachedToTarget","params":{"sessionId":"701928DC2E3AB72226A2D968CAF60B63","targetInfo":{"targetId":"2AD6636B0D438E76EE882E04DCD25C74","type":"iframe","title":"","url":"","attached":true,"canAccessOpener":false,"browserContextId":"31621F79EEE6CA0B589B34C010202998"},"waitingForDebugger":true},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Fetch.disable","id":4,"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Page.enable","id":5,"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Page.getFrameTree","id":6,"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Page.setLifecycleEventsEnabled","params":{"enabled":true},"id":7,"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Runtime.enable","id":8,"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Target.setAutoAttach","params":{"waitForDebuggerOnStart":true,"flatten":true,"autoAttach":true,"filter":[{}]},"id":9,"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Runtime.runIfWaitingForDebugger","id":10,"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":4,"result":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":1,"result":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":2,"result":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":3,"result":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":5,"result":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":6,"result":{"frameTree":{"frame":{"id":"2AD6636B0D438E76EE882E04DCD25C74","parentId":"F22625267E234D7275B8C58D6E13AD7B","loaderId":"ED24D958F4BDE167A742390D77C775A8","name":"","url":":","domainAndRegistry":"","securityOrigin":"://","mimeType":"text/html","adFrameStatus":{"adFrameType":"none"},"secureContextType":"InsecureScheme","crossOriginIsolatedContextType":"NotIsolatedFeatureDisabled","gatedAPIFeatures":[]}}},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"ED24D958F4BDE167A742390D77C775A8","name":"commit","timestamp":239988.965858},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"ED24D958F4BDE167A742390D77C775A8","name":"DOMContentLoaded","timestamp":239988.966082},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"ED24D958F4BDE167A742390D77C775A8","name":"networkAlmostIdle","timestamp":239988.966092},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"ED24D958F4BDE167A742390D77C775A8","name":"networkIdle","timestamp":239988.966092},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":7,"result":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":8,"result":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Page.addScriptToEvaluateOnNewDocument","params":{"source":"//# sourceURL=pptr:internal","worldName":"__puppeteer_utility_world__"},"id":11,"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":9,"result":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":10,"result":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":11,"result":{"identifier":"1"},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:SEND ► [
    puppeteer:protocol:SEND ►   '{"method":"Page.createIsolatedWorld","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","worldName":"__puppeteer_utility_world__","grantUniveralAccess":true},"id":12,"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:SEND ► ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"EC2001AD6A12BDB11B35E5CC79ADAA4C","name":"init","timestamp":239989.447055},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"2AD6636B0D438E76EE882E04DCD25C74","type":"iframe","title":"https://developers.google.com/_d/analytics-iframe","url":"https://developers.google.com/_d/analytics-iframe","attached":true,"canAccessOpener":false,"browserContextId":"31621F79EEE6CA0B589B34C010202998"}},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Target.targetInfoChanged","params":{"targetInfo":{"targetId":"2AD6636B0D438E76EE882E04DCD25C74","type":"iframe","title":"https://developers.google.com/_d/analytics-iframe","url":"https://developers.google.com/_d/analytics-iframe","attached":true,"canAccessOpener":false,"browserContextId":"31621F79EEE6CA0B589B34C010202998"}}}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.frameDetached","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","reason":"swap"},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Runtime.executionContextsCleared","params":{},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.frameNavigated","params":{"frame":{"id":"2AD6636B0D438E76EE882E04DCD25C74","parentId":"F22625267E234D7275B8C58D6E13AD7B","loaderId":"EC2001AD6A12BDB11B35E5CC79ADAA4C","name":"","url":"https://developers.google.com/_d/analytics-iframe","domainAndRegistry":"google.com","securityOrigin":"https://developers.google.com","mimeType":"text/html","adFrameStatus":{"adFrameType":"none","explanations":[]},"secureContextType":"Secure","crossOriginIsolatedContextType":"NotIsolatedFeatureDisabled","gatedAPIFeatures":[]},"type":"Navigation"},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Runtime.executionContextCreated","params":{"context":{"id":1,"origin":"https://developers.google.com","name":"","uniqueId":"7084073672674550678.212438118653409540","auxData":{"isDefault":true,"type":"default","frameId":"2AD6636B0D438E76EE882E04DCD25C74"}}},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Runtime.executionContextCreated","params":{"context":{"id":2,"origin":"","name":"__puppeteer_utility_world__","uniqueId":"8432745131390137880.-4307715748158059442","auxData":{"isDefault":false,"type":"isolated","frameId":"2AD6636B0D438E76EE882E04DCD25C74"}}},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"id":12,"result":{"executionContextId":2},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"F22625267E234D7275B8C58D6E13AD7B","loaderId":"0BD15FE2B0034EACA8D87F077FA339CF","name":"networkAlmostIdle","timestamp":239988.888319},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"F22625267E234D7275B8C58D6E13AD7B","loaderId":"0BD15FE2B0034EACA8D87F077FA339CF","name":"firstMeaningfulPaint","timestamp":239987.450118},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"F22625267E234D7275B8C58D6E13AD7B","loaderId":"0BD15FE2B0034EACA8D87F077FA339CF","name":"networkIdle","timestamp":239988.995954},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.domContentEventFired","params":{"timestamp":239989.665317},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"EC2001AD6A12BDB11B35E5CC79ADAA4C","name":"DOMContentLoaded","timestamp":239989.665317},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.loadEventFired","params":{"timestamp":239989.666497},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"EC2001AD6A12BDB11B35E5CC79ADAA4C","name":"load","timestamp":239989.666497},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.frameStoppedLoading","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74"},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
[...]
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"EC2001AD6A12BDB11B35E5CC79ADAA4C","name":"networkAlmostIdle","timestamp":239989.666286},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"2AD6636B0D438E76EE882E04DCD25C74","loaderId":"EC2001AD6A12BDB11B35E5CC79ADAA4C","name":"networkIdle","timestamp":239990.413558},"sessionId":"701928DC2E3AB72226A2D968CAF60B63"}'
    puppeteer:protocol:RECV ◀ ] +0ms
    puppeteer:protocol:RECV ◀ [
    puppeteer:protocol:RECV ◀   '{"method":"Page.lifecycleEvent","params":{"frameId":"F22625267E234D7275B8C58D6E13AD7B","loaderId":"0BD15FE2B0034EACA8D87F077FA339CF","name":"InteractiveTime","timestamp":239993.847758},"sessionId":"5C8FF259F5088844FDD025F0AA4D0A41"}'
    puppeteer:protocol:RECV ◀ ] +0ms
  Error: Attempted to use detached Frame 'F22625267E234D7275B8C58D6E13AD7B'.
      at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
      at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
      at /home/aaa/xxx/test.js:21:18
  done
  Error: Attempted to use detached Frame 'F22625267E234D7275B8C58D6E13AD7B'.
      at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
      at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
      at /home/aaa/xxx/test.js:21:18
  done
  Error: Attempted to use detached Frame 'F22625267E234D7275B8C58D6E13AD7B'.
      at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
      at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
      at /home/aaa/xxx/test.js:21:18
  done
  Error: Attempted to use detached Frame 'F22625267E234D7275B8C58D6E13AD7B'.
      at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
      at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
      at /home/aaa/xxx/test.js:21:18
  done
  Error: Attempted to use detached Frame 'F22625267E234D7275B8C58D6E13AD7B'.
      at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
      at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
      at /home/aaa/xxx/test.js:21:18
  done
  Error: Attempted to use detached Frame 'F22625267E234D7275B8C58D6E13AD7B'.
      at CdpFrame.<anonymous> (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/util/decorators.js:96:23)
      at CdpPage.goto (/home/aaa/xxx/node_modules/puppeteer-core/lib/cjs/puppeteer/api/Page.js:585:43)
      at /home/aaa/xxx/test.js:21:18
  done

@OrKoN
Copy link
Collaborator

OrKoN commented May 12, 2024

I am able to reproduce on a Mac using the sleep action. It looks like the websocket connection is disconnected (browser.connected === false when the error happens and also the disconnected event is emitted on the browser instance as expected). The disconnect comes from the web socket transport so I am not sure it is fixable, if the socket connection is severed the browser would destroy all automation agents so the only correct way is to re-connect Puppeteer again and set up everything again. You mentioned this worked before? Do you know which version was it?

@OrKoN
Copy link
Collaborator

OrKoN commented May 12, 2024

For future reference, here is the stacktrace of the socket disconnect:

➜  pptr-test node reset.cjs
[32873:259:0512/112546.673131:ERROR:chrome_browser_cloud_management_controller.cc(161)] Cloud management controller initialization aborted as CBCM is not enabled. Please use the `--enable-chrome-browser-cloud-management` command line flag to enable it if you are not using the official Google Chrome build.

DevTools listening on ws://127.0.0.1:65061/devtools/browser/a03b330c-7f4d-425f-9aba-3ae5e359d369
done
[32873:34307:0512/112552.228492:ERROR:unexportable_key_mac.mm(323)] Unexportable keys unavailable because keychain-access-group entitlement missing or incorrect. Expected value: .com.google.chrome.for.testing.unexportable-keys
closed Error
    at #onClose (/Users/alex/projects/pptr-test/node_modules/puppeteer/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Connection.js:157:31)
    at Immediate._onImmediate (/Users/alex/projects/pptr-test/node_modules/puppeteer/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js:50:34)
    at process.processImmediate (node:internal/timers:478:21)
disconnected

which indicates that https://github.com/websockets/ws emitted the close event.

@OrKoN
Copy link
Collaborator

OrKoN commented May 12, 2024

As a workaround, use pipe: true when launching the browser to avoid using sockets for communication. In general, it looks like standby/sleep might be severing network connections as expected (?) and CDP does not really support reconnection once the socket was closed.

@OrKoN
Copy link
Collaborator

OrKoN commented May 12, 2024

The connection is also closed for a bare ws client:

const WebSocket = require('ws');

const ws = new WebSocket(process.argv[2]); // pass the DevTools web socket server URL

ws.on('close', () => {
    console.log('closed')
});

ws.on('open', function open() {
  console.log('opened')
});

@OrKoN
Copy link
Collaborator

OrKoN commented May 12, 2024

It does not happen for a bare ws server:

const WebSocket = require('ws');

const wss = new WebSocket.WebSocketServer({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('error', console.error);

  ws.on('message', function message(data) {
    console.log('received: %s', data);
  });
});

const ws = new WebSocket('ws://127.0.0.1:8080');

ws.on('close', () => {
    console.log('closed')
});

ws.on('open', function open() {
  console.log('opened')
});

so it looks like Chrome disconnects the socket on stanbdy/sleep.

@OrKoN OrKoN added the upstream label May 12, 2024
@OrKoN
Copy link
Collaborator

OrKoN commented May 12, 2024

It happens at least since Chrome 115.

@systemoperator
Copy link
Author

As a workaround, use pipe: true when launching the browser to avoid using sockets for communication. In general, it looks like standby/sleep might be severing network connections as expected (?) and CDP does not really support reconnection once the socket was closed.

This is amazing, it works perfectly!

@systemoperator
Copy link
Author

systemoperator commented May 13, 2024

I am able to reproduce on a Mac using the sleep action. It looks like the websocket connection is disconnected (browser.connected === false when the error happens and also the disconnected event is emitted on the browser instance as expected). The disconnect comes from the web socket transport so I am not sure it is fixable, if the socket connection is severed the browser would destroy all automation agents so the only correct way is to re-connect Puppeteer again and set up everything again. You mentioned this worked before? Do you know which version was it?

It's difficult to reconstruct the version, but I can try it. The puppeteer version might be easy to find out. You would be interested in the Chromium version, right? What I can say for sure is the following observation: It seemed to be an OS-dependent issue. On Ubuntu 16.04.6, it worked without any issue with the standby. When I migrated my OS to Debian 11, this issue showed up immediately and I could not fix it.

@systemoperator
Copy link
Author

As the issue seems independent of puppeteer's version, I would say, that any version listed on https://launchpad.net/ubuntu/xenial/+source/chromium-browser worked properly for Ubuntu 16.04 considering the standby issue, including the latest version 90.0.4430.72-0ubuntu0 for Ubuntu 16.04 (https://launchpad.net/ubuntu/+source/chromium-browser/90.0.4430.72-0ubuntu0.16.04.1).

@OrKoN
Copy link
Collaborator

OrKoN commented May 17, 2024

@AntonioFavero is your problem also related to standby/reconnection? if not, it is not the same issue, and please file a separate one including a minimal reproducible example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants