python网络爬虫实战-playwright

大家好,我是python网络爬虫这门课程的主要讲师geo

playwrightselenium强大

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