Playwright 极速入门:1 小时搞定环境搭建与首个测试脚本
myzbx 2025-09-09 07:32 2 浏览
一、Playwright 简介与核心优势
Playwright 是微软开源的现代化 Web 自动化工具,支持 Chromium(Chrome/Edge)、Firefox、WebKit(Safari) 三大浏览器引擎,提供跨平台(Windows/macOS/Linux)和跨语言(Python/JS/Java/C#)的统一 API。
核心优势:
自动等待机制:智能等待元素加载,减少因网络延迟导致的失败
录制与调试工具:内置 codegen 实时生成操作脚本
多语言支持:Python/Node.js/Java/C# 灵活选择
真移动端模拟:内置设备描述符(如 iPhone 13/Pixel 5)
二、环境搭建(10分钟搞定!)
1. 安装 Python 环境(需 3.8+)
# 检查 Python 版本
python --version
# 安装 Playwright 库
pip install playwright
# 安装浏览器驱动(自动下载 Chromium/Firefox/WebKit)
playwright install
避坑提示:国内用户可通过设置镜像加速下载:
set PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright
playwright install
2. 验证安装
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # 显示浏览器界面
page = browser.new_page()
page.goto("https://playwright.dev")
print(page.title()) # 输出:Fast and reliable end-to-end testing
browser.close()
运行成功即表示环境就绪
三、首个测试脚本:网页导航与截图(15分钟)
from playwright.sync_api import sync_playwright
def run():
with sync_playwright() as p:
# 启动 Chromium 并访问网页
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://example.com")
# 保存截图(含完整页面)
page.screenshot(path="example.png", full_page=True)
# 打印页面标题
print("页面标题:", page.title())
browser.close()
if __name__ == "__main__":
run()
效果说明:
- 自动打开浏览器并访问 example.com
- 生成全页截图 example.png
- 控制台输出标题 "Example Domain"
四、进阶操作:元素定位与交互(20分钟)
1. 元素定位四大方式
# 文本定位(推荐!)
page.locator("text='登录'").click()
# CSS 选择器
page.locator("#submit-btn").click()
# XPath
page.locator("//button[@class='confirm']").click()
# 语义化定位(ARIA 角色)
page.get_by_role("button", name="提交").click()
最佳实践:优先使用 text 或 get_by_role() 提高可读性和稳定性。
2. 模拟用户登录流程
# 输入用户名密码
page.get_by_placeholder("请输入手机号/邮箱").fill("test@example.com")
page.get_by_placeholder("请输入密码").fill("mypassword")
# 点击登录按钮
page.get_by_role("button", name="登录").click()
# 等待导航完成
page.wait_for_url("**/dashboard")
注:wait_for_url() 确保页面跳转完成再继续操作。
五、调试神器:录制工具与 Trace Viewer
1. 脚本录制(codegen)
# 启动录制器(自动生成 Python 代码)
playwright codegen https://example.com
操作浏览器界面即可实时生成代码,适合快速原型设计:
!https://example.com/codegen-demo.png
提示:录制后需优化定位器逻辑。
2. 追踪测试过程(Trace Viewer)
context = browser.new_context()
context.tracing.start(screenshots=True, snapshots=True) # 开启记录
# ...执行操作...
context.tracing.stop(path="trace.zip") # 保存日志
查看日志:
npx playwright show-trace trace.zip
可回放操作视频、查看 DOM 快照及网络请求。
六、同步 vs 异步模式选择
模式 | 适用场景 | 代码示例 |
同步模式 | 简单脚本/快速调试 | from playwright.sync_api import ... |
异步模式 | 高并发/复杂任务 | await page.goto(...) |
异步示例:
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com")
await browser.close()
asyncio.run(main())
提示:爬虫或批量操作时异步效率提升 3 倍+。
七、实战案例:爬取商品数据
async def scrape_products():
asyncwith async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://shop.example.com")
# 获取所有商品标题
titles = await page.eval_on_selector_all(
".product-item",
"elements => elements.map(e => e.textContent)"
)
print(titles) # 输出:['商品A', '商品B', ...]
await browser.close()
关键点:eval_on_selector_all() 直接执行 JS 提取数据。
八、总结与学习路径
1 小时成果清单:
- 环境搭建与浏览器驱动安装
- 首个导航+截图脚本
- 元素定位与表单操作
- 脚本录制与 Trace 调试
下一步学习:
框架集成:结合 Pytest 管理测试用例
移动端测试:p.devices["iPhone 13"] 模拟真机
CI/CD 流水线:GitHub Actions 自动执行测试
官方资源:
https://playwright.dev/python
https://github.com/microsoft/playwright-python
掌握基础操作后,你已具备用 Playwright 实现 自动化测试、数据采集、监控任务 的能力!
- 上一篇:实用知识:常用继电器型号用途,技术参数
- 下一篇:电气字母符号大全,新人也能轻松上手
相关推荐
- 前端工程师养成计划 专区_前端工程师技能要求
-
前端工程师必修课本课程从最基本的概念开始讲起,步步深入,带领大家学习HTML、CSS样式基础知识,了解各种常用标签的意义以及基本用法,后半部分讲解CSS样式代码添加,为后面的案例课程打下基础。本课程让...
- 深入浅出虚拟 DOM 和 Diff 算法,及 Vue2 与 Vue3 中的区别
-
因为Diff算法,计算的就是虚拟DOM的差异,所以先铺垫一点点虚拟DOM,了解一下其结构,再来一层层揭开Diff算法的面纱,深入浅出,助你彻底弄懂Diff算法原理认识虚拟DOM虚拟...
- css 布局简述_css布局的几种方式
-
本篇简单介绍了css布局体系。包括Flowlayout、display、floats、positionFlowlayout(NormalFlow)CSSFormattingContext...
- dart系列之:HTML的专属领域,除了javascript之外,dart也可以
-
简介虽然dart可以同时用作客户端和服务器端,但是基本上dart还是用做flutter开发的基本语言而使用的。除了andorid和ios之外,web就是最常见和通用的平台了,dart也提供了对HTML...
- 原来隐藏一个DOM元素可以有这么多种方式,最后一种你肯定不知道
-
我们在日常编码的时候,隐藏一个dom元素有很多种方式,今天我们来盘点一下隐藏dom元素有哪些方式,最后一种,你绝对没有用过。display:none作为经常用来隐藏元素的css属性,di...
- JavaScript精通到深入_javascript进阶书籍推荐
-
前几天教大家从入门到精通,当然仅靠那一篇文章是不足以带领大家精通JavaScript的,今天给大家带来第二讲!BOM和DOM简介BOM,BrowserObjectModel,浏览器对象模型。BO...
- 巧克力:从一朵花开始的华丽变身_巧克力花束教程视频
-
世界上几乎所有的巧克力产品,都出自四五家大公司大型工厂里的流水线。然而,“手工制作巧克力”正在成为一种潮流,吸引着越来越多的人沉醉其中。这些娇嫩的花朵,是你吃过的每一块巧克力的开始。可可花直接生长在...
- browser-use:AI 驱动的浏览器自动化神器——DOM识别与交互详解
-
browser-use可以识别网页中可交互DOM内容,并能与之进行交互。本文将详细介绍browser-use实现这一核心功能的技术细节。一、可交互元素识别browser-use是通过DOMS...
- HTML DOM Progress 对象_html中的对象
-
Progress对象Progress对象是HTML5新增的。Progress对象表示一个HTML<progress>元素。<progress>元素表示任务...
- HTML DOM Script 对象_html document对象
-
Script对象Script对象表示一个HTML<script>元素。访问Script对象您可以使用getElementById()来访问<scrip...
- 虚拟DOM真的比操作原生DOM快吗?前端大神提供4个参考观点!收藏
-
尤雨溪:https://www.zhihu.com/question/31809713/answer/53544875VirtualDOM真的比操作原生DOM快吗?1.原生DOM操作v...
- 前沿|一种新的植入药物或可将HIV的预防时间持续一年
-
国外已经批准了一种叫做Truvada(中文名:特鲁瓦达)的药物用于HIV感染的暴露前预防。但是由于该药需要每天服用,因此有些人可能无法坚持,从而使得该药的预防效果降低。最近一项新的研究或许可以改变这种...
- 轻量级埋点sdk搭建,便捷更全面_埋点工具
-
引言借助埋点监控sdk,我们可以统计用户的点击,页面pv、uv,脚本错误、dom上报等关键信息等。一:项目初始化1.技术栈Tsrollup打包工具2.搭建项目npminit-ytsc--in...
- China's Humanoid Robotics Race Heats Up as Tesla's Optimus Hits a Wall
-
TMTPOST--Tesla'sonce-hypedhumanoidrobotproject,Optimus,hashitasnag.Partsprocurementhas...
- 单机训练速度提升640倍!独家解读快手商业广告模型GPU训练平台Persia
-
【导读】:近期,快手宣布将在2020年春节前实现3亿DAU,快手商业化营收步伐也随之加速。快手从2018年“商业化元年”开始推行个性化的广告推荐。截止5月底,快手DAU已经突破2亿。随着用户和使用时长...
- 一周热门
- 最近发表
-
- 前端工程师养成计划 专区_前端工程师技能要求
- 深入浅出虚拟 DOM 和 Diff 算法,及 Vue2 与 Vue3 中的区别
- css 布局简述_css布局的几种方式
- dart系列之:HTML的专属领域,除了javascript之外,dart也可以
- 原来隐藏一个DOM元素可以有这么多种方式,最后一种你肯定不知道
- JavaScript精通到深入_javascript进阶书籍推荐
- 巧克力:从一朵花开始的华丽变身_巧克力花束教程视频
- browser-use:AI 驱动的浏览器自动化神器——DOM识别与交互详解
- HTML DOM Progress 对象_html中的对象
- HTML DOM Script 对象_html document对象
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)