后端使用phantomjs对页面进行截图

最近碰到这样一些需求,后端需要对某个图表页面进行动态截图,将截图通过邮件发送到指定邮箱进行每日提醒。

这就需要用到无界浏览器进行此类操作。常见的无界浏览器有以下几种,知识来源于chatgpt3.5:

Headless Chrome - Google Chrome 浏览器的一个无界面版本,支持大部分 Chrome 浏览器的特性和 API。Puppeteer - 使用 Node.js 调用 Headless Chrome 进行自动化测试的高级库,提供了便捷的 API,可以方便地控制 Chrome 浏览器的各种行为。SlimerJS - 基于 Gecko 引擎的无头浏览器,可以用来模拟用户行为,渲染 Javascript 应用。Splash - 一款基于 Python 的,专门用于爬虫和自动化测试的浏览器。它使用 WebKit 渲染引擎,并且有一个强大的 Lua API,可以很方便地控制浏览器的行为。HtmlUnit - 一款 Java 的 Open-Source 的无界面浏览器,以模拟浏览器的方式来执行 HTML、CSS、JavaScript 代码,适用于自动化测试。PhantomJS - 一个基于 WebKit 渲染引擎的无界面、使用 JavaScript 脚本编写的脚本able浏览器。它支持大部分的 Web 标准,包括 CSS, DOM, SVG, Canvas 和 XMLHttpRequest 等,能够在不需要 GUI 界面的情况下进行页面渲染和脚本执行。

本文基于PhantomJS ,介绍如何使用后台截图功能。PS:PhantomJS 的开发由 PhantomJS 社区组织负责,采用了 BSD 许可证。因为其长期未更新,而且有一些安全漏洞,官方已经于 2020 年停止了对 PhantomJS 的开发和维护,并建议用户转移到其他无头浏览器或使用 Pupeteer 来代替之。

一、下载安装phantomjs

Download PhantomJS

选择适用的执行环境,下载二进制包。

二、编写截图脚本

function screenshot(url, save_name) {var page = require('webpage').create();page.viewportSize = {width: 1280, height: 1024};page.onAlert = page.onPrompt = page.onConfirm = page.onError = function () {};page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36';page.settings.resourceTimeout = 1000*15;var cnt = 0;page.onNavigationRequested = function (url2, type, willNavigate, main) {cnt += 1;if (main && url2 !== url && cnt < 7) {page.close();setTimeout(function () {screenshot(url2, save_name)}, 100);}};page.open(url, function (status) {//console.debug(status);if (status === "success") {return window.setTimeout(pageRender, 100);} else {return window.setTimeout(pageRender, 100);}});window.setTimeout(pageRender, 60*1.2*1000);function pageRender() {page.evaluate(function () {document.body.bgColor = 'white';});page.clipRect = {top: 0,left: 0,width: 1280,height: 1024};page.render(save_name, {format: 'jpeg', quality: '100'});phantom.exit(0);}}function main() {var system = require('system');var p_url = new RegExp('-u=(.*)');var p_save_name = new RegExp('-s=(.*)');for (var i = 0; i < system.args.length; i++) {if (p_url.test(system.args[i]) === true) {var url = p_url.exec(system.args[i])[1];}if (p_save_name.test(system.args[i]) === true) {var save_name = p_save_name.exec(system.args[i])[1];}}if (typeof(url) === 'undefined' || url.length == 0 || typeof(save_name) === 'undefined' || save_name.length == 0) {console.log("Usage: phantomjs screenshot.js -u=http://swww.baidu.com/ -s=baidu.jpg ");phantom.exit(1);}screenshot(url, save_name)
}main();

需要注意的是,截图如需要截完整的话,有两种方式:

1.设置哟个固定的大的viewPortSize值:page.viewportSize = {width: 1280, height: 1024};  

2.通过BOM方法操作滚动条,可以把滚动条滚动到一个很大的值:window.scrollTo(0,10000);

笔记中使用第一个方式进行操作。

三、执行命令行截图

phantomjs --ignore-ssl-errors true --ssl-protocol any --ssl-ciphers ALL screenshot.js -u=https://www.baidu.com -s=1.png

phantomjs会自动截图,并保存文件:

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

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

相关文章

chatgpt赋能python:Python画图空白的解决方法

Python画图空白的解决方法 Python作为一种高效、简洁的编程语言&#xff0c;被广泛应用于数据分析、机器学习、图像处理等领域。其中&#xff0c;常用的Python画图库有matplotlib、seaborn、plotly等。但是&#xff0c;有时候我们会遇到一个奇怪的问题&#xff0c;就是在画图时…

复旦大学郁喆隽:网络制造出人的“幻象”,深度思考如何可能?

“人是什么?”这是亘古以来人们反复追问的一个古老命题。从元宇宙到ChatGPT&#xff0c;这个人人都在讨论、理解和实践互联网的时代&#xff0c;对“人”的自我定义和认知产生了哪些影响&#xff1f;    在3月12日复旦大学-华盛顿大学EMBA项目主办的“复调艺文沙龙”上&am…

用AI智能(DALL.E2)搞一个Logo和绘制坤坤的脚

浅谈ChatGPT和DALL.E2 ChatGPT 最近有个叫chatgpt的玩意老火了&#xff0c;不仅在科技圈刮起一阵骚乱&#xff0c;同时在金融圈也闹的沸沸扬扬&#xff0c;很多板块个股纷纷水涨船高 chatgpt是美国人工智能研究所实验室OpenAi开发的一种全新的聊天机器人模型&#xff0c;当然我…

微软 AI 华人先驱黄学东正式宣布离职,将加入 Zoom 担任 CTO

微软华人 AI 版图上一块不可或缺的拼图&#xff0c;现在也离开了。 作者 | 郭思 编辑 | 陈彩娴 雷峰网独家获悉&#xff0c;微软 AI 华人先驱黄学东近日在社交媒体正式宣布从微软离职&#xff0c;将加入 Zoom 担任 CTO。 上世纪六十年代出生的黄学东是与变化共生、在变化中成长…

马斯克怒了:我要起诉微软!

鱼羊 发自 凹非寺量子位 | 公众号 QbitAI OpenAI还没撕完&#xff0c;马斯克又跟微软杠上了&#xff0c;甚至直接在推特上放话&#xff1a; 我要告微软&#xff01; 这又是发生了甚么&#xff1f; 原因无它&#xff1a;微软刚刚“封杀”了推特。公告显示&#xff0c;从4月25日&…

生成式AI的价值与机遇,这家云服务商给出了详细解答

从2022年末一直到2023年上半年&#xff0c;许多人亲眼见证了ChatGPT的风靡全球&#xff0c;以及生成式AI与大语言模型的大爆发。 那么对于广大用户来说&#xff0c;生成式AI究竟意味着怎样的机遇&#xff1f;数据在生成式AI应用中扮演着怎样的角色&#xff1f;如何解锁生成式AI…

Mac版R语言入门(三)数据的导入

R语言&#xff08;三&#xff09;数据的导入&#xff0c;包括以下几个部分的内容&#xff1a; R语言问题讨论交流&#xff0c;欢迎关注我的新浪微博&#xff1a;Jenny爱学习 1.数据类型介绍 2.数据导入 3.抓取网络数据 一.数据类型 1&#xff09;Excel、Spreadsheet数据&…

R语言学习笔记——统计结果保存到本地文件(word、txt、csv)

1. 保存为word或txt文件 sink&#xff08;&#xff09;&#xff1a;在代码开始前&#xff1a;sink(“输出文件名.txt”)&#xff0c;将结果全部输出到工作文件夹下的名为 "输出文件名.txt" 的文档。这时在R控制台的输出窗口中看不到输出结果&#xff0c;代码结束时用…

R/ggplot2保存图片中文字体至PDF——showtext包一文清除所有障碍

R/ggplot2保存图片中文字体至PDF——showtext包一文清除所有障碍 文章概要1.问题描述2.Showtext包使用流程全注释2.1案例介绍——导入线上的谷歌字体2.2实例测试——导入本地字体&#xff0c;以宋体、新罗马为例 3拓展-新罗马与Serif的不同4.showtextggsave保存图片字体大小设置…

Rstudio读取csv文件

读取csv文件老是失败&#xff0c;就一直在社区找方法&#xff0c;结合了多篇文章&#xff0c;终于成功&#xff0c;我谢 错误类型&#xff1a; 1、Error in file(file, "rt", encoding fileEncoding) : cannot open the connection In addition: Warning message…

利用R处理PDF文件

pdftools pdftools是一个专门用来处理pdf文件的包 pdftools pdf_text() pdf_text()#将pdf每页返回成(return)成一个character vector. > #举个例子 > a <- pdf_text("41375_2012_BFleu2012127_MOESM29_ESM.pdf") > #查看pdf页数 > length(a) [1] 2…

R语言NetCDF格式数据的读写

常用函数&#xff1a; nc_open 打开.nc文档 nc_close 关闭.nc文档 nc_create 新建.nc文档 ncvar_get 读取变量数据 ncatt_get 读取变量属性 ncvar_def 设定变量 ncdim_def 设定维度 ncvar_add 添加变量 ncvar_put 写入变量数据 ncatt_put 写入变量属性 一、读取.nc格…

R语言中的导出为pdf文件或txt文件的注意事项

最近看了下R语言的书&#xff0c;练练手发现一些问题 比如保存图像为pdf文件&#xff0c;我一开始老是显示文件为不含页面&#xff0c;后来才想清楚其中的道理 首先输入 pdf("mypdf.pdf") 然后用source执行一段脚本 source("script2.R") 如果你前面没…

chatgpt赋能Python-pythonmean

Pythonmean: 为什么它是新时代最炙手可热的框架&#xff1f; 什么是Pythonmean&#xff1f; Pythonmean是一个全平台支持的JavaScript全栈框架&#xff0c;其核心框架是AngularJS、Node.js、Express.js和MongoDB的组合。Pythonmean提供了一个快速、统一、易于维护的开发框架&…

chatgpt赋能Python-pythonmul

Pythonmul——让Python更加高效的优化工具 Python是一种被广泛应用于数据分析、科学计算、人工智能等各个领域的高级编程语言。由于其简单易学、灵活多样的编程风格以及庞大的社区支持&#xff0c;Python成为了许多开发者的首选语言。但是&#xff0c;Python在执行某些操作时可…

chatgpt赋能python:Python如何删除列表中的重复数据

Python如何删除列表中的重复数据 介绍 Python是一种高级编程语言&#xff0c;可用于开发各种类型的应用程序&#xff0c;包括网站&#xff0c;桌面应用程序&#xff0c;数据分析和机器学习。在Python编程中&#xff0c;经常需要对列表中的数据进行操作。有时候&#xff0c;我…

chatgpt赋能python:使用Python快速提取重复元素的方法

使用Python快速提取重复元素的方法 当我们处理数据集时&#xff0c;经常需要排重操作&#xff0c;以保证数据的准确性和完整性。而Python作为一种常用的编程语言&#xff0c;具有处理数据的优势和快速性&#xff0c;今天我们将介绍使用Python快速提取重复元素的方法。 什么是…

chatgpt赋能python:Python中如何去掉重复项

Python中如何去掉重复项 在Python的编程中&#xff0c;常常会遇到需要去掉重复项的情况。重复项的存在会极大地影响程序的效率和准确性。在本篇文章中&#xff0c;我们将讨论Python中如何去掉重复项&#xff0c;包括使用set()函数、使用列表推导式和使用字典的方法。这些方法都…

chatgpt赋能python:Python一直重复执行怎么写

Python一直重复执行怎么写 如果你用过Python&#xff0c;你可能知道它是一种用于编写Web应用程序&#xff0c;自动化脚本和大数据分析的多功能编程语言。然而&#xff0c;当你编写这些应用程序时&#xff0c;你可能需要重复执行某些代码块。在这篇文章中&#xff0c;我们将探讨…