nodejs后端 转 php,PHP+NodeJs后端给网站截图

有些导航站提交网站后会把网站截图并且在详情页会附带网页截图,例如这个 博客大全:blogwe.com

挺好奇怎么实现的,所以了解到了这两个开源项目:Puppeteer 和 PuPHPeteer

注意:需要安装 NodeJs 8+ 的版本

设置 NodeJs 镜像(如果你是第一次安装 NodeJs):npm config set registry https://registry.npm.taobao.org --global

安装 Puppeteer:npm i puppeteer

安装 PuPHPeteer:npm install @nesk/puphpeteer

为了方便实现功能和测试,使用了 Laravel 8 进行安装该项目。

安装 PuPHPeteer:composer require nesk/puphpeteer

在 Laravel 8 安装 PuPHPeteer 后,创建一个控制器:php artisan make:controller ImageController

在路由 web.php 中引入(这是 Laravel 8 的新特性):use App\Http\Controllers\ImageController;

继续在路由写入:Route::get('create_image', [ImageController::class, 'create']);

在控制器引入:use Nesk\Puphpeteer\Puppeteer;

在控制器写入 create 方法后访问测试:public function create()

{

$puppeteer = new Puppeteer;

$browser = $puppeteer->launch();

$page = $browser->newPage();

$page->goto('https://www.bubaijun.com');

$page->screenshot(['path' => 'example.png']);

$browser->close();

}

此时访问的页面是空白的,因为没有 return ,打开 public 目录可以看到有一个 example.png 文件,该文件如下:

watermark

可以看到图片尺寸有点小,可以将 create 方法改成这样:public function create()

{

$puppeteer = new Puppeteer;

$browser = $puppeteer->launch();

$page = $browser->newPage();

$page->setViewport(['width' => 1920, 'height' => 1440]);

$page->goto('https://www.bubaijun.com');

$page->screenshot(['path' => 'example.png']);

$browser->close();

}

也就是在 newPage 方法后可以调用 setViewport 方法进行设置页面大小。

具体的相关文档:https://github.com/puppeteer/puppeteer/blob/main/README.md#usage

https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md#pagesetviewportviewport

以上文档是 NodeJs 的,需要看懂后稍微修改在 PHP 进行调用。

最后说一下,截图所需的时间受影响的因素很多,所以最好放入队列运行。

截图的图片文件还挺大的,截图了一下 1920 * 1440 现在这个博客首页,图片文件是 916K. 可以适当使用一下压缩,博主用工具压缩后只有 344K.

截出来的图:

watermark

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值