PHP使用puppeteer抓取JS渲染后的页面内容
发布于2026-07-23 阅读(0)
最近研究了一下怎么爬取那些Ja vaScript渲染后的网页内容,折腾了一圈,发现核心武器还是得靠Puppeteer。不过它是个Node库,想在PHP里用还得再套一层,这里用到了`spatie/browsershot`这个包。下面把整个流程和踩坑点都捋一遍。
## 环境依赖
先看看环境要求,其实不算高,但有几个硬性门槛:
| 环境 | 要求 |
| --- | --- |
| Node | >= 7.6.0 |
| PHP | >= 7.1 |
| PHP extension | php_sockets, php_exif |
## puppeteer
Puppeteer是个Node库,可以直接在PHP项目下用npm安装,然后通过`spatie/browsershot`来调用。当然,也可以单独新建一个Node项目来装这个库,然后对外暴露一个接口,通过传URL返回HTML内容,但那样多了一层网络开销,不如直接本地调用方便。
```bash
npm i puppeteer --sa ve
```
## 离线安装Chromium
安装Puppeteer的时候会自动下载Chromium,但众所周知的原因,这个下载过程常常卡死。所以下面给出一套离线安装的方案,省得反复重试。
### 跳过安装chromium
如果已经运行了上面的命令并且正在下载Chromium,可以直接`Ctrl+C`停掉。如果还没运行,就用下面这个命令来安装,跳过自动下载:
```bash
npm i puppeteer --ignore-scripts
```
### 获取需要下载的chromium版本号
打开`/node_modules/puppeteer/package.json`,搜索`chromium_revision`,后面那个数字就是版本号。比如:
```json
"puppeteer": {
"chromium_revision": "756035",
"firefox_revision": "latest"
}
```
### 下载对应版本的chromium
用上面拿到的版本号替换掉下方花括号里的字符。比如本地是Windows 64位,下载地址就是`https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win_x64/756035/chrome-win.zip`。
- Mac版:`https://commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/{chromium版本}/chrome-mac.zip`
- Windows 64位:`https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win_x64/{chromium版本}/chrome-win.zip`
- Windows 32位:`https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win/{chromium版本}/chrome-win.zip`
- Linux X86:`https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux/{chromium版本}/chrome-linux.zip`
- Linux X64:`https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/{chromium版本}/chrome-linux.zip`
### 解压
把下载好的压缩包解压到Puppeteer目录下的`.local_chromium/win64-{版本号}/`里。比如本地路径是`/node_modules/puppeteer/.local_chromium/win64-756035/chrome-win/`。搞定,Chromium就可以正常使用了。
## spatie/browsershot
browsershot是一个Composer包,之前也用过这个团队做的`spatie/lara vel-permission`,质量一直不错。
```bash
composer require spatie/browsershot
```
## 使用
其实最难的部分就是装环境和配置工具,真到了使用环节反而简单。下面放一个最基础的例子,更多高级用法还是直接看官方文档比较靠谱。
```php
bodyHtml();
}
}
```
## 总结
从安装到使用,整个链条不算复杂,但离线安装Chromium这个环节很容易卡住,提前准备好离线包能省不少时间。工具选对了,后面就是几行代码的事。
本文转载于:https://www.jb51.net/program/335042cer.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。