Nodejs+定时截图+发送邮件

功能

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

说明

代码注释已经非常详细,就不多做说明,需要的朋友自己查看代码即可,主文件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: "[email protected]",            //用户名
            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 = "[email protected]";//收件人列表
    var cc = "[email protected],[email protected],[email protected]";    //抄送人列表
    var bcc = "[email protected],[email protected]"; //密抄送人列表
    var mailOptions = {                   //邮件内容选项设定
        from: "<[email protected]>",           //发件地址
        //to: "[email protected]",
        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);

  

时间: 2024-11-07 19:05:16

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

nodejs 定时调用shell脚本来备份数据库和日志文件并发送到邮箱

安装mailx,靠它来发送邮件 yum install mailx 编辑配置文件 vim /etc/mail.rc #添加如下内容 set [email protected] set smtp=smtp.163.com set [email protected] set smtp-auth-password=xxx set smtp-auth=login ---说明 from:对方收到邮件时显示的发件人 smtp:指定第三方发邮件的smtp服务器地址 set smtp-auth-user:第三方

Nodejs使用mailer发送邮件

在实际应用中,有时需要服务器有特点的信息时及时的推送消息给你,而让你有所准备和处理,项目中服务器的个数比较多,所以管理服务器集群也不是很方便,我就是每台服务器上出现异常退出的时候都发送邮件到我的邮箱同时并重新启动Nodejs服务器. 废话不多说,实例上之: 首先,需要安装一个发送邮件的模块: npm install mailer 然后在代码中引入模块: var email = require("mailer"); 最后使用模块发送邮件: email.send( { ssl: true,

Nodejs进程崩溃发送邮件

在项目发布后,nodejs进程遇到不可预测的BUG,崩溃后,我们想通过邮件通知开发人员.方便我们查找问题. 正好有一个插件,用起来很方便,记录在此.插件名字是nodemailer.地址https://github.com/andris9/Nodemailer/. 记录下自己在使用过程中碰到的问题,我经常使用的是QQ邮箱,但是例子里试GMail,那这个nodemailer还支持些什么服务呢. 在nodemailer-wellknown中有介绍.   下面是我的实现代码 //对于异常,发送邮件给特定

用nodejs做一下发送邮件例子

var nodemailer = require("nodemailer"); var transport = nodemailer.createTransport("SMTP", { host: "smtp.qq.com", secureConnection: true, // use SSL port: 465, // port for secure SMTP auth: { user: "[email protected]&quo

nodejs 定时访问网页

/** * Created by Administrator on 2018/2/25 0025. */ var https = require('http'); var schedule = require('node-schedule'); var rule = new schedule.RecurrenceRule(); // rule.second = [0,10,20,30,40,50];//隔十秒 // rule.hour =0;rule.minute =0;rule.second

使用phantomjs对页面进行截图

本文章参考了使用phantomjs操作DOM并对页面进行截图需要注意的几个问题 及 phantomjs使用说明 这两篇文章,初次接触phantomjs的童鞋可以去看下这两篇原文 在学习中可以看下 phantomjs官方相关示例 phantomjs是一个无界面浏览器,可用于网页截图和前端自动化测试,基于webkit内核(也就是chrome使用的内核),并使用js编写业务脚本来请求.浏览和操作页面. 1.安装phantomjs 下载phantomjs(官网下载),选择自己需要的版本下载即可,我这里是

【C#】#102 发送邮件

项目需求:定时的发送邮件,于是学习了如何发送邮件 下面有一个简单的例子.能够实现简单的发送邮件,加上附件可以添加一个属性[Attachment],然后配置上附件的路径 Demo下载 代码总共只有一下这一些,就可以发送邮件. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; namespace SendMail { public c

node.js发送邮件email

通常我们做node项目时,可能我们会碰到做一个简单的邮件反馈,那么我们今天就来讨论一下,其中遇到的各种坑. 总的来说做这个东西,我们可能需要node第三方依赖模块,来实现我们要达到的效果. 这里我推荐两个模块:https://github.com/pingfanren/Nodemailer npm install nodemailer //这个模块不错,github上星也比较多,还经常有维护,但是坑也比较多 另一个,https://github.com/eleith/emailjs npm in

linux截图工具scrot

SCROT截图工具 安装命令 sudo apt-get install scrot 截图命令使用说明: 1.抓取整个桌面:    scrot   ~/Pictures/pic1.jpg2.抓取窗口:    scrot -bs  ~/Pictures/pic1.jpg3.区域截图:    scrot -s  ~/Pictures/pic1.jpg    4.定时截图:    scrot -cd 10  ~/Pictures/pic1.jpg   5.生成缩略图:    scrot -t 70%