Puppeteer 插件
优质
小牛编辑
137浏览
2023-12-01
使用 Puppeteer 采集 JavaScript 动态渲染的页面。使用此插件需要有一定的 Node.js 基础知识,并且会配置 Node 运行环境。
此插件是基于 PuPHPeteer
包的简单封装,支持使用 Puppeteer 所有的 API,非常强大!
- PuPHPeteer: https://github.com/nesk/puphpeteer
- Puppeteer: https://github.com/GoogleChrome/puppeteer
- Github: https://github.com/jae-jae/QueryList-Puppeteer
环境要求
- PHP >= 7.1
- Node >= 8
安装
1、安装插件
composer require jaeger/querylist-puppeteer
2、安装 Node 依赖(与composer一样在项目根目录下执行)
npm install @nesk/puphpeteer
或者使用 yarn
安装 Node 依赖:
yarn add @nesk/puphpeteer
如果 npm 安装速度太慢,可以尝试更换国内 npm 镜像源:
npm config set registry https://registry.npm.taobao.org
插件注册选项
QueryList::use(Chrome::class,$opt1)
- $opt1: 设置
chrome
函数别名
API
-
chrome($url, $options = [])
使用 Chrome 打开链接,返回值为设置好 HTML 的 QueryList 对象- 参数
$url
:要访问的网页链接地址 - 参数
$options
:设置Puppeteer
的launch()
方法的选项,全部选项:puppeteer.launch([options])
- 参数
用法
在 QueryList 中注册插件
use QL\QueryList;
use QL\Ext\Chrome;
$ql = QueryList::getInstance();
// 注册插件,默认注册的方法名为: chrome
$ql->use(Chrome::class);
// 或者自定义注册的方法名
$ql->use(Chrome::class,'chrome');
基本用法
// 抓取的目标页面是使用Vue.js动态渲染的页面
$text = $ql->chrome('https://www.iviewui.com/components/button')->find('h1')->text();
print_r($text);
// 输出: Button 按钮
$rules = [
'h1' => ['h1','text']
];
$ql = $ql->chrome('https://www.iviewui.com/components/button');
$data = $ql->rules($rules)->queryData();
设置 Puppeteer launch 选项,选项文档:https://github.com/GoogleChrome/puppeteer/blob/v1.11.0/docs/api.md#puppeteerlaunchoptions
$text = $ql->chrome('https://www.iviewui.com/components/button',[
'timeout' => 6000,
'ignoreHTTPSErrors' => true,
// ...
])->find('h1')->text();
更高级的用法,查看 Puppeteer 文档了解全部 API:https://github.com/GoogleChrome/puppeteer
$text = $ql->chrome(function ($page,$browser) {
$page->setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36');
// 设置cookie
$page->setCookie([
'name' => 'foo',
'value' => 'xxx',
'url' => 'https://www.iviewui.com'
],[
'name' => 'foo2',
'value' => 'yyy',
'url' => 'https://www.iviewui.com'
]);
$page->goto('https://www.xnip.cn/wp-content/uploads/2021/docimg6/9-w5w12drgqll.png
截图文件。
$text = $ql->chrome(function ($page,$browser) {
$page->goto('https://www.xnip.cn/wp-content/uploads/2021/docimg6/11-qyoq0cxcx4w.png',
'fullPage' => true
]);
$html = $page->content();
$browser->close();
return $html;
})->find('h1')->text();
启动可视化 Chrome 浏览器
运行下面代码后会启动一个 Chrome 浏览器。
$text = $ql->chrome(function ($page,$browser) {
$page->goto('https://www.iviewui.com/components/button');
$html = $page->content();
// 这里故意设置一个很长的延长时间,让你可以看到chrome浏览器的启动
sleep(10000000);
$browser->close();
// 返回值一定要是页面的HTML内容
return $html;
},[
'headless' => false, // 启动可视化Chrome浏览器,方便调试
'devtools' => true, // 打开浏览器的开发者工具
])->find('h1')->text();