Python Playwright 零基础入门教程:从安装到实战(2026最新)
Playwright 是微软推出的新一代自动化测试/爬虫工具,相比传统的 Selenium,它原生支持异步、跨浏览器(Chrome/Firefox/Safari)、自动等待元素加载,还能轻松处理弹窗、验证码(基础)、动态渲染页面,成为Python开发者做UI自动化、网页数据爬取的首选工具。本文从零基础出发,手把手教你掌握Playwright的核心用法,避开新手常见坑。
一、Playwright 核心优势(为什么选它?)
作为一线开发和测试工程师,我对比过多款自动化工具,Playwright的优势特别贴合实际开发需求:
- 跨浏览器兼容:一次编写,可运行在Chrome、Firefox、Edge、Safari(包括移动端模拟器);
- 自动等待机制:无需手动加
time.sleep(),会智能等待元素加载完成再操作,减少代码报错; - 原生支持异步:基于asyncio,异步脚本效率比Selenium高30%以上;
- 功能全面:内置截图、录屏、网络拦截、本地存储操作等功能,无需额外插件;
- 调试友好:自带代码生成器,能录制操作并自动生成Python代码,新手也能快速上手。
二、环境安装(Windows/macOS/Linux通用)
1. 安装Playwright库
首先确保你的Python版本≥3.8(推荐3.9-3.11,兼容性最好),打开终端/命令提示符执行:
pip install playwright
2. 安装浏览器驱动
Playwright需要下载对应浏览器的驱动,执行以下命令自动安装(国内用户建议加清华镜像加速):
# 国内镜像版(推荐)
playwright install --driver-path https://mirrors.tuna.tsinghua.edu.cn/github-release/microsoft/playwright-cli/latest/
# 官方原版
playwright install
安装完成后,会自动下载Chrome、Firefox、WebKit(Safari内核)三款浏览器的驱动,无需手动配置环境变量。
新手踩坑提醒:
- 如果提示“权限不足”,macOS/Linux加
sudo,Windows以管理员身份运行终端; - 若下载超时,可手动到Playwright官网下载驱动,解压后放到Python安装目录的
Scripts文件夹下。
三、第一个Playwright脚本:打开浏览器并访问网页
先写一个最简单的示例,验证环境是否正常,功能是:打开Chrome浏览器→访问百度→搜索“Python Playwright”→截图保存。
from playwright.sync_api import sync_playwright
# 同步模式(新手首选)
with sync_playwright() as p:
# 启动Chrome浏览器,headless=False表示显示浏览器窗口(调试用)
browser = p.chromium.launch(headless=False, slow_mo=500) # slow_mo延迟500ms,方便看操作过程
# 创建新页面
page = browser.new_page()
# 访问百度
page.goto("https://www.baidu.com")
# 定位搜索框,输入关键词(id定位,最常用)
page.locator("#kw").fill("Python Playwright 教程")
# 点击搜索按钮
page.locator("#su").click()
# 等待页面加载完成,截图保存
page.wait_for_load_state("networkidle") # 等待网络请求完成
page.screenshot(path="baidu_search.png")
# 关闭浏览器
browser.close()
print("脚本执行完成,截图已保存!")
运行脚本后,会看到Chrome自动打开并完成操作,当前目录会生成baidu_search.png截图文件。
四、核心功能详解:从入门到进阶
1. 元素定位(Playwright的核心)
Playwright支持多种定位方式,比Selenium更灵活,常用的有:
| 定位方式 | 代码示例 | 适用场景 |
|---|---|---|
| ID定位 | page.locator("#kw") |
元素有唯一ID |
| 类名定位 | page.locator(".s_ipt") |
元素有特定class |
| 文本定位 | page.locator("text=百度一下") |
按可见文本定位按钮/链接 |
| XPath定位 | page.locator("//input[@name='wd']") |
复杂结构定位 |
| CSS选择器 | page.locator("input[name='wd']") |
通用、高效的定位方式 |
实战技巧:用Playwright的代码生成器自动获取定位代码——终端执行:
playwright codegen https://www.baidu.com
会自动打开浏览器和代码生成面板,你手动操作的每一步,都会实时生成对应的Python代码,直接复制即可用!
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://www.baidu.com")
# 1. 输入文本(清空原有内容再输入)
page.locator("#kw").fill("Playwright 用法")
# 2. 点击元素
page.locator("#su").click()
# 3. 滚动页面(向下滚动500像素)
page.mouse.wheel(0, 500)
# 4. 选择下拉框(以百度设置的下拉框为例)
page.locator("#s-usersetting-top").click() # 打开下拉菜单
page.locator("text=搜索设置").click() # 点击菜单选项
# 5. 勾选复选框
page.locator("input[type='checkbox'][name='ime']").check()
browser.close()
3. 无头模式运行(生产环境推荐)
调试时用headless=False显示浏览器,生产环境建议开启无头模式(不显示窗口,速度更快):
# 无头模式启动Chrome
browser = p.chromium.launch(headless=True) # 默认为True,可省略
4. 异步模式(提升效率)
如果需要同时操作多个页面/浏览器,推荐用异步模式,示例:
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
await page.goto("https://www.baidu.com")
await page.locator("#kw").fill("异步Playwright")
await page.locator("#su").click()
await page.wait_for_load_state("networkidle")
await browser.close()
# 执行异步函数
asyncio.run(main())
五、实战案例:爬取动态渲染的网页数据
以爬取某资讯网站的文章列表为例(动态加载的内容,requests无法直接获取):
from playwright.sync_api import sync_playwright
def crawl_news():
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
# 访问目标网站(示例用新浪新闻)
page.goto("https://news.sina.com.cn/")
# 等待文章列表加载完成
page.wait_for_selector(".news-item")
# 提取所有文章标题和链接
news_list = page.locator(".news-item").all()
for news in news_list:
# 提取标题
title = news.locator("h2 a").inner_text()
# 提取链接
link = news.locator("h2 a").get_attribute("href")
print(f"标题:{title}\n链接:{link}\n---")
browser.close()
if __name__ == "__main__":
crawl_news()
运行后会输出所有文章的标题和链接,解决了动态渲染页面的爬取问题。
六、高级技巧:解决新手常见问题
1. 处理弹窗(alert/confirm/prompt)
Playwright能自动识别并处理弹窗,示例:
# 监听弹窗并自动确认
page.on("dialog", lambda dialog: dialog.accept())
# 若需要输入内容(prompt弹窗)
page.on("dialog", lambda dialog: dialog.accept("输入的内容"))
2. 网络拦截(过滤广告/请求)
拦截不需要的请求(如广告、图片),提升爬取速度:
# 拦截图片、视频请求
def block_request(route, request):
if request.resource_type in ["image", "video", "stylesheet"]:
route.abort() # 终止请求
else:
route.continue_() # 继续请求
# 注册拦截器
page.route("**/*", block_request)
3. 录屏功能(调试/留痕)
# 启动时开启录屏,保存为webm格式
browser = p.chromium.launch(headless=False)
context = browser.new_context(record_video_dir="./videos/")
page = context.new_page()
page.goto("https://www.baidu.com")
# 关闭时自动保存视频
context.close()

浙公网安备 33010602011771号