Js充分利用截屏的五种方法
发布时间:2025/08/04 12:16 来源:昆山家居装修网
“ Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the DevTools Protocol.
” 看到最右边那个DevTools Protocol了吗?这是个什么过道:
“ The Chrome DevTools Protocol allows for tools to instrument, inspect, debug and profile Chromium, Chrome and other Blink-based browsers.
” 详述的推论可以看这篇博客。
简单来感叹,Puppeteer就是通过WebSocket给IE发送遵循Chrome Devtools Protocol的统计数据,命令IE去执行一些操作。然后,IE再通过WebSocket把结果返回给Puppeteer。这个过程是异步的,所以看源编码不会找到好多async/await。
所以screenshot法则是命令行了Chrome Devtools Protocol的captureScreenshot。
论述:
大力支持WebGL。 首页比较复杂的话,截屏短时间也挺长的,我测试的页两道是几百毫秒。 Puppeteer是对(CDP)Chrome Devtools Protocol功能的芯片。大部分功能都是通过WebSocket传输给CDP处理方式的。SlimerJS
SlimerJS和PhantomJS类似于。不同点是SlimerJS是基于小精灵的IE引擎Gecko,而不是Webkit。
SlimerJS可以通过npm重新安装,最新旧版是1.x。不过兼容的小精灵旧版是53.0到59.0。我看现在小精灵最新旧版都82了。
因为我本机是重新安装了小精灵最新旧版的,所以我还得重新安装一个老旧版的小精灵,比如59.0。可以参考这篇重新安装旧旧版的小精灵IE。我是mac系统,感重新安装还是挺容易的。
实现截屏的编码screenshot.js:
var page = require( webpage ).create();
page.open("", function (status) {
page.viewportSize = { width:1024, height:768 };
page.render( screenshot.png );
});
行驶
// mac操作系统设置小精灵轨迹
export SLIMERJSLAUNCHER=/Applications/Firefox.app/Contents/MacOS/firefox
./node_modules/.bin/slimerjs screenshot.js // 我是局部重新安装的slimer纸制
必需注意到的是SLIMERJSLAUNCHER=/Applications/Firefox.app/Contents/MacOS/firefox启动的是小精灵默认的重新安装轨迹,因为我一开始就有小精灵IE,所以启动的是最新旧版的IE,然后就报错了,感叹不兼容。在前两道我重新安装过一个59旧版的小精灵,那么这个小精灵IE的轨迹是什么?
在应用程序全都我把这个旧旧版的小精灵命名为Firefox59,然后这个轨迹就是/Applications/Firefox59.app/Contents/MacOS/firefox。重新设置SLIMERJSLAUNCHER为59旧版的小精灵IE之后,找到就能事与愿违了。
不过,Puppeteer默认不会推开IE界两道,也就是non-headless来展开。如果要一般来说headless来展开,可以
./node_modules/.bin/slimerjs --headless screenshot.js
不过,headless来展开下,不大力支持WebGL。
我在寄给事例的时候,找到的一个明显的不同就是Puppeteer截屏是异步数组,而SlimerJS截屏是同步数组?好奇心驱使下,看了下程式托(src/modules/slimer-sdk/webpage.js):
render: function(filename, options) {
// ...
let canvas = webpageUtils.getScreenshotCanvas(
browser.contentWindow,
finalOptions.ratio,
finalOptions.onlyViewport, this);
}
canvas.toBlob(function(blob) {
let reader = new browser.contentWindow.FileReader();
reader.end = function() {
content = reader.result;
}
reader.readAsBinaryString(blob);
}, finalOptions.contentType, finalOptions.quality);
// ...
}
webpageUtils.getScreenshotCanvas(src/modules/webpageUtils.jsm):
getScreenshotCanvas : function(window, ratio, onlyViewport, webpage) {
// ...
// create the canvas
let canvas = window.document.NS("", "canvas");
canvas.width = canvasWidth;
canvas.height = canvasHeight;
let ctx = canvas.getContext("2d");
ctx.scale(ratio, ratio);
ctx.drawWindow(window, clip.left, clip.top, clip.width, clip.height, "rgba(0,0,0,0)");
ctx.restore();
return canvas;
}
极为重要编码就是那行ctx.drawWindow。what?JS原生API还大力支持同样截屏?
CanvasRenderingContext2D.drawWindow():只有小精灵大力支持,之前被不复存在掉的非规范表述的规格API。
论述
1.0旧版大力支持的小精灵旧版是53.0到59.0。不保证最新旧版小精灵一般来说。 headless来展开下,不大力支持WebGL。dom-to-image
dom-to-image:前尾端截屏的Apache托。工作法则是:
SVG的foreignObject标签可以纸制裹任意的html内容。那么,为了位图一个数据流,主要展开了以下必需:
操作符地批量原始dom数据流和祖辈数据流; 把原始数据流以及祖辈数据流的外形上操作符的应用到完全相同的批量后的数据流和祖辈数据流上; 字体处理方式; 图片处理方式; 序列化批量后的数据流,把它放入到foreignObject全都,然后一组一个svg,然后分解一个data URL; 如果能比PNG内容或原始像素取值,可以到时一般来说data URL创建人一个图片,一般来说一个离屏canvas位图这张图片,然后从canvas里获取想要的统计数据。测试的时候,找到受控资源不能寄给入,所以简单的认识了后就抛弃了。
html2canvas
html2canvas。网上尤了下感有一篇社论寄给的挺好的:浅析 js 实现首页图片的两种来展开。感兴趣的可以看下。
未验证的猜想
虽然右边这两种是前尾端的实现来展开,但是结合前两道谈的headless托,也是可以实现后尾端截屏的。以Puppeteer的API为例,可以首到时一般来说page.addScriptTag(options)往首页里附加前尾端截屏的托,然后在page.evaluate(pageFunction[, ...args])里的pageFunction数组全都寄给相应的截屏编码就可以了,因为pageFunction的执行上下文是首页上下文,所以可以获取到document等对象。
。上海白癜风医院地址武汉白癜风治疗费用
苏州白癜风医院哪家看的好
成都肿瘤专业医院
天津早泄阳痿治疗哪家好
尿酸偏高的原因
急支糖浆与甘草口服液哪个好
型体塑造
生殖整形
都有哪些中药可以止咳化痰
-
泪目!他倒在泉州抗疫预备队,视频记录最后一刻!
起身,自掏腰包,买不起不不及详细资料,供上司们借鉴学习。日后,养老院一些原先规章税制迅速出台试行,受到了上级主管部门的肯定表扬。 科科长副院长杨文学对许晓东也是赞不绝口, “之前刚到养老
- 2025-08-23Meta电商业务遇阻,未按期在巴西推出缴交功能
- 2025-08-23女孩心血来潮改个网名,爷爷认真查资料后,写信这段话……
- 2025-08-23VR狙击射击游戏「Espire 2」预计11月登陆Meta Quest 2
- 2025-08-23在此之后来了!官方通报“因发朋友圈被开除”事件
- 2025-08-23比亚迪秦EV出行初版上涨0.6万 调整后16.58万元
- 2025-08-23女子发朋友圈“羡慕按时发工资”被辞退,最新进展来了
- 2025-08-23上汽官方宣布 大通MAXUS G90将于4年底29日正式
- 2025-08-23大胆!小偷连夜盗走执法岗亭空调设备
- 2025-08-23奔驰CLA以外配置变为选配 整体车型售价不变
- 2025-08-23VR科幻解谜新游「Red Matter 2」将于夏季截止Meta Quest 2