Playwright的无头模式和无痕模式
无头模式
无头模式指的是自动测试框架在执行过程中不打开浏览器窗口的功能。在Playwright中,关闭无头模式会在测试代码执行过程中显示浏览器窗口,执行的过程会显示在浏览器的上。
# 以下代码以Playwright的同步API为例
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# 默认情况下开启无头模式,也就是不显示浏览器窗口
browser = p.chromium.launch(headless=False)
# 省略后续操作
无痕模式
无痕模式就是通常情况下理解的浏览器不跟踪用户行为的模式,在此模式下无法保持登录状态。这也是Playwright打开浏览器窗口的默认模式。如果需要保持登录状态,那么需要使用Playwright提供的storage_stateAPI:
- 首先进行登录操作,然后把登录状态保存到本地(以Gitee登录为例,变化的参数已用花括号括起来)
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
p.chromium.launch()
context = browser.new_context()
page = context.new_page()
page.goto("https://www.gitee.com/login")
# page.click("#git-nav-user-bar > a.item.git-nav-user__login-item")
page.fill("#user_login", "{你的邮箱}")
page.fill("#user_password", "{你的Gitee密码}")
# 点击"记住我"选项
page.click("#new_user > div > div > div > div.two.fields > div:nth-child(1) > div > label")
# 点击登录按钮
page.click("#new_user > div > div > div > div:nth-child(4) > input")
# 保证此时浏览器中已有登录状态
page.wait_for_load_state("networkidle")
# 将登录状态保存在本地,保存为state.json
context.storage_state(path="./state.json")
- 创建新的浏览器Context,加载已有的登录状态,直接访问Gitee,此时就能看到已经登陆成功
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
p.chromium.launch()
context = browser.new_context(storage_state="./state.json")
page = context.new_page()
page.goto("https://www.gitee.com")
page.wait_for_load_state("networkidle")
# 等待几秒,为了看到页面加载完成的画面
time.sleep(2)
# 截图保存
page.screenshot(type="png", path="./result.png")