跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Python Playwright怎么录制脚本_codegen命令一键生成自动化爬虫代码教程

Playwright codegen录制代码不能直接运行,因缺少浏览器启动、跳转等待、弹窗处理等必要逻辑,易报TimeoutError或元素找不到;需手动补全上下文、等待和容错代码。 playwright codegen 录制出来的代码为什么不能直接跑 因为
codegen
默认生成的是「交互式录制」脚本,不带启动浏览器、处理弹窗/重定向、等待网络就绪等必要逻辑,一运行就卡在
page.goto()
或报
TimeoutError: Timeout 30000ms exceeded
。 常见错误现象:
playwright._impl._api_types.TimeoutError
;页面白屏但控制台没报错;登录后元素找不到(其实是跳转了新 URL,但脚本没等跳转完成)。 必须手动加
browser = playwright.chromium.launch(headless=False)
和
context = browser.new_context()
codegen
不会自动注入
page.wait_for_load_state("networkidle")
,动态渲染页(如 React/Vue)大概率漏元素 如果目标站有反爬 JS 注入(比如 fingerprintjs),
codegen
录的点击/输入行为会被识别为自动化流量,直接 403 如何让 codegen 生成更接近可用的脚本 关键不是“生成即用”,而是让输出包含更多上下文和容错能力。用对参数比后期改代码更省时间。 使用场景:快速生成登录流程、表单提交、列表翻页这类结构清晰的操作链。 立即学习 “ Python免费学习笔记(深入) ”; 加
--target python
(默认是 python ,但显式写上更稳) 加
--output my_script.py
,避免复制粘贴丢格式 加
--timeout 60000
防止录制中途超时中断 如果页面有 iframe,必须勾选「Record in iframes」选项(Playwright UI 录制界面右上角齿轮图标里),否则 iframe 内操作不会被记录 示例命令:
playwright codegen --target python --output login_flow.py --timeout 60000 https://example.com/login
Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 生成后必改的三处硬伤
codegen
生成的代码看着像能跑,实则三处不改必挂:
page.get_by_role("button", name="登录")
这类定位器在文字微调(如加空格、换行符)或 i18n 切换后立刻失效,优先换成
page.locator('button:has-text("登录")')
或带 data-testid 的选择器 所有
page.click()
前缺等待,应补成
page.wait_for_selector('button:has-text("登录")').click()
,否则容易点到旧 DOM 没处理可能的弹窗/确认框,比如
page.on("dialog", lambda dialog: dialog.accept())
得手动加在
context
创建之后 为什么不用 codegen 直接写 爬虫 因为
codegen
是 UI 操作录制工具,不是爬虫生成器。它不理解 HTML 结构、不提取数据、不处理分页逻辑、不管理请求头和 cookies 持久化。 性能影响明显:录制脚本默认开完整浏览器 + 等全部资源加载,而真实爬虫往往只需
request
或
API 调用 + 少量渲染
。 想抓列表页数据?
codegen
只会录下“滚动到底部 → 点加载更多”,但不会帮你解析
response.json()
或拼接下一页 URL 需要登录态复用?
codegen
每次都走一遍登录流程,而实际应该用
context.storage_state()
保存 cookies 后复用 遇到验证码、滑块、WebGL 指纹检测?
codegen
录下来也没用,得换方案(如 bypass 库或人工干预接口) 真正省时间的方式,是用
codegen
快速验证 selector 是否有效,然后把那一行
page.locator(...)
拿过去手写逻辑。

相关文章