fix: capture login API via response event listener
Some checks failed
CI / lint-and-compile (push) Has been cancelled
CI / lint-and-compile (pull_request) Has been cancelled

This commit is contained in:
root
2026-04-17 15:40:25 +08:00
parent 0c9fdd53c9
commit d12668201f

View File

@@ -131,13 +131,25 @@ class AutoLoginManager:
# Wait and validate the core login API response. # Wait and validate the core login API response.
login_resp = None login_resp = None
loop = asyncio.get_running_loop()
login_resp_future: asyncio.Future = loop.create_future()
def on_response(resp):
try:
if "/users/ajax/login" in resp.url and resp.request.method == "POST":
if not login_resp_future.done():
login_resp_future.set_result(resp)
except Exception:
pass
page.on("response", on_response)
try: try:
login_resp = await page.wait_for_response( login_resp = await asyncio.wait_for(login_resp_future, timeout=20)
lambda r: "/users/ajax/login" in r.url and r.request.method == "POST", except asyncio.TimeoutError:
timeout=20000,
)
except PlaywrightTimeoutError:
login_resp = None login_resp = None
finally:
with contextlib.suppress(Exception):
page.remove_listener("response", on_response)
if login_resp is None: if login_resp is None:
debug_file = await self._dump_debug_page(page) debug_file = await self._dump_debug_page(page)