大家好,我是python网络爬虫这门课程的主要讲师geo
playwright比selenium强大
Playwright 是由 微软 (Microsoft) 开发的一个 自动化测试框架,主要用于 Web UI 自动化。
它的目标是帮助开发者和测试人员编写可靠的端到端(end-to-end, E2E)测试脚本。
它支持:
- 多浏览器:Chromium(Chrome, Edge)、Firefox、WebKit(Safari)。
- 多语言:Python、JavaScript/TypeScript、Java、.NET。
- 跨平台:Windows、Linux、macOS。
核心功能
- 自动浏览器操作:像人类一样点击按钮、填写表单、滚动页面、上传文件。
- 无头模式 (headless):可以在后台运行,不需要打开实际浏览器窗口。
- 多浏览器上下文 (BrowserContext):在同一个浏览器里开多个“独立会话”,适合测试不同用户登录状态。
- 等待机制 (auto-wait):自动等待元素出现或页面加载完成,不容易出“元素未找到”的错误。
- 跨设备测试:模拟手机、平板等设备(分辨率、触控)。
- 截图和视频录制:方便调试和生成测试报告。
| 特性 |
Playwright |
Selenium |
| 浏览器支持 |
Chromium, Firefox, WebKit |
几乎所有主流浏览器 |
| 等待机制 |
自动等待,稳定性高 |
需要手动加显式等待 |
| API 设计 |
现代化,链式调用方便 |
相对传统 |
| 多标签/多上下文 |
内置支持 |
需要额外处理 |
| 语言支持 |
JS/TS, Python, Java, .NET |
多种语言 |
| 速度 |
通常更快 |
稍慢 |
怎么开始?
pip install playwright
playwright install
如果执行不了playwright install则执行
python3 -m playwright install
要安装 Firefox 内核
python3 -m playwright install firefox
自动化代码
python3 -m playwright codegen "google.com"
整体对象层级速览
| 层级 |
对象 |
作用说明 |
| 入口 |
sync_playwright() / async_playwright() |
启动 Playwright 引擎 |
| 浏览器类型 |
chromium / firefox / webkit |
选择浏览器内核 |
| 浏览器 |
Browser |
控制浏览器进程 |
| 会话 |
BrowserContext |
独立用户环境(Cookie / Session) |
| 页面 |
Page |
单一 Tab 页面 |
| 元素 |
Locator |
智能元素操作(自动等待) |
Playwright 启动与关闭函数
| 函数 |
所属对象 |
用途 |
重点说明 |
sync_playwright() |
全局 |
同步启动 |
with 语法自动释放 |
async_playwright() |
全局 |
异步启动 |
高并发必用 |
launch() |
BrowserType |
启动浏览器 |
headless / slow_mo |
launch_persistent_context() |
BrowserType |
真实用户模式 |
反爬最强 |
close() |
Browser |
关闭浏览器 |
一定要关 |
BrowserContext(会话级)函数
| 函数 |
用途 |
实战说明 |
new_context() |
建立新会话 |
推荐每个任务一个 |
new_page() |
新分页 |
一个 Tab |
storage_state() |
保存登录 |
登录爬虫必备 |
add_cookies() |
注入 Cookie |
绕登录 |
clear_cookies() |
清 Cookie |
防污染 |
set_extra_http_headers() |
自定义 Header |
反爬 |
route() |
拦截请求 |
禁图 / 加速 |
Page(页面级)导航函数
| 函数 |
功能 |
说明 |
goto() |
跳转页面 |
自带等待 |
reload() |
刷新 |
重试 |
go_back() |
返回 |
浏览控制 |
go_forward() |
前进 |
浏览控制 |
title() |
页面标题 |
校验用 |
content() |
HTML |
爬虫 |
screenshot() |
截图 |
调试 |
Page 页面交互函数
| 函数 |
用途 |
说明 |
click() |
点击 |
自动等待 |
dblclick() |
双击 |
罕用 |
fill() |
填表 |
覆盖输入 |
type() |
打字 |
可延迟 |
press() |
键盘 |
Enter / Tab |
hover() |
悬停 |
菜单 |
check() |
勾选 |
checkbox |
select_option() |
下拉选择 |
select |
Locator(核心精华)函数
| 函数 |
用途 |
工程价值 |
locator() |
定位元素 |
稳定性核心 |
click() |
点击 |
自动重试 |
fill() |
输入 |
等待可编辑 |
nth() |
第 N 个 |
列表操作 |
count() |
数量 |
判断是否存在 |
filter() |
条件过滤 |
文本 / 子元素 |
first() / last() |
首尾 |
简化代码 |
数据抓取相关函数
| 函数 |
说明 |
场景 |
inner_text() |
可见文本 |
商品名 |
text_content() |
原始文本 |
清洗前 |
get_attribute() |
属性 |
href / src |
evaluate() |
执行 JS |
复杂数据 |
事件 / 下载 / 弹窗
| 函数 |
用途 |
说明 |
page.on() |
事件监听 |
dialog / request |
expect_download() |
下载文件 |
报表 |
set_input_files() |
上传 |
文件表单 |
on("dialog") |
弹窗 |
alert / confirm |
网络与反爬相关
| 函数 |
用途 |
实战价值 |
route() |
拦截请求 |
禁图 / mock |
on("request") |
请求监听 |
调试 |
set_extra_http_headers() |
Header |
反爬 |
user_agent |
伪装 |
必设 |
Frame / iframe
| 函数 |
说明 |
frame() |
获取 frame |
frame_locator() |
推荐方式 |
异常处理
| 异常 |
场景 |
TimeoutError |
元素未出现 |
Error |
页面异常 |
使用建议
| 场景 |
推荐做法 |
| 稳定性 |
Locator + 自动等待 |
| 登录 |
Context + storage_state |
| 规模化 |
Async + 多 Page |
| 爬虫 |
禁图 + network 拦截 |
| 维护 |
避免 XPath |