目录

Playwright Tricks

目录

使用操作录制提升编码效率,可以对只需要执行一次且相对简单的功能直接进行录制,例如登陆获取cookie。

python -m playwright codegen --save-storage=login_data.json

将获取cookie的代码进行封装,供之后的高层逻辑调用,有助于代码的整洁。一个封装后的例子是:

def saveContext(playwright: Playwright) -> None:
    """登录腾讯文档并保存上下文"""
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    # Open new page
    page = context.new_page()
    # Go to https://docs.qq.com/
    page.goto("https://docs.qq.com/")
    # Click button:has-text("免费使用")
    page.locator("button:has-text(\"免费使用\")").click()
    page.wait_for_url("https://docs.qq.com/desktop/?fromsrc=homepage")
    # Click text=QQ登录
    page.locator("text=QQ登录").click()
    # Click #img_out_136
    page.frame_locator("iframe[name=\"login_frame\"]").locator(
        "#img_out_136").click()
    
    # wait for login
    page.wait_for_url("https://docs.qq.com/desktop/?u=*")

    # save context
    context.storage_state(path='login_data.json')

    # ---------------------
    context.close()
    browser.close()

部分网站需要申请相机、定位等权限,可以使用grantPermissions申请相关权限,申请时可以指定对应的网站。申请定位权限之后可以通过set_geolocation设置虚拟定位。

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False, channel="msedge")
    context = browser.new_context(storage_state='login_data.json')

    context.grant_permissions(
        permissions=['geolocation'], origin="https://docs.qq.com")
    context.set_geolocation(
        {"latitude": 100, "longitude": 100})