如何在Python中使用Playwright快速抓取采用SSR渲染的前端页面?

风丽姑娘_4542

风丽姑娘_4542

2026-11-05

690人浏览

原创

Playwright抓取SSR页面需等待hydration完成而非禁用JS;应使用page.wait_for_function检测window.__NEXT_DATA__等框架状态,避免依赖time.sleep或仅等待元素出现。

如何在python中使用playwright快速抓取采用ssr渲染的前端页面?

Playwright 本身不区分 SSR 还是 CSR,它操作的是最终渲染完成的 DOM —— 所以“抓取 SSR 页面”这件事,本质上只是确保页面内容已加载完毕再提取,而不是等 JS 渲染。关键在等待策略,不是渲染模式。

为什么 page.goto() 后不能直接 page.content()

SSR 页面虽然服务端已输出 HTML,但前端框架(如 Next.js、Nuxt)常会注入 hydration 脚本,在客户端重新挂载或补全数据(比如用户头像、实时价格)。此时 page.content() 返回的是初始 SSR HTML,可能不含这些动态补全的内容。

  • 现象:抓到的 HTML 里有
    却没内容,或关键字段为空
  • 原因:JS 尚未执行完 hydration,或异步数据请求还没返回
  • 错误做法:用 time.sleep(2) —— 不可靠,慢且易断

用 page.wait_for_function() 等待 hydration 完成

比 wait_for_selector 更精准:直接检测框架是否完成挂载。例如 Next.js 会在全局挂载 window.__NEXT_DATA__,Vue SSR 应用常暴露 window.__NUXT__ 或 window.$nuxt。

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
await page.goto("https://example.com")
await page.wait_for_function("window.__NEXT_DATA__ !== undefined && window.__NEXT_DATA__.props")
# 或针对 Vue: await page.wait_for_function("window.__NUXT__ && window.__NUXT__.state")
  • 这个检查既快又语义明确:不是等某个元素出现,而是等框架状态就绪
  • 避免误判:比如某个 loading 元素消失 ≠ 数据已填入,但 __NEXT_DATA__.props 存在基本意味着 hydration 成功
  • 注意:某些部署会移除 __NEXT_DATA__(如启用了 hybrid 模式或自定义序列化),此时需退回到监听关键业务元素

抓取时要不要禁用 JavaScript?

不要禁用。SSR 页面的交互、懒加载、分析脚本、甚至部分核心内容(如评论区、推荐列表)都依赖 JS 执行。禁用后你拿到的只是骨架 HTML,和 curl 效果差不多。

  • 验证方式:在 Playwright 的 headed 模式下打开页面,手动禁用 JS,看关键区域是否空白
  • 例外情况极少:仅当你明确只需原始 SSR 输出(如 SEO 抓取 meta 标签),才考虑 java_script_enabled=False,但这时其实用 requests + 解析更轻量
  • 性能影响可控:Playwright 默认启用 JS,且现代硬件下开销可忽略;相比频繁重试或超时,这是最稳的选择

真正容易被忽略的点是 hydration 和数据请求的先后关系 —— 有些页面先 hydration 再发 API 请求(此时要等接口响应),有些则把数据内联在 __NEXT_DATA__ 里(此时等 hydration 就够了)。得看目标站点实际行为,不能一概而论。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

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

2023.08.11

2843

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

6163

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

7090

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6898

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

983

5

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

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

2023.07.20

1871

4

python能做什么
python能做什么

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

2023.07.25

5104

7

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

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

2023.07.31

1809

3

python教程
python教程

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

2023.08.03

30717

23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程