diff --git a/app/tool/browser.py b/app/tool/browser.py index 81815f8..f56a677 100644 --- a/app/tool/browser.py +++ b/app/tool/browser.py @@ -30,6 +30,19 @@ _GOTO_TIMEOUT = 30000 # --disable-dev-shm-usage 容器 /dev/shm 偏小时改用磁盘,避免渲染进程崩溃 _LAUNCH_ARGS = ["--no-sandbox", "--disable-dev-shm-usage"] +# 浏览器上下文固定参数:不显式指定的话,UA 会跟着宿主系统变 +# (Windows 开发机是 Windows UA,Linux 容器是 X11 UA),目标站会按 UA 返回不同页面模板, +# 导致同一套选择器在容器里全部落空 +_CONTEXT_OPTIONS: dict[str, Any] = { + "user_agent": ( + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " + "(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" + ), + "viewport": {"width": 1920, "height": 1080}, + "locale": "zh-CN", + "timezone_id": "Asia/Shanghai", +} + @dataclass class NodeSnapshot: @@ -214,7 +227,7 @@ class _BrowserRuntime: async def _open_page_impl(self, url: str, wait_ms: int) -> str: browser = await self._ensure_browser() - context = await browser.new_context() + context = await browser.new_context(**_CONTEXT_OPTIONS) page = await context.new_page() try: