【爬虫脚本自动化录制】playwright-codegen使用教程
925 字
5 分钟
【爬虫脚本自动化录制】playwright-codegen使用教程
前言
在做 Web 自动化测试、爬虫脚本开发时,手动写定位、写操作步骤往往耗时又容易出错。Playwright 官方提供了一个零代码录制神器:
codegen,只需要在浏览器里用鼠标点击,就能自动生成可直接运行的 Python/Java/JS 自动化代码,极大提升开发效率。
什么是 playwright codegen?
codegen 是 Playwright 内置的交互式录制工具,核心功能:
- 记录鼠标点击、输入、选择、滚动、切换页面等操作
- 实时生成高质量、可直接运行的代码
- 自动识别 iframe、弹窗、下拉框等复杂场景
- 支持 Python / Node. js / Java / C# 多语言导出
适用场景:快速生成登录脚本、表单提交、页面遍历、爬虫操作等。
环境准备
安装 Playwright
pip install playwright安装浏览器驱动
playwright install会自动安装 Chromium、Firefox、WebKit 内核。
codegen 基础使用
直接启动录制
playwright codegen 网址示例:打开百度并录制
playwright codegen https://www.baidu.com执行后会弹出两个窗口:
- 左侧:浏览器页面(你手动操作)
- 右侧:Playwright Inspector(实时生成代码)

操作演示
- 在百度搜索框输入“CSDN”
- 点击“百度一下”
- 等待页面跳转
- 关闭浏览器

右侧会自动生成完整 Python 代码,复制即可直接运行。 生成代码如下:
import refrom playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None: browser = playwright.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() page.goto("https://www.baidu.com/") page.get_by_role("textbox", name="中央音乐学院教授安平病逝").click() page.get_by_role("textbox", name="中央音乐学院教授安平病逝").fill("CSDN") page.get_by_role("button", name="百度一下").click()
# --------------------- context.close() browser.close()
with sync_playwright() as playwright: run(playwright)常用高级参数
| 参数 | 作用 | 示例 |
|---|---|---|
-o 文件名.py | 将录制代码保存到文件 | playwright codegen -o test.py https://www.baidu.com |
--browser | 指定浏览器(chromium/firefox/webkit) | --browser firefox |
--device | 模拟手机设备 | --device "iPhone 15" |
--slowmo 毫秒 | 慢放操作,避免录制过快 | --slowmo 1000 |
--lang | 指定生成语言(python/js/java/csharp) | --lang java |
--viewport | 指定窗口大小 | --viewport 1920,1080 |
常用组合示例:
# 录制并保存,慢放 1 秒,模拟 iPhone 15playwright codegen -o auto_test.py --slowmo 1000 --device="iPhone 15" https://www.baidu.com实战案例:录制 CSDN 登录脚本
开始录制
playwright codegen -o csdn_login.py https://passport.csdn.net/login
手动操作步骤
- 选择“密码登录”
- 输入用户名
- 输入密码
- 处理滑块/验证(手动完成)
- 点击登录
自动生成代码示例
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None: browser = playwright.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() page.goto("https://passport.csdn.net/login")
# 切换密码登录 page.get_by_role("tab", name="密码登录").click() # 输入账号 page.get_by_placeholder("手机号/邮箱/账号").click() page.get_by_placeholder("手机号/邮箱/账号").fill("你的账号") # 输入密码 page.get_by_placeholder("请输入密码").click() page.get_by_placeholder("请输入密码").fill("你的密码") # 登录 page.get_by_role("button", name="登录").click()
# --------------------- context.close() browser.close()
with sync_playwright() as playwright: run(playwright)录制后代码必须优化
codegen 生成的代码能跑,但不够健壮,建议优化:
添加显示等待(防止页面未加载)
page.get_by_role("button", name="登录").wait_for(state="visible")使用 expect 断言
expect(page.get_by_role("button", name="登录")).to_be_enabled()
# 1.断言“验证码登录”文字对应的元素在页面上可见,用于判断登录区域加载完成expect(page.get_by_text("验证码登录")).to_be_visible()
# 2.断言页面 body 中包含“登录可享更多权益”文本,用于校验页面是否正常加载expect(page.locator("body")).to_contain_text("登录可享更多权益")
# 3.可选取复制页面文字
# 4.校验元素的无障碍 ARIA 属性是否匹配,由 codegen 自动生成,实际使用中一般可删除expect(page.locator("#thirdLogin")).to_match_aria_snapshot("")处理 iframe
如果页面嵌套 iframe,codegen 会自动生成 frame_locator,建议精简:
login_frame = page.frame_locator("iframe[name='login_frame']")login_frame.get_by_text("登录").click()去掉冗余操作
删除重复的 click()、无用的等待和多余定位。
同文收录于CSDN:文章链接
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
【爬虫脚本自动化录制】playwright-codegen使用教程
https://hp-patience.github.io/posts/playwright-codegen-tutorial/ 相关文章 智能推荐
1
核类美学:梦核、怪核与池核
视觉美学 从阈限空间出发,结合图像、游戏与 Blender 积水地下通道实践,理解梦核、怪核与池核的视觉语言、差异和重叠。
2
AI辅助学习:把多源知识变成一对一课堂
学习 从 Probe-Plan-Teach 出发,讨论 AI 如何围绕理解边缘、情绪曲线、学习目标和多种练习形式,构建真正的一对一学习体验。
3
在 Linux 服务器上使用 opencode 的正确方式
工具 记录我把 opencode 搬到低配 Linux 服务器上的经历,以及后来改用本地运行、SSH 操作服务器的原因。
4
Ubuntu 服务器部署 Mihomo 代理完整记录
工具 在 Ubuntu 服务器上部署 Mihomo,复用 Clash Verge Rev 配置,配置 systemd 与命令行代理,并通过 SSH 隧道安全访问 MetaCubeXD。
5
从 HTML 到 Vite:现代前端开发到底解决了什么问题?
前端 从普通网页的组成讲起,理解现代前端为什么需要模块化、构建工具,以及 Vite 在开发、构建和部署中解决了什么问题。
随机文章 随机推荐