美文网首页
用爬虫+钉钉机器人来简化工作

用爬虫+钉钉机器人来简化工作

作者: 凌霄光 | 来源:发表于2018-09-21 21:02 被阅读660次

我们开发的项目为了安全,密码都是临时生成的,需要老师登陆网站获取,每次登陆挺麻烦的,我觉得这个过程可以自动化去做。

需要做的事情有自动登陆,自动获取密码,也可以自动发到钉钉群里。

自动登陆因为有图形验证码在,不是很好做,所以我换了一种方式,登录后获取cookie保存下来,通过定时的请求来刷新session和cookie生效时间,只要保证一定频率的请求就永远不会失效。

自动获取密码有对应的接口,剩下的就是自动发到钉钉群里了,其实这个也简单,钉钉群有机器人,可以通过一个webhook来发送消息给机器人,机器人发到群里,还可以@某些人,支持markdown,链接,文字等。

详情见: https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.45484a97s4tZLA&treeId=257&articleId=105735&docType=1

接下来工作很明了,使用axios发请求,使用cheerio解析dom,然后通过webhook来吧密码转发到群里。同时为了保证cookie的有效性,会定时刷新,机器人最多一分钟20条消息,我把时间间隔定在了10秒。

还有一个问题是临时密码的有效期是24小时,我本来想找到生成密码的接口,一旦获取不到,就刷新,然后在获取。但是生成密码的接口没找到,就暂时只做到了这样,可以获取,如果失效了再手动去生成下。以后会考虑优化。

代码24小时跑在服务器上。

代码如下(保密数据隐藏了):

const axios = require('axios');
const chalk = require('chalk');
const cheerio = require('cheerio');


const http = axios.create({
    baseURL: 'http://xxx/',
    headers: {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Connection': 'keep-alive',
        'Cookie': "td_cookie=18446744073516097524; cloudwise_client_id=36e51b13-36ec-2435-92bf-cc43b54dd8a3; CAKEPHP=ktejrvcf56cf7e8m114j14g4q3; CW_Start=1537522907731",
        'Host': 'xxx.com',
        'Referer': 'http://xxx',
        'Upgrade-Insecure-Requests': 1,
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
     }
});

const httpGet = (url) => {
    return new Promise((resolve, reject) => {
        http.get(url).then((res) => {
            console.log(chalk.green('res:'), res.status);
            resolve(res.data);
        }).catch((...args) => {
            reject(...args);
        });
    })
}

const httpPost = (url, data) => {
    return new Promise((resolve, reject) => {
        http.post(url, data).then((res) => {
            console.log(chalk.green('res:'), res.status);
            resolve(res.data);
        }).catch((...args) => {
            reject(...args);
        });
    })
}

const queryTempPassword = () => httpGet('/getPasssSuccess');

const generateTempPassword = () => httpPost('/randomPassword', {
    send: '生成临时密码'
});

const sendMessageToRobot = (msg) => {
    axios({
        url:'https://oapi.dingtalk.com/robot/send?access_token=XXXXX',
        method: 'post',
        data: {
            "msgtype": "text",
            "text": {
                "content": msg
            }
        }
    }).then((res) =>{
        console.log(res.data);
    })
}

setInterval(() => {
    queryTempPassword().then((data) => {
        const $ = cheerio.load(data);
        console.log('临时密码:' + $('#resText').text());
        sendMessageToRobot("临时密码:" + $('#resText').text());
    }).catch((err) => {
        console.log(chalk.red(err));
    });
},10000,0);

相关文章

  • 用爬虫+钉钉机器人来简化工作

    我们开发的项目为了安全,密码都是临时生成的,需要老师登陆网站获取,每次登陆挺麻烦的,我觉得这个过程可以自动化去做。...

  • nodejs通过钉钉群机器人推送消息

    nodejs 通过钉钉群机器人推送消息 Intro 最近在用 nodejs 写爬虫,之前的 nodejs 爬虫代码...

  • 钉钉机器人工具类

    工作经常用到钉钉的机器人通知,写了几次机器人的工具类,不过忘记记录了,要重新写有点麻烦,这里把钉钉机器人的工具代码...

  • jenkins 集成钉钉机器人通知

    公司使用钉钉做为公司内部的通讯工具,所以想通过Jenkins发布完成以后通过钉钉来通知大家,研究发现钉钉提供机器人...

  • 周报(好未来第四周)

    本周工作 埋点的优化,简化api和封装埋点指令 定时抓取临时密码发给钉钉机器人,同步到群里 的小工具 动态换肤的方...

  • bugly异常消息推送钉钉——内网穿透技术

    bugly的异常信息要推送到钉钉,不能直接推送到钉钉机器人,因为bugly推送到json格式跟钉钉机器人能接收的格...

  • jenkins集成钉钉机器人

    jenkins邮件通知不能及时的收到,所以采用了钉钉机器人 下载钉钉客户端,创建交流群并成为群主 创建钉钉机器人 ...

  • 钉钉机器人消息Python封装(开源)

    一、钉钉自定义机器人介绍 钉钉机器人是钉钉群的一个高级扩展功能,但使用起来却非常简单,只需要注册一个钉钉账号,就可...

  • GitLab-代码审核

    设置钉钉 GitLab 机器人 打开钉钉,在需要配置 GitLab 机器人的群中,点击【群设置】→【智能群助手】→...

  • 钉钉自定义机器人发送消息到钉钉群

    当需要将系统的一些预警等信息推送到钉钉群时,我们可以通过开启自定义机器人来通过API接口推送钉钉消息。 钉钉开放平...

网友评论

      本文标题:用爬虫+钉钉机器人来简化工作

      本文链接:https://www.haomeiwen.com/subject/vdiznftx.html