大家好,我是jobleap.cn的小九。
Playwright 是微软推出的新一代自动化测试/爬虫框架,支持 Chromium、Firefox、WebKit 三大浏览器,提供同步/异步 API,具备自动等待、强大的元素定位、网络拦截等核心能力。本文将从环境搭建到综合实战,全面串联 Playwright 的常用 API,帮助你快速掌握其核心用法。
一、环境搭建
1. 安装 Playwright 核心库
pipinstallplaywright2. 安装浏览器驱动
Playwright 需要对应浏览器的驱动文件,执行以下命令自动安装 Chromium、Firefox、WebKit(也可指定单一浏览器):
# 安装所有浏览器playwrightinstall# 仅安装 Chromium(常用)playwrightinstallchromium3. 验证安装
fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browser=p.chromium.launch(headless=False)# 启动有头浏览器page=browser.new_page()page.goto("https://www.baidu.com")print(page.title())# 输出:百度一下,你就知道browser.close()二、核心概念(必懂)
Playwright 的核心层级关系:Playwright→Browser→BrowserContext→Page
- Browser:浏览器实例(对应真实浏览器进程),支持多浏览器(Chromium/Firefox/WebKit)。
- BrowserContext:浏览器上下文(类似隐身窗口),隔离的环境,一个 Browser 可创建多个 Context。
- Page:页面(对应浏览器标签页),一个 Context 可创建多个 Page。
三、常用 API 详解与实战
1. 浏览器启动与配置(Browser API)
核心方法:playwright.chromium.launch()(Firefox/webkit 同理),常用参数:
headless:是否无头模式(默认 True,无界面)。slow_mo:慢动作执行(单位 ms,便于调试)。args:浏览器启动参数(如窗口大小、禁用图片加载)。timeout:启动超时时间(默认 30000 ms)。
fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:# 启动 Chromium 有头模式,窗口大小 1920x1080,慢动作 500msbrowser=p.chromium.launch(headless=False,slow_mo=500,args=["--window-size=1920,1080","--disable-images"]# 禁用图片加载)# 创建上下文(可配置视口、超时、代理等)context=browser.new_context(viewport={"width":1920,"height":1080},timeout=10000,# 上下文级别超时user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36")# 创建页面page=context.new_page()page.goto("https://www.baidu.com")# 关闭资源(建议用 with 上下文自动关闭,此处手动演示)page.close()context.close()browser.close()2. 页面基础操作(Page API)
(1)导航与刷新
goto(url, wait_until):导航到指定 URL,wait_until可选load(页面加载完成)、domcontentloaded(DOM 加载完成)、networkidle(网络空闲)。reload():刷新页面。go_back()/go_forward():前进/后退。
# 导航到百度,等待网络空闲(适合异步加载页面)page.goto("https://www.baidu.com",wait_until="networkidle")# 刷新页面page.reload()# 后退/前进page.go_back()page.go_forward()# 获取页面信息print("页面标题:",page.title())print("页面URL:",page.url)print("页面内容:",page.content())# 获取整个页面 HTML(2)窗口控制
# 设置页面大小page.set_viewport_size({"width":1200,"height":800})# 最大化窗口page.set_viewport_size(page.viewport_size())# 或通过浏览器 args 设置# 截图(整页/元素)page.screenshot(path="full_page.png",full_page=True)# 整页截图page.locator("#su").screenshot(path="button.png")# 元素截图3. 元素定位(核心)
Playwright 推荐语义化定位(优先)+ CSS/XPath 定位,支持 8 种定位方式,优先级从高到低:
| 定位方式 | API 示例 | 适用场景 |
|---|---|---|
| 按角色(Role) | page.get_by_role("button", name="百度一下") | 按钮、输入框等可访问性元素 |
| 按文本 | page.get_by_text("百度一下") | 固定文本的元素 |
| 按标签(Label) | page.get_by_label("搜索") | 输入框的标签 |
| 按占位符 | page.get_by_placeholder("请输入搜索内容") | 输入框占位符 |
| 按 Alt 文本 | page.get_by_alt_text("百度logo") | 图片元素 |
| 按 Title 属性 | page.get_by_title("百度首页") | 带 title 的元素 |
| 按测试 ID | page.get_by_test_id("search-btn") | 自定义># 语义化定位(推荐)search_input=page.get_by_placeholder("请输入搜索内容")# 按占位符search_btn=page.get_by_role("button",name="百度一下")# 按角色+名称# CSS 定位(兼容传统方式)search_input=page.locator("#kw")# ID 选择器search_btn=page.locator(".btn-self")# 类选择器# XPath 定位search_input=page.locator('//input[@id="kw"]')4. 元素交互(Page/Locator API)(1)基础交互
(2)表单操作
5. 等待机制(避免硬等待)Playwright 自带自动等待(操作元素时等待元素可见、可操作),也支持手动等待: (1)显式等待(2)超时配置6. 数据提取(1)元素数据提取(2)录屏(需上下文配置)7. 网络拦截与请求处理Playwright 可拦截、修改、模拟网络请求/响应,适用于爬虫反爬、接口测试。 8. 多标签页/多上下文操作(1)多标签页(2)多上下文(隔离环境)9. 弹窗处理(Alert/Confirm/Prompt)Playwright 可监听并处理浏览器原生弹窗: 四、综合实战:电商商品信息爬取需求:爬取京东“Python编程书籍”第一个商品的名称、价格、评价数,并截图保存。 五、高级技巧与注意事项1. 异步 API(适合高并发)Playwright 支持异步编程,核心替换 2. 反爬规避
3. 测试框架集成Playwright 可与 pytest 集成( 4. 注意事项
六、总结Playwright 凭借自动等待、跨浏览器、强大的定位与网络拦截能力,成为 Python 自动化/爬虫领域的主流工具。本文串联了浏览器启动、页面操作、元素定位、交互、数据提取、网络拦截等核心 API,并通过实战案例验证了用法。掌握这些 API 后,可高效完成网页自动化测试、数据爬取、表单自动提交等场景的开发。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设
2026/8/15 23:23:28
数据库连接池泄漏:为什么连接越用越少?怎么彻底排查与修复?网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…
网站建设
2026/8/16 2:02:58
TikTok直播卡顿掉帧?直播专线带来高稳定推流TikTok直播卡顿和掉帧的根源在于推流路径的国际链路质量不稳定、数据丢包率高以及本地网络上传抖动大。直播专线通过提供专属的、优化的国际通道,有效规避了公网拥堵和国际海缆不稳定因素,确保了推流码率的连续性和稳定性,是解决TikTok直播高…
网站建设
2026/8/16 6:27:16
【文献速递】基因诊断新突破:minigene技术破解疑难遗传病的剪接之谜德国Tubingen大学的研究团队在《Journal of Pathology》上发表了一项重要研究,通过一种名为小基因剪接检测(minigene splice assay)的技术,成功破解了21个CNGB3基因变异的神秘面纱。这些变异与罕见眼病全色盲密切相关,…
网站建设
2026/8/16 15:46:40
数据要素方案,数据资产解决方案(文件)数据要素是以电子形式参与生产经营、发挥重要价值的资源。在互联网普及背景下,全球数据爆发式增长,成为驱动实体经济变革、推动数字经济深入发展的核心新生产要素,具有虚拟性、非消耗性、依赖性等特征。数据资产建设需遵循“数据资源化 - 数据…
网站建设
2026/8/14 16:47:26
AntiSplit-M:终极APK合并工具,一键解决拆分安装难题AntiSplit-M:终极APK合并工具,一键解决拆分安装难题 【免费下载链接】AntiSplit-M App to AntiSplit (merge) split APKs (APKS/XAPK/APKM) to regular .APK file on Android 项目地址: https://gitcode.com/gh_mirrors/an/AntiSplit-M 在当今And…
网站建设
2026/8/16 10:08:15
LeetCode 83/237/82 链表删除问题-盒子模型目录 一、LeetCode 83 移除排序链表中的重复元素(保留一个) 题目核心 核心难点拆解 深度思路(盒子 - 标签 - 纸条模型) 代码实现 易踩坑点 & 底层原理 二、LeetCode 237 删除链表中的节点(无法访问头节点&am… |