功能

每天定时截图,并把截到的图片自动通过邮件发送。

说明

代码注释已经非常详细,就不多做说明,需要的朋友自己查看代码即可,主文件Mail.js,截图文件capturePart1.js,capturePart2.js,capturePart3.js,这里只展示了capturePart1.js其他两个类似。值得注意的是有登录权限的网站一定要设置Cookie,需要截取高质量图片的话截取时间一定设置长一些。

Mail.js

/************************************************************************************************************
* 定时发送邮件功能说明:
* node.js必备安装模块:node_modules-->phantomjs,nodemailer,node-schedule,moment
* 涉及JS文件:route-->mail.js,public-->js-->capturePart1.js,capturePart2.js,capturePart3.js
* 截图保存地址:public-->images-->mainPage.jpeg(1600*4200)
* 截图url:http://www.***********.com
* 程序主要思路:
* (1)phantomjs截图-->参照http://phantomjs.org/
* (2)nodemailer发送邮件-->参照https://www.npmjs.com/package/nodemailer
* (3)node-schedule定时-->参照https://www.npmjs.com/package/node-schedule
* 注意:
* 改变发件服务器请修改SMTP
* 改变收件人请修改变量receiver
* 改变邮件内容请修改变量html
* 改变邮件附加图片和附件请修改attachments
* 改变截图功能请修改public-->js-->server.js
* 改变定时功能请修改变量rule
* ------Sweety
***************************************************************************************************************/ //组件引入开始
var schedule = require("node-schedule");
var path = require('path');
var childProcess = require('child_process');
var phantomjs = require('phantomjs');
var nodemailer = require("nodemailer");
var moment = require("moment"); //组件引入结束
/*--------------------------------------------------------------------------------------------------------------------------------------------*/
//变量定义开始
var today; //今天开始时间
var binPath = phantomjs.path; //获取phantomjs.exe路径
var jsPath = process.cwd()+"/public/js/"; //获取server.js所在目录
var childArgs;
//capturePart3();
//capturePart1();
//变量定义结束
/*--------------------------------------------------------------------------------------------------------------------------------------------*/
//主程序开始
var rule = new schedule.RecurrenceRule(); //schedule定时器
rule.hour = 11;
rule.minute = 0;
rule.second = 0; //定时器规则设定(每天11点触发事件)
var j = schedule.scheduleJob(rule, function(){
var now = moment();
today = now.clone().add(-1, 'days').format('YYYY-MM-DD');
capturePart1(); //触发截图事件(邮件发送功能包含在截图事件里边)
});
//主程序结束
/*---------------------------------------------------------------------------------------------------------------------------------------------*/
//phantomjs截图开始(第一张)
function capturePart1(){
childArgs = [
path.join(jsPath, 'serverPart1.js'), //server.js
' https://www.hao123.com ' //要截图的url
];
childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
if(err)
{
console.log(err); //打印错误信息
}else{
console.log("Captured Part1 Successful !!"); //打印正确信息
capturePart2();
}
});
}
//phantomjs截图结束(第一张)
//phantomjs截图开始(第二张)
function capturePart2(){
childArgs = [
path.join(jsPath, 'serverPart2.js'), //server.js路径
'https://www.hao123.com ' //要截图的url
];
childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
if(err)
{
console.log(err); //打印错误信息
}else{
console.log("Captured Part2 Successful !!"); //打印正确信息
capturePart3();
}
});
}
//phantomjs截图结束(第二张)
//phantomjs截图开始(第三张)
function capturePart3(){
childArgs = [
path.join(jsPath, 'serverPart3.js'), //server.js路径
' https://www.hao123.com ' //要截图的url
];
childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
if(err)
{
console.log(err); //打印错误信息
}else{
console.log("Captured Part3 Successful !!"); //打印正确信息
sent(); // 触发发送邮件事件
}
});
}
//phantomjs截图结束(第三张)
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
//nodemailer发送邮件开始
function sent(){
var imgPart1 = fs.readFileSync(process.cwd()+"/public/images/mainPagePart1.jpeg"); //图片来源
var imgPart2 = fs.readFileSync(process.cwd()+"/public/images/mainPagePart2.jpeg"); //图片来源
var imgPart3 = fs.readFileSync(process.cwd()+"/public/images/mainPagePart3.jpeg"); //图片来源
var smtpTransport = nodemailer.createTransport("SMTP",{ //邮件SMTP设定(发送邮箱服务器必须开启SMTP)
host: "smtp.xxxxx.com", // 主机
secureConnection: false, // 不使用 SSL
port: 587, // SMTP 端口
auth: {
user: "xxxxx@xxxx.com", //用户名
pass: "xxxxxx" //密码
}
});
var html = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' +
'XX好:</br>'+
'  下面为【XXXX】日报汇报('+today+')的内容,请参考</br>' +
'  (日报详细信息请点击<a href="#" onclick="changeData();">此处登陆</a>查看)'+
'</br>' +
'<img src="cid:img1" id="img1">'+
'<img src="cid:img2" id="img2">'+
'<img src="cid:img3" id="img3">';//邮件内容(html代码),img唯一指定地址对应cid(见mailOptions设定)
var receiver = "xxx@xxx.com";//收件人列表
var cc = "xxxx@xxxx.com,xxx@xxx.com,xxx@xxxx.com"; //抄送人列表
var bcc = "xxx@xxxx.com,xxx@xxxx.com"; //密抄送人列表
var mailOptions = { //邮件内容选项设定
from: "<xxx@xxxx.com>", //发件地址
//to: "xxx@xxxx.com",
to: receiver, //收件人
cc:cc, //抄送人
bcc:bcc, //密抄送人
subject:"【XXXX】日报汇报("+today+")", //邮件主题
text: "【XXXX】日报汇报("+today+")", // plaintext body
html:html, //html内容
attachments: [
{
filename: 'mainPagePart1.jpeg', //图片名称
contents: imgPart1, //图片来源
cid: 'img1' //插入图片标识
},{
filename: 'mainPagePart2.jpeg', //图片名称
contents: imgPart2, //图片来源
cid: 'img2' //插入图片标识
},{
filename: 'mainPagePart3.jpeg', //图片名称
contents: imgPart3, //图片来源
cid: 'img3' //插入图片标识
}
]
};
smtpTransport.sendMail(mailOptions, function(error, response){//发送邮件
if(error){
console.log(error); //打印错误信息
}else{
console.log("Sent Successful !!"); //打印正确信息
}
});
}
//nodemailer发送邮件结束 function changeData(){ }
/*---------------------------------------------------------------------------------------------------------------------------------------------*/
capturePart1.js //phantomjs截图
var page = require('webpage').create(),
system = require('system'),
address;
page.viewportSize = { width:1920, height: 1080};
page.clipRect = { top: 200, left: 210, width: 1680, height: 1530 };
page.customHeaders={"Cookie":"koa:sess=e*******=;koa:sess.sig=pjadZtLAVtiO6-Haw1vnZZWrRm8"};
if (system.args.length === 1) {
phantom.exit(1);
} else {
address = system.args[1];
page.open(address, function (status) {
});
}
setTimeout(function() {
console.log("");
console.log("### STEP 5: Close page and shutdown (with a delay)");
page.render('./public/images/mainPagePart1.jpeg', {format: 'jpeg', quality: '100'});
page.close();
setTimeout(function(){
phantom.exit();
}, 3000);
}, 19000);

  

Nodejs+定时截图+发送邮件的更多相关文章

  1. Python3.x:定时自动发送邮件

    定时自动发送邮件 一.简述 python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email ...

  2. 如何将炫酷的报表直接截图发送邮件——在Superset 0.37使用Schedule Email功能

    Superset的图表是非常炫酷的,但是原来的版本只能在web端查看,而最新的0.37版本,可以将图表截图直接发送成邮件,非常的方便. 本文将详细介绍Superset 0.37 定时邮件功能.安装过程 ...

  3. 用nodejs做一下发送邮件例子

    var nodemailer = require("nodemailer"); var transport = nodemailer.createTransport("S ...

  4. 使用phantomjs操作DOM并对页面进行截图需要注意的几个问题

    phantomjs是一个无界面浏览器,可用于网页截图和前端自动化测试,基于webkit内核(也就是chrome使用的内核),并使用js编写业务脚本来请求.浏览和操作页面.最近前端监控需要用到phant ...

  5. linux截图工具scrot

    SCROT截图工具 安装命令 sudo apt-get install scrot 截图命令使用说明: 1.抓取整个桌面:    scrot   ~/Pictures/pic1.jpg2.抓取窗口:  ...

  6. 使用phantomjs对页面进行截图

    本文章参考了使用phantomjs操作DOM并对页面进行截图需要注意的几个问题 及 phantomjs使用说明 这两篇文章,初次接触phantomjs的童鞋可以去看下这两篇原文 在学习中可以看下 ph ...

  7. [置顶] Linux下的截图小工具

    Linux下的截图工具scrot 基于命令行 先下载:scrot apt-get install scrot 对该工具的操作: 分为以下几个部分 1.抓取整个桌面 scrot pic.jpg 2.抓取 ...

  8. node.js发送邮件email

    通常我们做node项目时,可能我们会碰到做一个简单的邮件反馈,那么我们今天就来讨论一下,其中遇到的各种坑. 总的来说做这个东西,我们可能需要node第三方依赖模块,来实现我们要达到的效果. 这里我推荐 ...

  9. 通过phantomjs 进行页面截图

    本文章参考了使用phantomjs操作DOM并对页面进行截图需要注意的几个问题 及phantomjs使用说明 这两篇文章,初次接触phantomjs的童鞋可以去看下这两篇原文 在学习中可以看下 pha ...

随机推荐

  1. luogu1984 烧水问题 (找规律)

    为了节省能量,我们会希望一个已经烧开了的水温度越低越好 那么可以得到结论,它要依次去碰当前温度从大到小的水 然后再把温度最高的烧开呗 可是直接模拟会T 稍微写一写大概能找到每次烧开花费能量的一个规律 ...

  2. kafka安装以及入门

    一.安装 下载最新版kafka,Apache Kafka,然后上传到Linux,我这里有三台机器,192.168.127.129,130,131 . 进入上传目录,解压到/usr/local目录下 - ...

  3. JSP+MySQL中文乱码

    问题:JSP页面传输到MySQL数据库时,中文为乱码(数据库中存储乱码). 解决办法: 1.将所有的涉及到编码的都设置为 utf8(utf-8). 设置数据库编码:命令行执行:mysql> sh ...

  4. 2018acm-icpc江苏邀请赛后记

    这场比赛可真难. 不得不说矿大的环境大大出乎了我的意料,无论是校园面积还是基础设施都很好,唯一美中不足的大概是吃了一顿晚饭每个菜都有辣,幸好饭票发的很多,一个人四张饭票,一张饭票可以换3根香蕉,于是我 ...

  5. java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter

    今天想写个随笔,最近经常遇到使用junit的时候报java.lang.NoClassDefFoundError,今天算是恍然大悟了,原来junit虽然在gradle里面配置了,也在Project an ...

  6. P5002 专心OI - 找祖先

    P5002 专心OI - 找祖先 给定一棵有根树(\(n \leq 10000\)),\(M \leq 50000\) 次询问, 求以 \(x\) 为 \(LCA\) 的点对个数 错误日志: 看下面 ...

  7. mac安装神器brew

    安装方法:命令行输入 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ma ...

  8. js jquery获取当前元素的兄弟级 上一个 下一个元素

    原博地址:http://www.jb51.net/article/71782.htm var chils= s.childNodes;  //得到s的全部子节点 var par=s.parentNod ...

  9. Centos6.8-hadoop-2.7.2 64 bit源码编译(伪分布-5大守护进程在本机上)

    1.安装插件 安装jdk/ant/libtool/protobuf/maven/zlib-devel/openssl-devel/ncurses-devel.gcc.snappy.bzip #set ...

  10. WebApi中的参数传递

    在WebApi开发过程中,遇到一些客户端参数格式传输错误,经常被问到参数如何传递的一些问题,因此就用这篇博客做一下总结,肯定其它地方呢也有类似的一些文章,但是我还是喜欢通过这种方式将自己的理解记录下来 ...