From 59ad6d46217765714c86207c451a9c15edae0415 Mon Sep 17 00:00:00 2001 From: Daofeng Wu Date: Sat, 25 Jan 2025 20:55:08 +0900 Subject: [PATCH] fix(playwright): attach event listeners when new page created --- npiai/core/browser/_playwright.py | 21 +++++++++++++-------- poetry.lock | 12 ++++++------ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/npiai/core/browser/_playwright.py b/npiai/core/browser/_playwright.py index c2bb82e8..8a1ccee0 100644 --- a/npiai/core/browser/_playwright.py +++ b/npiai/core/browser/_playwright.py @@ -116,14 +116,17 @@ def block_route(route): ) self.page = await self.context.new_page() - self.page.on("dialog", self.on_dialog) - self.page.on("download", self.on_download) - self.page.on("filechooser", self.on_filechooser) - self.page.on("popup", self.on_popup) - self.context.on("close", self.on_close) + self.attach_events(self.page) self.ready = True + def attach_events(self, page: Page): + page.on("dialog", self.on_dialog) + page.on("download", self.on_download) + page.on("filechooser", self.on_filechooser) + page.on("popup", self.on_popup) + page.on("close", self.on_close) + async def on_dialog(self, dialog: Dialog): """ Callback function invoked when a dialog is opened @@ -158,14 +161,16 @@ async def on_popup(self, popup: Page): Args: popup: Page instance """ - print(f"popup {popup}") self.page = popup + self.attach_events(popup) - async def on_close(self, ctx: BrowserContext): + async def on_close(self, _): """ Callback function invoked when the page is closed """ - self.page = ctx.pages[-1] if ctx.pages else None + if self.context.pages: + self.page = self.context.pages[-1] + self.attach_events(self.page) async def stop(self): """ diff --git a/poetry.lock b/poetry.lock index 997b1260..1846313c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -207,13 +207,13 @@ files = [ [[package]] name = "attrs" -version = "24.3.0" +version = "25.1.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" files = [ - {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, - {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, + {file = "attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a"}, + {file = "attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e"}, ] [package.extras] @@ -3763,13 +3763,13 @@ prompt_toolkit = ">=2.0,<4.0" [[package]] name = "referencing" -version = "0.36.1" +version = "0.36.2" description = "JSON Referencing + Python" optional = false python-versions = ">=3.9" files = [ - {file = "referencing-0.36.1-py3-none-any.whl", hash = "sha256:363d9c65f080d0d70bc41c721dce3c7f3e77fc09f269cd5c8813da18069a6794"}, - {file = "referencing-0.36.1.tar.gz", hash = "sha256:ca2e6492769e3602957e9b831b94211599d2aade9477f5d44110d2530cf9aade"}, + {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, + {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, ] [package.dependencies]