一句话:Playwright 是微软出的开源浏览器自动化工具,能让代码像真人一样打开网页、点击、抓数据,还自带真浏览器内核,反爬基本认不出来。
一、Playwright 是什么
Playwright 是微软(Microsoft)开源的 Web 自动化框架,2020 年发布。它通过驱动真实的浏览器内核(Chromium、Firefox、WebKit)来操作网页,能做:
- 自动打开网页、点击、输入、截图
- 抓取页面数据、监听网络请求
- 自动登录、填表单、跑测试
- 监听 WebSocket,抓实时弹幕 / 直播数据流(咱们这个项目就是用它抓抖音弹幕)
GitHub:https://github.com/microsoft/playwright
二、为什么用它,而不是普通爬虫
| 对比项 | requests / 手写协议 | Playwright 真浏览器 |
|---|---|---|
| 反爬对抗 | 容易被识别、封 IP、DEVICE\_BLOCKED | 真浏览器指纹,几乎认不出 |
| JS 渲染 | 渲染不了动态页面 | 完整浏览器引擎,啥都能渲染 |
| Cookie / 签名 | 要手搓 ttwid、a\_bogus 等 | 浏览器自动处理 |
| WebSocket 数据 | 要手写握手和心跳 | 直接监听二进制帧 |
| 开发成本 | 高,反爬一变就得重写 | 低,打开页面就完事 |
| 代价 | 轻量 | 要开浏览器进程,内存占几百 MB |
一句话:普通爬虫是跟反爬硬刚,Playwright 是直接把真浏览器当代理,让网站以为你就是真人。
三、下载安装(Windows + Python,本项目同款)
1. 前置:装 Python
去 https://www.python.org/downloads/ 下载 Python 3.9+,安装时勾选 Add Python to PATH。
验证:
python --version2. 新建虚拟环境(推荐)
cd 你的项目目录
python -m venv venv
.\venv\Scripts\activate3. 安装 playwright 包
pip install playwright4. 下载浏览器内核(关键一步!)
playwright install chromium这会自动下载一个干净的 Chromium 到 C:\Users\你的用户名\AppData\Local\ms-playwright\。
这个浏览器不是你自己装的 Chrome,不共享书签和登录态。
四、第一个示例脚本
新建 demo.py:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# headless=False 会看到浏览器窗口;True 则后台运行
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com")
print("页面标题:", page.title())
page.screenshot(path="demo.png")
browser.close()运行:
python demo.py会弹出一个 Chromium 窗口打开百度,截图保存为 demo.png。
五、常用命令速查
# 安装指定浏览器
playwright install chromium
playwright install firefox
playwright install webkit
# 只装系统依赖(Linux 常用)
playwright install-deps
# 打开代码生成器(边点边自动生成代码)
playwright codegen https://www.baidu.com
# 截图当前页
playwright screenshot https://example.com example.png六、抓 WebSocket 数据(直播弹幕同款)
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
# 监听所有 WebSocket 帧
def on_ws(ws):
print("WebSocket 连接:", ws.url)
ws.on("framereceived", lambda payload: print("收到数据:", len(payload), "字节"))
page.on("websocket", on_ws)
page.goto("https://live.douyin.com/房间号")
page.wait_for_timeout(60000) # 监听 60 秒
browser.close()七、常见问题
Q:它和谷歌浏览器是一回事吗?
不是。它用的是 Chromium 内核,但 Playwright 自动下载的是独立版本,跟你日常用的 Chrome 隔离,不共享书签和登录。
Q:内存占用大吗?
开一个 Chromium 大概占 300–500MB 内存,比 requests 重,但换来了稳定性。
Q:会被网站封吗?
比手写协议难封得多。可以再加 --disable-blink-features=AutomationControlled 等参数进一步隐藏自动化特征。

