实现网站长截图

一、简单手动截图(手动截图,推荐使用,本人亲测成功)

1.开发者程序

  • Chrome 开发者工具中其实自带了截图命令,按下 ⌘Command + ⌥Option + I(Windows 为 F12)快捷键,召唤出调试界面。
  • 随后,按下 ⌘Command + ⇧Shift + P(Windows 为 Ctrl + Shift + P),输入命令 Capture full size screenshot(只输前几个字母就能找到),敲下回车,Chrome 就会自动截取整个网页内容并保存至本地。
  • 除了普通长截图以外,你还可以利用这一功能截取手机版网页长图。只需要按下 ⌘Command + ⇧Shift + M (Windows 为 Ctrl + Shift + M)模拟移动设备,再按刚才的方法运行命令就可以了。在顶部的工具栏中,你可以选择要模拟的设备和分辨率等设置。
  • 如果你想准确截取网页的某一部分,可以按下 ⌘Command + ⇧Shift + C(Windows 为 Ctrl + Shift + C)嗅探元素。选中想要的部分后,再运行 Capture node screenshot 命令,一张完美的选区截图就诞生了。

2.chrome的扩展程序

  • 到chrome的应用商店添加Full Page Screen Capture

二、html2canvas实现对网站长截图(自动截图,推荐使用,本人亲测成功)

import React, { Component } from 'react';
import html2canvas from 'html2canvas'
import "./App.css"
import LeftFoot from "./Left@3x.png"
import RightFoot from "./Right@3x.png"
import purple from "./purple_big@3x.png"
class App extends Component {
  componentDidMount() {
    let shot = document.getElementById('press');
    html2canvas(shot).then(function (canvas) {
      document.body.appendChild(canvas);
      let imgData = canvas.toDataURL('image/png');
      console.log("imgData", imgData);
    });
  }
  render() {
    return (
      <div id="press">
        <img src={LeftFoot} alt="LeftFoot" width="500px" height="auto" />
        <img src={RightFoot} alt="RightFoot" width="500px" height="auto" />
        <img src={purple} alt="purple" width="150px" height="auto" />
      </div>
    );
  }
}
export default App;

三、html2canvas+jsPDF实现,页数多时,会自动分页(截图,推荐使用,本人亲测成功)

import React, { Component } from "react";
import { Button, Icon } from "semantic-ui-react";
import "semantic-ui-css/semantic.min.css";
import "./App.css";
import html2canvas from "html2canvas";
import jsPDF from "jspdf";
class App extends Component {
  constructor(props) {
    super(props);
    this.download = this.download.bind(this);
  }
  download() {
    html2canvas(document.body, {
      useCORS: true,
      allowTaint: false,
      scale: 2
    }).then(function (canvas) {
      var contentWidth = canvas.width;
      var contentHeight = canvas.height;
      //一页pdf显示html页面生成的canvas高度;
      var pageHeight = (contentWidth / 595.28) * 841.89;
      //未生成pdf的html页面高度
      var leftHeight = contentHeight;
      //页面偏移
      var position = 0;
      //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
      var imgWidth = 595.28;
      var imgHeight = (592.28 / contentWidth) * contentHeight;
      var pageData = canvas.toDataURL("image/jpeg", 1.0);
      var pdf = new jsPDF("", "pt", "a4");
      //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
      //当内容未超过pdf一页显示的范围,无需分页
      if (leftHeight < pageHeight) {
        pdf.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight);
      } else {
        while (leftHeight > 0) {
          pdf.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight);
          leftHeight -= pageHeight;
          position -= 841.89;
          //避免添加空白页
          if (leftHeight > 0) {
            pdf.addPage();
          }
        }
      }
      pdf.save("study.pdf");
    });
  }
  render() {
    return (
      <div className="device-detail-container">
        <Button basic onClick={() => this.download()}>
          <Icon name="download" />
          Download Report
        </Button>
        <p>学习下载</p>
      </div>
    );
  }
}
export default App;

四、node实现(这个后台实现,比较复杂,不推荐使用)

  • 下载node.js:https://nodejs.org/en/
  • 找到node安装的目录(跟本章内容无关,仅仅作为一个小知识)
which node

使用command+shift+G,在弹出的目录中填写/usr/local/bin/node就可以了

  • 新建一个目录,将目录拖入到iTerm,在iTerm中执行命令
npm i puppeteer
  • 然后将代码粘贴到新建的test.js内
//开启浏览器模式
const puppeteer = require('puppeteer');
puppeteer.launch({ headless: false,executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'}).then(function (browser)  {
    browser.newPage().then(function (page) {
            page.goto('https://www.baidu.com').then(function(){
                page.screenshot({path: 'test.png',fullPage:true}).then(function (data) {
                    //图片资源  自行处理
                    console.log(data)
                })
            })
    })
});

填自己的谷歌浏览器路径

  • 然后执行node test.js

就能跑起来了

五、还有一种方法(本人没有亲自测试,只是看到,感觉不错)

Nodejs中利用phantom把html转为pdf或图片格式

链接:https://blog.youkuaiyun.com/younglao/article/details/77746039

 

 

 

 

 

 

 

 

 

 

 

--------- shearphoto2.0 增强版升级概况 从shearphoto 1.5直接跳跃到shearphoto 2.0,这是shearphoto重大革新。本来我是想shearphoto 1.6 、1.7、 1.8 慢慢升的,但是这样升级只会让shearphoto慢慢走向灭亡!结果我又辛苦了一个多星期,把shearphoto 2.0升级完成! shearphoto2.0之前,我认为没必要加入HTML5,兼容IE6 7 8就够。但是直到后来!我知道这是我一个错误的决定 因为用户并没有为shearphoto 1.5埋单,原因shearphoto 1.5没有HTML5截取,用户觉得会增加服务器负载!而且又不是本地加载图片!我一个错误的决定!导致用户份额一直没有明显大增。 shearphoto 2.0是收集所有用户的意见开发而成的! 重大的特性就是全面支持HTML5 1:支持translate3d 硬件加速移动 2:加入图片预览功能 3:加入了压缩数码相机图片, 以及HTML5 canvas本地切图,截图 但依然继续支持IE6 7 8 哦!有人问IE6 7 8不兼容HTML5啊,你骗人吗? 先不要急!shearphoto 2.0的机制是这样的:有HTML5则使用HTML5 canvas切图,截图,JS先会截取一张最合理化的截图,然后交给后端,根据用户设置,进行压缩截图 没有HTML5的浏览器则采用先上传再截取的策略,就是原先1.5的策略。 当然有些用户如果不喜欢HTML5,也可以根据接口自行关闭 4:加HTML5图片特效,就一如美图秀秀这样的特效!shearphoto一共提供14种漂亮特效,感谢腾讯AI对图片特效提供支持 shearphoto 2.0增添很多接口,大部份是HTML5的设置!请下载源码体验 shearphoto外忧内患,已经没退路了。在WEB截图界,shearphoto必须要干个第一!.shearphoto不再局限于头像截取,shearphoto更可用于商城的商品图片编辑。 shearphoto含HTML5图片压缩功能!一张十M 二十M的图,照样能帮你压成你要的容量和尺寸, 一般情况下!商城的商品图片都是通过数码相机拍摄后,要用PHOTOshop把数码相机内几十M的图片,压缩,截取,然后才能上传到商城服务器! 这样的操作是不是太麻烦了! 如果你使用shearphoto你就快捷很多了,shearphoto你只需要直接选择图片,就会帮你进行压缩截取,上传,添加到数据库。这样的一条龙服务! shearphoto 2.0的机制是无可挑剔的!但是不排除有BUG存在,如果用户遇到BUG情况,请到论坛 或官方QQ群进行反馈,我会第一时间发布补丁! shearphoto支持PHP和JAVA,JAVA由网友所写,但是JAVA版并不是太完善,使用的是以前的shearphoto1.3!我 一直很想把NET python nodejs JAVA的很完善地做出来! 可惜个人能力有限,如果你喜欢shearphoto,你又会玩 NET python nodejs JAVA,又想为互联网做贡献,那么你可以加入shearphoto团队,把这些后端版本做出来。但shearphoto没有薪水给你! shearphoto免费开源的,没有利润可图,纯粹是抱着为互联网做贡献的心态!如果你跟我一样,请加入到shearphoto后端开发 浏览器支持: 兼容IE 6 及以上的所有浏览器 后端支持: 支持PHP5.X 至 PHP7.0或以上 支持JAVA后端(shearphoto1.3开发) 系统支持: 支持linux WINDOW服务器 shearphoto采用原生JS + 原生PHP所写,绝对不含JQ插件,对JQ情有独忠的,这个插件不合适你 2015 年 9月 5 日 shearphoto作者:明哥先生 版本号:shearphoto2.0 shearphoto官网:www.shearphoto.com shearphoto官方QQ群:461550716
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值