Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions src/webwright/environments/local_browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import traceback
from contextlib import redirect_stderr, redirect_stdout
from pathlib import Path
from typing import Any
from typing import Any, Callable
from urllib.parse import quote, urlparse
from urllib.request import ProxyHandler, Request, build_opener

Expand Down Expand Up @@ -220,6 +220,7 @@ def __init__(self, *, config_class: type = LocalBrowserEnvironmentConfig, **kwar
self._local_cdp_process: subprocess.Popen | None = None
self._connected_over_cdp = False
self._step_index = 0
self._page_cleanup: list[Callable[[], None]] = []
self._prepared_task: dict[str, Any] = {}
self._console_history: list[str] = []
self._step_console: list[str] = []
Expand Down Expand Up @@ -368,8 +369,24 @@ async def _prepare_async(self) -> None:
await self._page.goto(self.config.start_url, wait_until="domcontentloaded")

def _attach_page_listeners(self, page: Any) -> None:
page.on("console", self._on_console_message)
page.on("pageerror", self._on_page_error)
def on_console(msg: Any) -> None:
self._on_console_message(msg)
def on_page_error(err: Any) -> None:
self._on_page_error(err)
page.on("console", on_console)
page.on("pageerror", on_page_error)
self._page_cleanup = [
lambda: page.remove_listener("console", on_console),
lambda: page.remove_listener("pageerror", on_page_error),
]

def _detach_page_listeners(self) -> None:
for cleanup in self._page_cleanup:
try:
cleanup()
except Exception:
pass
self._page_cleanup = []

def _on_console_message(self, message: Any) -> None:
text = getattr(message, "text", "")
Expand Down Expand Up @@ -531,6 +548,7 @@ def close(self) -> None:
self._loop = None

async def _close_async(self) -> None:
self._detach_page_listeners()

context = self._context
browser = self._browser
Expand Down