功能

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

说明

代码注释已经非常详细,就不多做说明,需要的朋友自己查看代码即可,主文件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. 洛谷 P2345 奶牛集会 解题报告

    P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...

  2. Python中threading的join和setDaemon的区别及用法

    Python多线程编程时经常会用到join()和setDaemon()方法,基本用法如下: join([time]): 等待至线程中止.这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或 ...

  3. hdu3506 Monkey Party (区间dp+四边形不等式优化)

    题意:给n堆石子,每次合并相邻两堆,花费是这两堆的石子个数之和(1和n相邻),求全部合并,最小总花费 若不要求相邻,可以贪心地合并最小的两堆.然而要求相邻就有反例 为了方便,我们可以把n个数再复制一遍 ...

  4. pip常用命令、配置pip源

    1.查找软件 # pip search Package 2.安装软件 # pip install Package # pip install -r requirements.txt 3.更新软件 # ...

  5. JAVA过滤器的使用(Filter)

    request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf ...

  6. css3硬件加速

    你知道我们可以在浏览器中用css开启硬件加速,使GPU (Graphics Processing Unit) 发挥功能,从而提升性能吗? 现在大多数电脑的显卡都支持硬件加速.鉴于此,我们可以发挥GPU ...

  7. hdu 2059龟兔赛跑("01"背包)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题解: 看到这个题,第一反应就是DP,因为对于每个充电站,都有两种选择,充电或不充电,和 ...

  8. 5G时代的到来,会给生活带来什么改变?

    本文首发于:风云社区. 据百度百科介绍,5G网络是第五代移动通信网络,其峰值理论传输速度可达每秒数十Gb,比4G网络的传输速度快数百倍.举例来说,整部超高画质电影可在1秒之内下载完成.   5G网络已 ...

  9. OS + CentOS 7 / centos 7 / config / configuration / rescue / rc.local / yum

    s centos7开启网卡功能 https://blog.csdn.net/nkd50000/article/details/78903479 网卡默认是关闭的,未分配ip地址,解决办法: 1.修改文 ...

  10. src路径问题:./ 与 ../

    ./ :当前目录(相对路径) ../ :当前目录的父目录(相对路径) /:根目录(绝对路径) vue 中 @ 指向 src 文件夹: 在 build 文件夹下 webpack.base.conf.js ...