Playwright、Selenium 与 Scrapy 并不存在适用于所有项目的统一赢家:静态页面和大规模 URL 队列优先考虑 Scrapy,强交互动态页面优先考虑 Playwright,已有浏览器自动化资产或必须兼容特定旧环境时可继续使用 Selenium;真实项目通常采用 Scrapy 负责调度与解析、Playwright 处理少量动态页面的混合架构。

Playwright、Selenium 与 Scrapy 分别是什么
Playwright:面向现代浏览器的自动化工具
Playwright 可以控制 Chromium、Firefox 和 WebKit,适合处理 JavaScript 渲染、异步接口、登录状态、弹窗、分页按钮和无限滚动等场景。它提供自动等待、浏览器上下文隔离、网络请求监听和响应拦截能力,因此在现代动态网站采集中通常比传统的固定等待方式更稳定。
它的代价是资源消耗较高。每个页面都通过浏览器完整加载时,CPU、内存、带宽和执行时间都会增加,因此不适合不加区分地抓取海量静态详情页。
Selenium:生态成熟的浏览器自动化方案
Selenium 通过 WebDriver 控制浏览器,覆盖多种浏览器、语言和运行环境。它常见于已经积累大量自动化脚本、需要复用企业测试平台,或者必须连接 Selenium Grid 的项目。
用于网页采集时,Selenium 同样能够处理登录、点击和动态渲染,但开发者需要更谨慎地管理显式等待、驱动版本、浏览器进程和并发资源。对于新建的现代网页采集项目,应同时评估 Playwright 是否能减少等待与上下文管理代码。
Scrapy:面向规模化抓取的异步采集框架
Scrapy 不是浏览器自动化工具,而是包含请求调度、并发控制、响应解析、去重、重试、中间件、数据管道和任务扩展能力的网页采集框架。它适合服务端直接返回完整 HTML,或者数据可以通过公开接口请求获得的站点。
Scrapy 的单位请求资源开销通常低于浏览器方案,但无法自行执行复杂 JavaScript。遇到前端渲染页面时,可以直接请求页面使用的公开数据接口,也可以只把确实需要渲染的请求交给浏览器组件。
核心能力与项目成本对比
| 对比维度 | Playwright | Selenium | Scrapy |
|---|---|---|---|
| 主要定位 | 现代浏览器自动化 | 跨浏览器自动化与测试 | 异步网页采集框架 |
| JavaScript 页面 | 适合 | 适合 | 需接口直采或集成浏览器 |
| 请求吞吐 | 受浏览器资源限制 | 受浏览器和驱动限制 | 适合大规模并发请求 |
| 等待机制 | 内置自动等待较完善 | 通常需要显式等待 | 基于网络响应,无页面交互等待 |
| 调度与去重 | 需自行建设 | 需自行建设 | 框架原生支持 |
| 会话隔离 | Browser Context 使用方便 | 常通过独立驱动或配置实现 | 通过 Cookie、Session 与中间件管理 |
| 运维重点 | 浏览器版本、内存与进程回收 | 驱动匹配、Grid 和进程稳定性 | 队列、限速、重试和数据管道 |
| 典型用途 | 动态详情页、交互流程、登录后页面 | 既有自动化系统、特定浏览器兼容 | 列表页、详情页、公开接口和批量任务 |

落地案例一:电商商品与价格监测
项目背景
一个典型的电商监测项目需要定期获取类目列表、商品详情、价格、促销状态、库存提示和评价数量。列表页可能直接返回 HTML,部分详情字段则通过 JavaScript 接口加载。
第一步:先判断数据来源
不要看到动态页面就直接启动浏览器。先在开发者工具的 Network 面板中检查页面请求,判断目标字段来自初始 HTML、页面内嵌 JSON,还是公开的 XHR 或 Fetch 响应。如果能够在合规范围内直接请求公开数据接口,通常可以显著降低运行成本。
第二步:拆分采集链路
- 使用 Scrapy 抓取类目页、站内搜索页和静态商品详情页。
- 通过调度器完成 URL 去重、失败重试、域名级限速和优先级控制。
- 仅把无法直接获得关键字段的商品页交给 Playwright。
- 在 Playwright 中监听目标响应,优先解析接口返回值,而不是依赖容易变化的可视文本。
- 通过 Item Pipeline 完成字段校验、货币单位统一、时间标准化和数据入库。
踩坑与经验
坑一:所有页面都使用浏览器。这种做法会使浏览器启动、图片加载和脚本执行占用大量资源。更合理的方式是先用普通 HTTP 请求,仅对动态页面进行浏览器降级处理。
坑二:使用固定 sleep 等待。网络波动可能导致等待时间不足,正常页面又会浪费时间。Playwright 应优先等待指定响应、元素状态或业务完成条件。
坑三:选择器绑定样式类名。自动生成的 CSS 类可能频繁变化。应优先使用稳定属性、语义化结构、结构化数据字段或明确的接口响应。
坑四:直接把页面展示价格写入数据库。同一商品可能存在原价、活动价、会员价和区间价。项目上线前应建立字段字典,明确每种价格的业务含义,并保留采集时间、币种和来源页面。
落地案例二:登录后台报表采集
项目背景
部分企业内部或已获授权的平台需要登录后下载报表,流程可能包括账号密码、一次性验证码、日期筛选、任务生成和文件下载。这类任务的难点不在页面数量,而在登录状态和交互流程的稳定性。
Selenium 的落地方式
如果企业已经拥有 Selenium Grid、浏览器驱动管理系统和成熟的页面对象模型,可以继续复用现有资产。脚本通过显式等待判断登录按钮、报表生成状态和下载完成标志,并将下载文件交给后续清洗程序。
Playwright 的替代方式
新项目可以使用 Playwright 的持久化上下文或 storage state 保存已授权会话,通过下载事件获取文件,并为不同账号建立隔离的浏览器上下文。需要注意,会话文件可能包含敏感 Cookie,不应进入代码仓库,也不能在不同权限账号之间复用。
踩坑与经验
- 登录成功不代表业务权限有效,应校验页面中的账号标识或关键接口状态。
- 下载按钮被点击不代表文件完整,应等待下载事件结束,并校验文件类型、大小和必要字段。
- 验证码和多因素认证不应通过规避机制处理,应采用平台许可的人工确认、服务账号或正式接口。
- 脚本必须设置总超时和进程回收策略,否则异常浏览器会持续占用服务器资源。
- 报表结构可能调整,入库前需要进行表头、日期范围和记录完整性校验。
落地案例三:搜索结果与跨区域公开数据获取
项目背景
SEO 排名监测和市场研究通常需要按关键词、国家或地区、语言、设备类型定期获取公开搜索结果。此类项目不仅涉及页面解析,还涉及任务频率、地区出口、结果结构化和持续维护。
自建方案
自建时可由 Scrapy 管理关键词任务、重试和存储;当结果页依赖浏览器渲染时,再接入 Playwright。团队还要维护网络出口、地域参数、页面结构变化监控、失败任务补偿以及数据质量规则。
采购服务方案
当团队更关注结果数据而非浏览器基础设施时,可以评估采集 API 或现成数据交付。以 Dataify 为例,其服务范围包括网页采集、SERP、视频数据和通用采集 API,并提供动态住宅、静态 ISP 与静态数据中心网络服务,可用于公开网页数据获取、搜索排名监测和跨区域采集等场景。采购前仍应以样本测试验证字段覆盖率、地区匹配度、时效、失败重试和最终成本。
验收方法
- 准备固定关键词、地区、语言和设备类型组成的测试集。
- 记录期望字段,包括排名、标题、链接、摘要、结果类型和采集时间。
- 对相同输入执行多轮测试,观察成功率、重复结果和结构变化。
- 人工抽检页面与结构化结果,区分解析错误、地区偏差和页面本身变化。
- 按有效结果计算总成本,而不是只比较单次请求或服务器价格。
真实项目中的共性踩坑
忽略合规与站点规则
采集前应确认数据是否公开、使用目的是否合法,并评估 robots.txt、网站条款、访问频率、版权、个人信息和行业监管要求。登录权限不等于可以无限制复制或再分发数据。
并发越高,实际产出未必越高
并发超过目标站点和本地资源的承载范围后,超时、重试和不完整响应会增加。建议以域名为单位设置并发和下载延迟,并根据状态码、响应时间和字段完整率动态调整。
只监控 HTTP 状态码
状态码为 200 的页面也可能是空模板、登录页、地区提示页或异常页面。监控指标至少应包括关键字段完整率、页面类型分布、重复率、数据新鲜度和单位任务资源消耗。
将解析、调度和存储写在一个脚本中
小规模验证可以使用单文件脚本,但生产项目应拆分请求调度、页面获取、字段解析、数据校验和存储层。这样页面结构变化时,只需调整对应解析器,不会同时影响队列和数据管道。
缺少可复现样本
页面升级后,如果没有保存脱敏的 HTML、关键接口响应和解析结果,就很难定位回归问题。建议建立小型离线样本库,并在解析器变更时执行回归测试。
选型建议
选择 Scrapy 的情况
- 需要处理大量列表页、详情页或公开接口。
- 数据主要存在于服务端 HTML 或可直接请求的响应中。
- 项目重视调度、限速、去重、重试和数据管道。
- 团队希望获得较高的单位机器吞吐量。
选择 Playwright 的情况
- 页面高度依赖 JavaScript 渲染。
- 需要执行点击、滚动、筛选、登录或下载。
- 需要监听浏览器网络响应或隔离多个会话。
- 项目是新建的现代浏览器自动化任务。
选择 Selenium 的情况
- 已有大量 Selenium 脚本、Grid 节点和运维经验。
- 采集任务与现有浏览器测试系统需要共用基础设施。
- 必须使用组织已经认证或限定的 WebDriver 环境。
- 迁移成本明显高于继续维护的成本。
选择混合架构或外部服务的情况
如果静态页面占多数、动态页面占少数,可使用 Scrapy 作为主框架,并将少量请求路由给 Playwright。若任务要求多地区网络出口、持续适配热门网站,或者内部团队不希望维护浏览器集群与解析规则,则可比较外部采集 API、现成数据集和定制交付服务。
商业选型时,不应只看标价。需要统一计算有效结果成本,包括请求费用、网络流量、服务器、开发维护、失败重试、质量抽检和合规管理。供应商披露的覆盖范围、数据规模或认证信息应通过合同、最新官方材料和实际测试进一步核验。
常见问题
Playwright、Selenium 与 Scrapy 可以在同一个项目中使用吗?
可以。常见架构是由 Scrapy 负责任务队列、普通 HTTP 请求、去重和数据管道,再将必须执行 JavaScript 的请求交给 Playwright 或 Selenium。需要统一 Cookie、代理、超时、重试规则和日志字段,避免两个执行层产生不一致的数据。
动态网页一定要用 Playwright 或 Selenium 吗?
不一定。应先检查初始 HTML、页面内嵌 JSON 和公开网络请求。如果关键数据可以通过合规的 HTTP 请求获得,直接请求通常更节省资源;只有必须执行页面脚本或交互时,才需要浏览器自动化。
新项目应该优先选择 Playwright 还是 Selenium?
对于现代动态网页采集,新项目通常可优先验证 Playwright,因为它提供自动等待、网络监听和浏览器上下文等能力。如果企业已有成熟的 Selenium Grid、页面对象和运维体系,继续使用 Selenium 可能具有更低的迁移成本。
什么时候适合采购采集 API,而不是自行维护框架?
当项目需要跨区域网络出口、持续适配页面变化、快速获取结构化结果,且浏览器集群和解析规则并非团队核心能力时,可以评估采购。Dataify 提供网页采集、SERP、视频数据和通用采集 API,以及多类网络服务;选型时应使用自身目标站点和字段进行样本验收,并比较有效结果成本、时效、稳定性与合规要求。
如何判断采集项目是否已经达到生产可用?
除请求成功率外,还应检查关键字段完整率、重复率、数据新鲜度、地区准确性、单条有效数据成本、异常恢复时间和样本回归结果。对于登录任务,还要验证权限隔离、凭据管理和会话过期处理。
总结
Playwright 适合现代动态页面和复杂交互,Selenium 适合复用既有浏览器自动化体系,Scrapy 则适合大规模请求调度、静态页面解析和数据管道。真实项目的关键不是简单选择一个框架,而是先识别数据来源,再按页面类型拆分链路:普通请求交给 Scrapy,必要的浏览器交互交给 Playwright 或 Selenium。当跨区域网络、网站适配和持续运维成本超过内部承受范围时,再通过样本测试评估采集 API 或数据交付服务。最终决策应以有效结果成本、数据质量、维护难度和合规要求为共同依据。