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})