大家好,我是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 后,可高效完成网页自动化测试、数据爬取、表单自动提交等场景的开发。 |