Nodejs爬虫刷csdn访客+桌面自动化框架Robotjs模拟鼠标,键盘,屏幕事件!

叮铃铃!叮铃铃!老师:“小明 你的梦想是什么?”, 沉思了一下 小明:“额额  我想有车有房,自己当老板,媳妇貌美如花,还有一个当官的兄弟” 老师:“北宋有一个人和你一样···”;

哈喽!大家好! 请叫我布莱恩·奥复托·杰森张;

爬虫部分!

一提到爬虫,好多人先想到python 没错就是那个py交易的那个,这货所为是什么都能干 上九天揽月下五洋捉鳖无处不出现它的身影 鄙人对它也是不得不折服,在爬虫这货缺点在于编码格式上还有那些DOM操作他就不是那么得心应手,so 这家伙 就是nodejs依赖着对于前端的粘合性,这货做扒手也是一绝啊!咱们先三八一下它 虽然本人学的也是懵懵懂懂,但是咱毕竟靠吹牛逼起家,就告诉你们我就是吹牛逼,你们看看它爆不爆!  嘿嘿嘿

爬虫大本分是为了获取网络数据,哎 又爱说废话 直接上代码了

var cheerio = require('cheerio');  这个东西呢 可以简单理解为Nodejs里面的JQuery。它包括了 jQuery 核心的子集,Cheerio 从jQuery库中去除了所有 DOM不一致性和浏览器尴尬的部分,揭示了它真正优雅的API。

var superagent = require('superagent'); 这东西简单理解为Node里面的Ajax。superagent 是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于nodejs环境下。

var http = require('http'); Node自带http服务框架;

东西备的差不多了,这个意思大家应该清楚,就是node模拟浏览器发送 ajax在信息中心提取自己想要的东西;介于一般成熟性网站都会做的很是讲究,所以你查找元素也是很简便嘛,一下为部分代码,希望大家理解意思就好,毕竟代码还要自己写,复制黏贴错都找不到!

superagent.get(links).end(function (err, sres) {
          // 常规的错误处理
          if (err) {
            return next(err);
          }
          // sres.text 里面存储着网页的 html 内容,将它传给 cheerio.load 之后
          // 就可以得到一个实现了 jquery 接口的变量,我们习惯性地将它命名为 `$`
          // 剩下就都是 jquery 的内容了
          var $ = cheerio.load(sres.text);
          ans += $(".channel").text() +' 宝贝名称:

';
          $('#J_Title').each(function (index, item) {
            var $item = $(item);
            ans += $item.find(".tb-main-title").text() + '
';
          });
          ans += "链接"+links;

        res.send(ans);         

        // 将内容呈现到页面
        });

这样我们把想要的信息发送到了调用接口的页面; 如果不想这样 我还要复制太麻烦 我想直接要文件,搜嘎  那就要用这个东东 文件流的读写;

            /*var data = '';
            // 创建可读流
            var readerStream = fs.createReadStream('output.txt');
            
            // 设置编码为 utf8。
            readerStream.setEncoding('UTF8');
            
            // 处理流事件 --> data, end, and error
            readerStream.on('data', function(chunk) {
               data += chunk;
            });
            
            readerStream.on('end',function(){
                 // 创建一个可以写入的流,写入到文件 output.txt 中
                var writerStream = fs.createWriteStream('output.txt');
                
                // 使用 utf8 编码写入数据
                writerStream.write(data+ans+'\r\n','UTF8');
                
                // 标记文件末尾
                writerStream.end();
            });
            
            readerStream.on('error', function(err){
               console.log(err.stack);
            });*/

 这里要注意的一点是由于node异步i/o操作,你所执行的事件如果存在先后依赖关系,后面事件要写到回调函数里面;如果我们直接写入那么文件只剩下最后一条,他会把之前数据清空;我这里采用的写入方法是先读取再写入的方法,我也在找有没有啥方法直接续写的 可是没找到··· 不知道大神门都是怎么写滴ha 


说完爬取数据再说访问量的事情就简单啊 我只要模拟浏览器请求页面就可了,鉴于每个网站技术不一样 检测方式也是各种各样 用session啊 用ip啊  用浏览器信息啊 再组合起来 方法无穷,就看人家写网站的把访客量当一回事不了(就好比我之前写的一个东东,请求一个接口就加一个,你刷新页面就ok了嘛 );

拿csdn来说 显然人家没有当回事,so 我这级别都有机可乘,咱们就是图个乐呵,哎 心里高兴 没办法 你咬我啊!

这次 用 http模块就可以了;

var options = {
    url: baseUrl,
    method: 'GET',
    charset: "utf-8",
     headers:{
        'Accept':'application/json, text/javascript, */*; q=0.01',     
        'Content-Type':'text/plain/application/x-www-form-urlencoded; charset=UTF-8',
        'X-Requested-With':'XMLHttpRequest',
        'Set-Cookie': 'ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH',
        'Cookie':'imooc_uuid=fe4eb00a-b08b-4442-a87d-c077f0fa94dc; imooc_isnew_ct=1482112514; loginstate=1; apsid=I3ODRkMzRiY2MzNjZkZDlkNzZkZDk3OGYwNGFkYTEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAyNjA1OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMjE0NDgzNjM5QHFxLmNvbQAAAAAAAAAAAAAAAAAAADhjOTM3MTEyMTVkZDJkODBiZGQ5MGZhYjUxZDk2YTNkADZbWAA2W1g%3DYj; last_login_username=1214483639%40qq.com; PHPSESSID=dlq6ctudtje87erfq523b0dak7; jwplayer.volume=71; IMCDNS=0; Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1482112514,1482372528,1482377953,1482457056; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1482460689; imooc_isnew=2; cvde=585c7fe052b01-26',
        'Server':' Microsoft-IIS/5.0',   
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36'
      }
    //rejectUnauthorized: false   //在请求的时候指定忽略证书验证,即options的rejectUnauthorized参数设置为false
};

var a = parseInt(2000 * Math.random() + 1000);
setInterval(function() {
    var ans = "";
    a = parseInt(2000 * Math.random() + 200);
    http.get(baseUrl, function(response) {
        var body = [];
        //console.log(response.headers); //header
        response.on('data', function(chunk) {
            body.push(chunk);
            //console.log(chunk); //buffer
        });

        response.on('end', function() {
            body = Buffer.concat(body);
            var $ = cheerio.load(body.toString());
            
            ans += $(".article_title").find('a').text();
            ans += $(".link_view").text();


            console.log('博客标题:'+ans + '--调用间隔时间:' + a + '\r\n');
            
        });
    });

}, a);

我之前试过更换ip进行测试 结果 不是用ip检测  这里的意思已经很是明确了吧。在它这种简单判断下,我们模拟浏览器进行访问 对于它需要校验你是不是刚刚访问过的数据是对不上的 我们每次请求新数据值都为空 进行判断一定是不等于 这样它把我们每次都当成一个新访问来处理;

     这里值得一提的就是如果地址为网站为https时 需要加载 https模块  http是会报错的,在没有证书的情况下 请求的时候指定忽略证书验证,即options的rejectUnauthorized参数设置为false;这样就可以了; 啥? https模块不会下载? npm install ***  就ok啦 

需要后面加 -g的是gulp grunt 还有supervisor 这种东西 其他的只要在自己项目里面加载就好 还有grunt自动化下载配置一下全都搞定

 "dependencies": {
    "grunt-contrib-stylus": "^1.0.0",
    "util": "*" },

 想要指定版本就制定 不要就是* 默认最新;Global(阁楼包-全局);来 尽情赞美我吧 ;


Robotjs node桌面自动化框架;

同事用java写了一个自动发消息的小程序,我一看心中甚欢,那我就用node搞一搞吧,这就发现了这个node神器,国内网站穷的连个文档都难找 所以我就在这里给大家发一下;

Node.js桌面自动化。控制鼠标,键盘,读取屏幕。RobotJS支持Mac,Windows和Linux。没啥多说的;(写的我口干舌燥,都不知道晚上吃啥了);

npm install robotjs  没毛病,再说怎么安装都要呕吐了;

鼠标事件 - 写个程序让鼠标满屏幕自己跑 好不好撒;(不会直接拿代码玩);

var robot = require("robotjs");
robot.setMouseDelay(2);

var twoPI = Math.PI * 2.0;
var screenSize = robot.getScreenSize();
var height = (screenSize.height / 2) - 10;
var width = screenSize.width;

for (var x = 0; x < width; x++)
{
    y = height * Math.sin((twoPI * x) / width) + height;
    robot.moveMouse(x, y);

}

键盘事件 -- 比较有意思就是自己写东西;

var robot = require("robotjs");

robot.typeString("Hello World");

robot.keyTap("enter");

自己写东西 再自己回车 那你想一想你把程序跑起来;把鼠标往qq 微信里面一放 嘿嘿

微信就把你屏蔽掉;发送消息过于频繁。。。 so 来个定时器就妥活了;


屏幕事件 -- 这个个人Jude比较无聊 做个吸色器还可以;

var robot = require("robotjs");
var mouse = robot.getMousePos();
var hex = robot.getPixelColor(mouse.x, mouse.y);
console.log("#" + hex + " at x:" + mouse.x + " y:" + mouse.y);

吸取鼠标位置 屏幕颜色;

这个框架 方法还有好多 譬如 robot.mouseClick(); 左击事件 你把鼠标放到哪里让他一直点击·· 有点神经病一样;但是在程序里面配合起来,你会发现 我的天啊(此处想用哪个奥运表情包);


哎 写的鄙人手疼 不知你可知我心;话说回来 为啥没图呢; 好多地方应该有图, 此时因为搞了一个软件把鄙人电脑ip搞乱了;扣扣登录不上去,自然没法截图;

手疼了 不说了 说多了都是眼泪 ;

在北京有些人总是问你们北方人怎么这么怕冷 再次解释一下: 北方的干冷是无力攻击,多穿衣服就可轻松防御;南方湿冷是没法攻击,穿再多衣服都没用,得要抗性!置于 北京 那是中间地带 要双抗;快来复活甲啊@!@;














你可能感兴趣的:(娱乐小程序,robotjs,robotjs,nodejs,爬虫,大话西游,刷访客)