利用puppeteer将html网页生成图片

embedded/2024/10/18 14:16:28/

1.什么是puppeteer

Puppeteer是一个Node库,它提供了一个高级API来通过DevTools协议控制Chromium或Chrome。 可以使用Puppeteer来自动化完成浏览器的操作,官方给出的一些使用场景如下:

  • 生成页面PDF
  • 抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))
  • 自动提交表单,进行 UI 测试,键盘输入等
  • 创建一个时时更新的自动化测试环境,使用最新的JavaScript和浏览器功能直接在最新版本的Chrome中执行测试
  • 捕获网站的timeline trace,用来帮助分析性能问题
  • 测试浏览器扩展

与Selenium比较

说起浏览器自动化操作,很容易联想到另一个自动化框架:Selenium。 但是Puppeteer与Selenium使用的协议却不一样! Puppeteer使用DevTools协议与Chome(或Chromium)进行交互,而Selenium却使用WebDriver协议与浏览器进行交互。 另外,他们各自的API在使用风格上也相差很多。

2.代码工程

实验目的:

实现html生成图片

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springboot-demo</artifactId><groupId>com.et</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>Puppeteer</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency></dependencies>
</project>

controller

package com.et.puppeteer.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;@Controller
public class HelloWorldController  {@RequestMapping(value = "/ftest")public String test(Model model) {model.addAttribute("msg", "use freemarker/  puppeteer to implement html generate image");model.addAttribute("img", "https://img1.baidu.com/it/u=3764156347,3722190225&fm=253&fmt=auto&app=138&f=JPEG?w=440&h=419");return "f01";}}

模版

<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><title>freemarker</title><script src="https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/JsBarcode.all.min.js"></script>
</head>
<body style="font-size: 20px;">
<div style="display: flex;align-items: flex-start;border: 1px solid darkred;box-shadow: 1px 2px 1px 5px #cccccc;"
><div style="display:flex;flex-shrink: 0;width:100px;">words:</div> <h1>${msg}</h1>
</div>
<div style="display: flex;align-items: center;margin: 10px 0px;"><div>image: </div><img style="width: 150px;height: 150px;" src="${img}" />
</div>
<#--<div style="display: flex;align-items: flex-end;">-->
barcode: <svg id="barcode"></svg>
<#--</div>-->
</body>
<#--load js-->
<script>let e = document.getElementById("barcode");JsBarcode(e, "Hi world!");
</script>
</html>

html转图片

安装puppeteer

npm i puppeteer

获取html并生成图片

// index.js
const puppeteer = require('puppeteer');
async function test () {const browser = await puppeteer.launch();const page = await browser.newPage();await page.setViewport({width: 960,height: 760,deviceScaleFactor: 1,});// await page.setContent(imgHTML);await page.goto('http://localhost:8088/ftest');await page.evaluate(() => {let e = document.getElementById("barcode");JsBarcode(e, "Hi world!");});await page.screenshot({path: "./example.png"});await browser.close();
}
test()

To capture a full page, we need to add a fullPage:true option for page.screenshot()

  await page.screenshot({path: 'example.png',fullPage: true});

3.测试

  1. 启动Spring Boot程序
  2. 执行node index.js

<a class=puppeteer" height="924" src="https://img-blog.csdnimg.cn/img_convert/461dc2dc9f6d9036007e4c1d39a9f890.png" width="1200" />

4.引用

  • Take a screenshot with Puppeteer - DEV Community
  • 利用puppeteer将html网页生成图片 | Harries Blog™
  • Puppeteer | Puppeteer

http://www.ppmy.cn/embedded/99356.html

相关文章

redis set(集合)类型

集合中的元素是无序的&#xff0c;集合中的元素是不能重复的 1.set add member [member ...] &#xff1a;向集合中添加元素 返回值&#xff1a;成功添加的元素个数 2.smembers key&#xff1a;获取set中的所有元素 3.sismember key member: 判断一个元素在不在set中&#x…

U盘安装Ubuntu24.04,乌邦图,UltralISO

文章目录 前言通过UltraISO&#xff0c;制作启动U盘下载镜像制作工具UltraISO(软碟通)下载ubuntu镜像文件制作启动U盘 安装ubuntu设置root密码&#xff0c;并登陆root 前言 在Ubuntu作为主流的linux系统&#xff0c;有时候使用VMware安装使用&#xff0c;总归有一定的性能损耗…

JavaScript 保留词

JavaScript 保留词 在 JavaScript 中&#xff0c;您不能把这些保留词作为变量、标记或函数名来使用&#xff1a; abstract arguments await* boolean break byte case catch char class* const continue debugger default delete do double else enum* eva…

创新实践:流媒体服务器如何推动WebRTC支持H.265及JS硬软解码(MSE硬解、WASM软解)

为了实现这一全面的解决方案&#xff0c;我们投入了近半年的时间进行调研与研发。我们的主要目标是&#xff1a;让流媒体服务器能够直接传输H.265编码的视频&#xff0c;而无需将其转码为H.264&#xff0c;从而使Chrome浏览器能够无缝解码并播放H.265视频。 值得注意的是&#…

iPhone照片怎么导入电脑?一键导入毫不费力

随着智能手机的普及&#xff0c;我们越来越依赖手机来记录生活的点点滴滴。iPhone作为其中的佼佼者&#xff0c;其高质量的摄像头为用户捕捉了无数珍贵瞬间。然而&#xff0c;随着照片数量的增多&#xff0c;手机存储空间可能会变得捉襟见肘&#xff0c;此时将照片导入电脑既能…

目标检测(Object Detection)

The essence of object detection is to get category and location through input images. 1、CV 计算机视觉概述 2、Classification of Object Detection 基于深度学习的目标检测算法主要分为两类&#xff1a;Two stage 和 One stage 。 &#xff08;1&#xff09;Tow St…

前端构建工具 webpack与vite对比

一、webpack构建原理 Webpack的构建过程大致为&#xff1a; 1.从入口文件开始分析依赖&#xff0c; 2.递归解析所有依赖模块&#xff0c;生成依赖图&#xff0c; 3.调用Loader转换文件内容&#xff0c; 4.打包所有模块输出优化后的静态资源 。 webpack工作特点&#xff1a; …

鸿蒙(API 12 Beta3版)【使用ImagePacker完成图片编码】图片开发指导

图片编码指将PixelMap编码成不同格式的存档图片&#xff08;当前仅支持打包为JPEG、WebP 和 png 格式&#xff09;&#xff0c;用于后续处理&#xff0c;如保存、传输等。 开发步骤 图片编码进文件流 创建图像编码ImagePacker对象。 // 导入相关模块包 import { image } fr…