适用于 Graia 的 Playwright 管理器
Project description
Graiax Playwright 使用 launart 作为启动管理器, 适用于 Ariadne 及 Avilla。
通过 GraiaX Playwright 你可以轻松地在 Ariadne / Avilla 启动的时候同时启动一个 Playwright,并在其退出的时候自动关闭 Playwright。
需要注意的是,Playwright 将会在运行期间保持后台常驻,
但由于并未开启任何页面,其内存占用量不是非常大(但也是可观的)。
安装
pdm add graiax-playwright
或 poetry add graiax-playwright
。
我们强烈建议使用包管理器或虚拟环境
开始使用
以下教程以配合 Launart 使用为例。
机器人入口文件
from creart import create
from launart import Launart
from graia.ariadne.app import Ariadne
from graiax.playwright import PlaywrightService
launart = create(Launart)
launart.add_component(PlaywrightService("chromium")) # 默认值为 chromium
launart.add_component(PlaywrightService("chromium", user_data_dir="./browser_data")) # 与上一行二选一,该方式使用 Persistent Context
...
launart.launch_blocking()
配合 Graia Saya 使用
from creart import create
from launart import Launart
from graia.ariadne.util.saya import listen
from graiax.playwright import PlaywrightBrowser
# 此处代码为没有使用 Persistent Context 的示例
# 若使用 Persistent Context 请使用 `context = launart.get_interface(PlaywrightContext)`
# 该方法获得的对象与 playwright.async_api.BrowserContext 兼容
@listen(...)
async def function(app: Ariadne):
launart = create(Launart)
browser = launart.get_interface(PlaywrightBrowser)
# 此处的 browser 之用法与 playwright.async_api.Browser 无异,但要注意的是下方代码的返回值为 False。
# `isinstance(browser, playwright.async_api.Browser)`
async with browser.page( # 此 API 启用了自动上下文管理
viewport={"width": 800, "height": 10},
device_scale_factor=1.5,
) as page:
await page.set_content("Hello World!")
img = await page.screenshot(type="jpeg", quality=80, full_page=True, scale="device")
...
高级用法之一
上面配合 Saya 使用的例子展示了创建一个页面的例子,但假如我们需要一个与其他页面隔离的新页面(例如 cookie
等),那么我们可以使用 browser.page(context=True)
在创建页面时使用一个新的上下文,如下所示:
[!NOTE]
该种用法不支持持久性上下文(Persistent Context)
@listen(...)
async def function(app: Ariadne):
launart = create(Launart)
browser = launart.get_interface(PlaywrightBrowser)
async with browser.page(new_context=True) as page: # 此 API 启用了自动上下文管理
await page.set_content("Hello World!")
img = await page.screenshot(type="jpeg", quality=80, full_page=True, scale="device")
...
高级用法之二
上面配合 Saya 使用的例子展示了为单个页面设置 viewport 的功能,自 GraiaX Playwright v0.3.1
版本起,可以在创建 PlaywrightService 时为全局的 Browser Context 指定 viewport,然后在截图时使用全局
Browser Context 截图,如下所示:
[!NOTE]
该种用法不支持持久性上下文(Persistent Context)
机器人入口文件:
launart.add_service(PlaywrightService("chromium"))
Saya 模块中:
from graiax.playwright import PlaywrightContext
@listen(...)
async def function(app: Ariadne):
launart = create(Launart)
context = launart.get_interface(PlaywrightContext)
async with context.page() as page: # 此 API 启用了自动上下文管理
await page.set_content("Hello World!")
img = await page.screenshot(type="jpeg", quality=80, full_page=True, scale="device")
...
许可证
本项目使用 MIT
许可证进行许可。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for graiax_playwright-0.3.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c215621b7ae92f0c929acabe7676b0d5476e633c56191923081c5ddb290de72e |
|
MD5 | 846d2ea31c19e5af0749c48aaf9b1949 |
|
BLAKE2b-256 | 1e5a0deedfa11ce5812ff9a6c5a26a9b419a44d30fbd209baa6b30a79a1de0ab |