使用nginx+HTML2canvas将任意html网页转为png图片自定义张数

文章目录

  • 概述
  • 网页的转换
  • html2canvas的使用
      • 导入
        • 导入HTML2canvas库
        • 函数定义
      • nginx部署
      • 编写控制截图网页代码
        • iframe
      • 网页控制代码
    • 测试
    • 说明

概述

  • 本文简述如何使用nginx+html2canvas将任意网页html转为png图片

网页的转换

  1. 如果是本地网页,直接进行nginx反向代理就行
  2. 如果不是本地网页,需要简单利用工具转为本地网页

html2canvas的使用

导入

  1. 导入,不能使用在线的库,只能下载到本地才能导入,因为会有同源限制,否则会报跨域错误。
  2. 下载导入
  • 由于在线使用的方式为:
 <script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>

所以我们只需要点击衔接,把js文件保存到本地即可
衔接为:

> https://html2canvas.hertzen.com/dist/html2canvas.min.js

导入HTML2canvas库
  • 下载完毕后,导入库,我这里放在js目录下
  • 在这里插入图片描述
    网页中引入
<script src="./js/html2canvas.min.js"></script>

在这里插入图片描述

函数定义

在页面中js部分定义函数,实现截图功能

 window.onload = function() {var element = document.body;html2canvas(element, {useCORS: true,}).then(function(canvas) {var link = document.createElement('a');link.href = canvas.toDataURL();link.download = '网页截图.png';link.click();});};

在这里插入图片描述

nginx部署

由于要实现自定义图片张数,并且要实现能够正常访问外部的数据
解决跨域问题
所以需要在nginx中配置可以跨域
比如这个需要截图的网页是index.html
就需要反向代理到nginx中htm也买了中index.html中
并且配置可以跨域

代码为:

    location / {root   html;index  index.html index.htm;add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';}

如图
在这里插入图片描述

这样就实现了反向代理与解决了跨域问题

编写控制截图网页代码

iframe

这里使用iframe引入外部网页,实现控制iframe里面引用的网页就是需要同源,也就是需要解决我们上面提到已经解决到的跨域问题

网页控制代码

<!DOCTYPE html>
<html lang="zh-cn"><head><meta charset="utf-8" /><title>网页转图片</title><style>/* 按钮样式 */.button {background-color: #4CAF50;border: none;color: white;padding: 10px 20px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin: 4px 2px;cursor: pointer;}/* 输入框样式 */.input {padding: 10px;font-size: 16px;border-radius: 5px;border: 1px solid #ccc;transition: border-color 0.3s ease;}/* 输入框容器样式 */.input-container {margin-bottom: 10px;}</style><script>function refreshIframe() {var delayInput = document.getElementById("delayInput");var countInput = document.getElementById("countInput");var delay = parseInt(delayInput.value);var count = parseInt(countInput.value);if (isNaN(delay) || delay <= 0 || isNaN(count) || count <= 0) {alert("请输入大于0的数字!");return;}var iframe = document.getElementById("myIframe");var remainingCount = count;function refresh() {if (remainingCount > 0) {iframe.contentWindow.location.reload();remainingCount--;document.getElementById("remainingCount").innerText = remainingCount;} else {clearInterval(interval);}}var interval = setInterval(refresh, delay * 1000);}</script>
</head><body><div class="input-container"><label for="delayInput">刷新延迟时间(秒):</label><input type="number" id="delayInput" class="input" placeholder="输入刷新延迟时间" /></div><div class="input-container"><label for="countInput">刷新次数:</label><input type="number" id="countInput" class="input" placeholder="输入刷新次数" /></div><button onclick="refreshIframe()" class="button">刷新</button><p>剩余次数: <span id="remainingCount">0</span></p><iframe id="myIframe" src="http://localhost:90" width="100%" height="2500px"></iframe>
</body></html>

###网页控制代码解释说明

  <iframe id="myIframe" src="http://localhost:90" width="100%" height="2500px"></iframe>

引入我们上面的网页要截图的网页,这里需要开启nginx才能截图

网页运行效果为

在这里插入图片描述
由于简化处理,这里的延迟时间需要根据直接的点电脑性能来进行配置

测试

在这里插入图片描述

出现的截图就会出现在下载这里

说明

  1. 用的是chrome浏览器
  2. 要允许浏览器的自动下载,运行下载多个文件等权限
  3. 如果截图不完整需要自己调整或者缩放浏览器的大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/617317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【springboot】sprinMVC练习

Spring MVC练习 1. 加法计算器练习 前端页面&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><t…

Go语言中的同步原语:ErrGroup、Semaphore和SingleFlight

1. 并发基础 并发是同时发生多个计算或事件的能力。并发通常通过同时执行多个任务或进程来实现&#xff0c;这些任务或进程共享相同的资源&#xff08;例如内存或处理器&#xff09;。并发使用的基本机制被称为锁。在Go语言中&#xff0c;锁是一个类型变量&#xff0c;它包含一…

ubuntu nginx安装部署

上传nginx-1.18.0.tar.gz mv nginx-1.18.0.tar.gz /usr/local/ #解压 tar -zxvf nginx-1.18.0.tar.gz #安装 cd nginx-1.18.0 #安装依赖包apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libgeoip-dev openssl libgd…

【开源】基于JAVA+Vue+SpringBoot的医院门诊预约挂号系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…

【目标检测】YOLOv5算法实现(七):模型训练

本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github&#xff0c;删减了源码中部分内容&#xff0c;满足个人科研需求。   本系列文章主要以YOLOv5为例完成算法的实现&#xff0c;后续修改、增加相关模…

2023一带一路暨金砖国家技能发展与技术创新大赛“网络安全”赛项省选拔赛样题卷①

2023金砖国家职业技能竞赛"网络安全" 赛项省赛选拔赛样题 2023金砖国家职业技能竞赛 省赛选拔赛样题第一阶段&#xff1a;职业素养与理论技能项目1. 职业素养项目2. 网络安全项目3. 安全运营 第二阶段&#xff1a;安全运营项目1. 操作系统安全配置与加固任务一Linux …

机器学习和深度学习检测网络安全课题资料:XSS、DNS和DGA、恶意URL、webshell

开源算法 XSS 机器学习识别XSS实践使用深度学习检测XSS使用深度学习检测XSS(续)DNS&DGA检测 使用CNN检测DNS隧道 探秘-基于机器学习的DNS隐蔽隧道检测方法与实现 DNS Tunnel隧道隐蔽

Go语言中的Channel

1. 简介 Channel是Go语言中一种重要的并发原语&#xff0c;它允许goroutine之间安全地交换数据。Channel是一个类型化的队列&#xff0c;它可以存储一个特定类型的值。goroutine可以通过发送和接收操作来向channel中写入和读取数据。 2. Channel的类型 Channel的类型由其元素…

第一次面试复盘

这个秋招到目前为止第一次拿到了面试机会&#xff0c;虽然是小公司&#xff0c;但是人家是有官网的&#xff01;&#xff01;&#xff01;很爱&#xff01;先赶紧复盘一下&#xff0c;因为还有很多笔试没有复盘。 你们的数学建模解决了什么问题&#xff1f;你觉得你们为什么能拿…

CompletableFuture、ListenableFuture高级用列

CompletableFuture 链式 public static void main(String[] args) throws Exception {CompletableFuture<Integer> thenCompose T1().thenCompose(Compress::T2).thenCompose(Compress::T3);Integer result thenCompose.get();System.out.println(result);}// 假设这些…

【Oracle】Oracle编程PLSQL

Oracle编程 一、PL/SQL 1、PL/SQL概述 PL/SQL&#xff08;Procedure Language/SQL&#xff09;是 Oracle 对 sql 语言的过程化扩展&#xff0c;使 SQL 语言具有过程处理能力。 基本语法结构 [declare -- 声明变量 ]begin-- 代码逻辑 [exception-- 异常处理 ]end;2、变量 …

centos7下升级openssh9.4p1及openssl1.1.1v版本

背景&#xff1a;客户服务器扫描出一些漏洞&#xff0c;发现和版本有关&#xff0c;漏洞最高的版本是9.3p2&#xff0c;所以我们安装一个openssh9.4p1版本及openssl1.1.1v版本 虽然我们进行了镜像备份&#xff0c;为了安全先安装telnet以防止升级失败无法通过ssh连接服务器 一…

【会议征稿通知】第二届数字化经济与管理科学国际学术会议(CDEMS 2024)

第二届数字化经济与管理科学国际学术会议&#xff08;CDEMS 2024&#xff09; 2024 2nd International Conference on Digital Economy and Management Science&#xff08;CDEMS 2024&#xff09; 2024年第二届数字经济与管理科学国际会议(CDEMS 2024) 定于2023年4月26-28日…

如何使用统计鸟网站统计分析网站流量来源?

统计鸟官网地址&#xff1a;https://www.tongjiniao.com/ 站长必备&#xff01;网站数据统计&#xff0c;流量监测平台 提供网站数据统计分析、搜索关键词、流量访问来源等服务 深入分析用户点击习惯&#xff0c;为智能化运营网站提供更好的用户体验 目录 一、注册账号信息 二…

基于博弈树的开源五子棋AI教程[3 极大极小搜索]

基于博弈树的开源五子棋AI教程[3 极大极小搜索] 引子极大极小搜索原理alpha-beta剪枝负极大搜索尾记 引子 极大极小搜索是博弈树搜索中最常用的算法&#xff0c;广泛应用于各类零和游戏中&#xff0c;例如象棋&#xff0c;围棋等棋类游戏。算法思想也是合乎人类的思考逻辑的&a…

Flask+ Dependency-injecter+pytest 写测试类

最近在使用这几个在做项目&#xff0c;因为第一次用这个&#xff0c;所以不免有些问题。总结下踩的坑 1.测试类位置 首先测试类约定会放在tests里面&#xff0c;不然有可能发生引入包的问题&#xff0c;会报错某些包找不到。 2. 测试类依赖注入 这里我就用的真实的数据库操作…

Js--数组(三)

1.什么是数组&#xff1f; 数组&#xff1a;(Array)是一种可以按顺序保存数据的数据类型 2.为什么要数组&#xff1f; 思考&#xff1a;如果我想保存一个班里所有同学的姓名怎么办&#xff1f; 场景&#xff1a;如果有多个数据可以用数组保存起来&#xff0c;然后放到一个变量…

MacBook安装Docker

MacBook安装Docker dmg包安装 官方下载dmg安装包: https://docs.docker.com/desktop/mac/install/ 点击安装&#xff0c;然后启动 二进制安装 官方下载二进制包: https://download.docker.com/mac/static/stable/x86_64/ tar -zxvf docker-20.10.0.tgz#将解压出来的docke…

Apppium driver的一些比较重要操作,原生APP和H5 APP(WEBVIEW)

1.reset() //重置app 这时候driver会重置&#xff0c;相当于卸载重装应用。所以本地缓存会失效 driver.reset() 2.start_activity(包名,activity名) //启动app的某一个activity 例如&#xff1a;driver.start_activity("com.wuba.zhuanzhuan","./presentatio…

9个Linux网络命令

这些命令用于监控连接、排除网络故障、路由选择、DNS 查询和接口配置。 1. ping – 向网络主机发送 ICMP ECHO_REQUEST ping 是用于测试网络连接的最流行的网络终端工具。ping 有很多选项&#xff0c;但在大多数情况下&#xff0c;您将使用它来请求域或IP地址&#xff1a; p…