Skip to content

操作浏览器页面

页面导航、header、User-Agent、selector 和 raw Page 属于 Playwright 专属语义,通过 app.extensions.playwright 获取。

from nonebot_plugin_htmlrender import get_default_application

playwright = get_default_application().extensions.playwright
async with playwright.page(
    viewport={"width": 1280, "height": 800},
    locale="zh-CN",
) as page:
    await page.goto("https://example.com", wait_until="networkidle")
    image = await page.screenshot(full_page=True, type="png")

Page 的有效期仅限于当前 async with playwright.page() 上下文;离开上下文后不得保存或继续使用。上下文内直接调用 Playwright API 时保留 Playwright 原生异常;只有通用 Renderer、Provider、资源处理和生命周期边界才会将对应失败翻译为稳定的htmlrender 错误。

元素截图直接组合 Playwright 原生的 Page.goto()、Page.locator() 与Locator.screenshot();三段调用的参数和返回值均由当前 Playwright 版本提供类型:

async with playwright.page(viewport={"width": 1280, "height": 800}) as page:
    await page.goto("https://example.com", wait_until="networkidle")
    element = await page.locator("main").screenshot(type="png")

page() 的参数列表同样从 Browser.new_page() 的类型签名投影而来,不在htmlrender 内维护第二份 kwargs 模型。升级 Playwright 后,IDE 会直接显示对应版本新增或调整的页面参数。

本地、WS 与 CDP 使用同一调用方式;连接和资源 transport 见远程 Playwright 部署,完整接口见Capability 参考。

直接使用 Browser

需要多个 BrowserContext、tracing、CDP session 或 Playwright 后续版本新增能力时,通过 playwright.browser() 获取 Provider 持有的原生 Browser。该入口不重新描述任何 Browser 方法,也不使用 proxy;上下文仅持有 execution lease 并记录playwright.native.browser telemetry。

调用方必须在上下文内关闭自己创建的 context/page/session,且不得调用browser.close()。对象逃逸或关闭共享 Browser 可能影响并发渲染;这是高级原生入口明确接受的风险,详见 Capability 参考。