Skip to content

[Bug]: connect_over_cdp() hangs after <ws connected> with Microsoft Edge 148 on Windows #41093

@yasuyukitera

Description

@yasuyukitera

Version

1.60.0

Steps to reproduce

Steps to Reproduce

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.connect_over_cdp("http://127.0.0.1:9222")
        print("connected")  # never reached
        await browser.close()

asyncio.run(main())

Expected behavior

connect_over_cdp() should connect successfully to Edge 148,
as it did with Edge 147.

Actual behavior

Description

After Microsoft Edge was updated to 148.0.3967.54 via Windows Update,
connect_over_cdp() hangs indefinitely and never returns.

Edge is launched with remote debugging enabled:

"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --remote-debugging-port=9222

Observed Behavior

The call log shows the WebSocket connection succeeds, but the call hangs
after <ws connected> and never resolves:

<ws preparing> retrieving websocket url from http://127.0.0.1:9222
<ws connecting> ws://127.0.0.1:9222/devtools/browser/xxxxxxxx-...
<ws connected>  ws://127.0.0.1:9222/devtools/browser/xxxxxxxx-...
(hangs here indefinitely)

Additional context

Investigation

To confirm that Edge's CDP endpoint itself is reachable, I verified:

  • http://127.0.0.1:9222/json returns valid JSON ✅
  • Connecting via raw websockets library and sending Browser.getVersion
    returns a valid response ✅

This suggests that Edge 148 may have changed its CDP initialization
sequence or response format in a way that is incompatible with
Playwright 1.60.0's handshake implementation. The connection succeeds
at the WebSocket level, but Playwright appears to hang waiting for
a response that does not arrive in the expected format.

The root cause — whether it lies in Edge's changed behavior or in
Playwright's handling of it — would need further investigation on the
Playwright side.

Additional Notes

  • Playwright 1.60.0 lists Edge 147 as its tested browser version.
    The Windows Update bumped Edge to 148, causing this version mismatch.
  • Downgrading Edge is not practical in a managed corporate environment.
  • A workaround using the raw websockets library with
    Target.attachToTarget confirms that CDP communication itself works
    correctly after the connection is established manually.

Environment

| | Version |
|---|---|
| Playwright Python | 1.60.0 |
| Node.js | v24.14.1 |
| Python | 3.12.13 (conda) |
| OS | Windows 11 22H2(Build 22631.7079) |
| Microsoft Edge | 148.0.3967.54 |

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions