乐清手机网站设计黑帽seo技术培训
保存storage_state信息
背景
使用playwright进行UI测试时,使用
context.storage_state()
保存若依CMS
登录后的cookie信息失败,输出结果为空始终无法获取登录状态信息,但是断点调试又存在storage信息,这就很疑惑。
核心原因
playwright登录
若依CMS
时,成功后会跳转到/index
页面。
但是playwright在确认登录成功后,就会关闭浏览器,而
若依CMS
会在跳转/index
页面时,设置cookie等信息。
也就造成了我们获取不到cookie信息的原因。因此在后续代码中添加等待事件。
page.wait_for_url()
输出storage信息
- print(storage),cookie结果为null,但是打断点输出storage时,又有数据。
{'cookies': [], 'origins': []}
代码
原始代码,无法获取storage登录状态信息
import jsonfrom playwright.sync_api import Playwright, sync_playwrightdef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("http://81.70.166.221:8080/login")page.get_by_role("textbox", name="用户名").click()page.get_by_role("textbox", name="用户名").fill("admin")page.get_by_role("textbox", name="密码").click()page.get_by_role("textbox", name="密码").fill("admin123")page.get_by_role("button", name="登录").click()# page.pause()# 保存storage state 到指定的文件storage = context.storage_state(path='../auth/ry_auto.json')# ---------------------context.close()browser.close()with sync_playwright() as playwright:run(playwright)
改进后,添加等待事件wait_for_url
import jsonfrom playwright.sync_api import Playwright, sync_playwrightdef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("http://81.70.166.221:8080/login")page.get_by_role("textbox", name="用户名").click()page.get_by_role("textbox", name="用户名").fill("admin")page.get_by_role("textbox", name="密码").click()page.get_by_role("textbox", name="密码").fill("admin123")page.get_by_role("button", name="登录").click()# 等待时间,等待页面跳转,作为登录成功的标准page.wait_for_url(url='http://81.70.166.221:8080/index')# 添加断点# page.pause()# 保存storage state 到指定的文件storage = context.storage_state(path='../auth/ry_auto.json')print(storage)# ---------------------context.close()browser.close()with sync_playwright() as playwright:run(playwright)