Python爬虫如何抓取异步JavaScript网页_利用Playwright拦截网络请求

老伟小哥_2399

老伟小哥_2399

2026-04-21

381人浏览

原创

能,playwright通过page.route()或context.route()直接拦截xhr/fetch请求,需精准定位目标api url;推荐用page.on("response")监听并解析json响应,比selenium更原生、灵活且稳定。

python爬虫如何抓取异步javascript网页_利用playwright拦截网络请求

Playwright能直接拦截并读取XHR/Fetch请求吗

能,但不是靠“监听DOM变化”或“等页面加载完再找元素”,而是通过 page.route() 或 context.route() 拦截网络请求本身。关键在于:你得知道目标数据是通过哪个URL发起的(比如 /api/items 或 /graphql),否则拦截了也拿不到结构化数据。

常见错误是盲目启用 page.wait_for_load_state("networkidle") 后去抓 document.querySelectorAll,结果发现目标内容根本没渲染——因为数据压根没走HTML,而是由JS在运行时用 fetch 拉的JSON。

  • 优先用浏览器开发者工具的 Network 面板,筛选 XHR 或 Fetch,找到返回真实数据的请求(看 Response 是 JSON 且字段匹配)
  • 拦截时建议用 context.route() 而非 page.route(),避免漏掉页面初始化阶段的预请求(如认证token获取)
  • 拦截后别只调 route.continue(),要用 route.response() 或 route.fulfill() 提前捕获响应体

如何在拦截中提取并保存JSON响应体

Playwright 的 route 对象不直接暴露响应体,必须主动调用 route.fetch_response()(需 Playwright ≥ 1.40)或改用 page.on("response") 监听。后者更稳定,尤其对重定向、压缩响应等场景。

示例逻辑:监听所有以 /api/ 开头的响应,检查 response.status() 和 response.headers()["content-type"] 是否含 application/json,再用 response.json() 解析:

java后端编程
java后端编程

专用于 Java Spring Boot 后端开发的专业技能。当用户提出以下需求时,应调用此技能:构建 REST API、创建 Spring Boot 项目、编写 Java 后端服务、配置数据库访问(JPA / MyBatis)、处理认证与授权(Spring Security / JWT)、实现微服务架构(Spring Cloud)、排查 Spring Boot 相关错误、审查 Java 代码质量,或执行任何与 Spring Boot / Java 后端相关的任务。

下载
page.on("response", lambda r: handle_api_response(r) if r.url.startswith("https://example.com/api/") else None)
<p>def handle_api_response(response):
if response.status != 200:
return
try:
data = response.json()</p><h1>保存到列表或文件</h1><pre class="brush:python;toolbar:false;">    api_results.append(data)
except Exception:
    pass
  • 注意 response.json() 是异步方法,若在同步回调里用会报错;应确保回调函数为 async,或改用 response.text() + json.loads()
  • 部分API返回 gzip 响应,response.text() 会自动解压,但 response.body() 返回的是原始 bytes,需手动处理
  • 不要在 handle_api_response 里做耗时操作(如写文件),容易拖慢页面加载;先存内存,结束后统一处理

为什么用Playwright比Selenium更适合这类场景

核心差异不在“能不能跑JS”,而在网络层控制粒度:Playwright 的 route 和 response 事件是原生支持的,而 Selenium 必须依赖 CDP 协议手动调用 Network.getResponseBody,代码冗长且易因CDP版本变动失效。

  • Playwright 支持在请求发出前修改 headers、query、甚至伪造响应(route.fulfill()),适合绕过简单反爬(如缺失 Authorization)
  • Selenium 的 driver.get_log("performance") 只能拿到请求元信息,拿不到响应体,还得额外发一次请求去捞数据
  • Playwright 的 browser.new_context(ignore_https_errors=True) 对自签名证书兼容更好,企业内网调试更省事

拦截失败的三个高频原因

不是代码写错,而是环境或时机问题:

  • 目标请求是 preflight OPTIONS 请求,被自动忽略——实际数据在后续的 POST/GET 中,需监听主请求而非预检
  • 页面用 Service Worker 缓存了响应,导致 response 事件不触发——加 context.add_init_script("window.navigator.serviceWorker.ready.then(() => {});") 清除或禁用
  • 请求 URL 动态拼接(含时间戳、sign参数),每次都不一样,无法用固定字符串匹配——改用正则匹配路径部分,例如 re.match(r"https://.*/api/items\?.*", url)

真正难的从来不是写几行拦截代码,而是确认那个“关键请求”到底长什么样、在什么条件下发出、有没有前置依赖。花十分钟看清楚 Network 面板,比写一小时重试逻辑更有效。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1771

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4644

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1749

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

27497

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3327

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3327

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1203

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2583

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习