前言

首先感谢EF社区提供的测试平台。这次是博主使用nodejs进行爬虫登陆操作的一次记录。之前博主就在想node不可能没有爬虫支持吧。研究研究果然有,这里咱们使用的是request模块进行网络请求,使用方法和ajax差不多。下面列出本次教程中使用到的模块及下载地址吧:request网络请求模块querystring模块用户提交参数编码cheerio用于html解析
这次咱们不多说了,直接上代码吧。这里使用了博主封装的HttpHelper模块,其实就是对request的提交参数ua等做了处理。
本次代码地址:代码下载

代码

require('./util/TimeHelper');
let hi = require('./util/HttpHelper');
let cheerio = require('cheerio');

let user = {
    name: '登陆账户',
    pwd: '密码自己填写',
    cookie: null
};

//回复方法
function postMessage(id) {
    let info = "帖子ID" + id + ",来自易支烟的NodeJs水贴 https://blog.1zyan.cn " + new Date().format('yyyy-MM-dd hh:mm:ss');
    hi.Ajax({
        url: "https://www.fechat.ink/comments/create",
        method: "POST",
        form: {
            topics_id: id,
            content: info
        },
        headers: {
            Cookie: user.cookie
        }
    }).then((obj) => {
        //水贴成功重定向页面
        if (obj.statusCode === 302) {
            console.log('水贴成功:' + id);
        } else {
            console.error('水贴失败:' + id);
        }
    });
}
//取帖子列表
function GetIds(){
    //获取帖子列表
    for (let page=1;page<=3;page++){
        hi.Ajax({
            url:"https://www.fechat.ink/?nodeId=&tags=&pages="+page
        }).then((res)=>{
            let $ = cheerio.load(res.body);
            let lis=$(".list_item .info a");
            for (let i=0;i<lis.length;i++){
                //获取帖子ID
                let id=$(lis[i]).attr('href').match(/(?<=\/)([\d]+)/)[0];
                //水贴
                postMessage(id);
            }
        });
    }
}
hi.Ajax({
    url: "https://www.fechat.ink/sign/signIn",
    form: {
        email: user.name,
        password: user.pwd
    },
    headers: {
        "user-agent": `Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36`,
        "content-type": "application/x-www-form-urlencoded",
        "origin": "https://www.fechat.ink",
        "referer": "https://www.fechat.ink/login"
    },
    method: "POST"
}).then((obj) => {
    if (obj.body.includes('登录FE')) {
        //解析html得到信息
        let $ = cheerio.load(obj.body);
        console.log($(".uk-alert-warning p").text());
    } else if (obj.statusCode === 302) {
        //保存cookie
        user.cookie = obj.headers['set-cookie'];
        console.log('登陆成功');
        return obj;
    } else {
        console.log(obj.body);
    }
}).then(() => {
    //开始水贴
    GetIds();
});

标签: node

添加新评论