油猴脚本以及js爬虫应用

在以往的XmlHttprequest对象中想要跨域请求基本上就是靠jsonp,油猴脚本可以实现自定义网页脚本,但是他同样无法避免的要被CORS阻止。

如何使用 @grant注解 实现使用油猴自带的GM_xmlhttpRequest发送跨域请求?

通常新建一个脚本之后是这样的:
符号 // 不是代表注释

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        url
// @grant        none
// ==/UserScript==
/* jshint -W097 */
'use strict';

// Your code here...

@grant可以使用一些加强函数这些函数都是以GM_开头的。
如果@grant是none的话就只能使用GM_info这个函数了。

之后我们的代码中就可以使用GM_xmlhttpRequest函数了

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.uuuuuu.com/mdeditor
// @grant        GM_xmlhttpRequest
// @grant        GM_download
// ==/UserScript==
/* jshint -W097 */
'use strict';
GM_xmlhttpRequest({
  method: "GET",
  url: "http://www.qq.com/",
  onload: function(response) {
     //这里写处理函数
  }
});

处理这些属性之外还有一些其他的属性:

url - the URL from where the data should be downloaded
name - thefilename - for security reasons the file extension needs to bewhitelisted at the Tampermonkey options page
headers - seeGM_xmlhttpRequest for more details saveAs - boolean value, show asaveAs dialog
onload - function() {} - callback function that iscalled when the download has finished
onerror - function(download) {}
callback function that is called when there was an error

下面给出一个通过js爬取某个网站信息的例子:

jquery 中 ('div','li')表示的是(子,父),即从父节点里寻找子节点,是选择li标签里面所有div标签,而不是找li标签外面的div标签。
比如:

var el = $( '<div></div>' );
el.html(data);
var tda= $("div.content div.header a.name em", el)  ;
var detailUrl = $("div.content div.header a.name ", el)  ;                          

完整例子,只是demo

// ==UserScript==
// @name         爬取
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  爬取
// @author       bob
// @match        https://www.txxxxxx.com/search*
// @requir       https://code.jquery.com/jquery-latest.js
// @require      https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js
// @run-at       document-idle
// @grant        GM_xmlhttpRequest
// ==/UserScript==

 (function () {
      'use strict';
     var $ = $ || window.$;
     function sleep(numberMillis) {
         var now = new Date();
         var exitTime = now.getTime() + numberMillis;
         while (true) {
             now = new Date();
             if (now.getTime() > exitTime)
                 return;
         }
     }
     var enterpriseList = [ ];
     var dataList = [];
     var errorListIds = [];
     //获取企业列表
     GM_xmlhttpRequest({
        method: 'GET',
        url: "http://xxx.xxxxxx.com/yyyyyy/queryEnterpriseList?startID=44633&endID=45000",
        headers: {
                 "Content-Type": "application/json"
             },
        onload: function(response) {
            enterpriseList =  $.parseJSON( response.responseText );
            getData();
        },
    });

     //saveData(data);
     var count = 0;
     function saveData(data){
         GM_xmlhttpRequest({
             method: 'POST',
             data:JSON.stringify(data),
             url: "http://xxx.xxxxx.com/yyyyyy/saveDataList",
             dataType: "json",
             headers: {
                 "Content-Type": "application/json"
             },
             onload: function(response) {
                 
             },
         });
     }

   
     function getData(){
         for(var i=0;i<enterpriseList.length;i++){//
             var one = {};
             var url =  'https://www.uuuuuuuuu.com/search?key='+enterpriseList[i].enterpriseName.replace("(","(").replace(")",')');
             try{
                 var num=Math.floor(Math.random()*10+5);//随机等待几秒
                  sleep(num*1000);
                 $.ajax({url:url,
                         async:false,
                         // timeout:5000,
                         success:function(data){
                             var str = "index_verify?type=companysearch"
                             if(data.indexOf(str) != -1){
                                 i = enterpriseList.length;
                                 console.log('****************************************操作需要验证');
                             }

                             var el = $( '<div></div>' );
                             el.html(data);
                             var tda= $("div.content div.header a.name em", el)  ;
                             var detailUrl = $("div.content div.header a.name ", el)  ;

                             if(tda.length >0 && tda[0].innerText == enterpriseList[i].enterpriseName){
                                 $.ajax({url:detailUrl[0].href,
                                         async:false,
                                         // timeout:5000,
                                         success:function(data){
                                             var el = $( '<div></div>' );
                                             el.html(data);

                                             one.enterpriseName = enterpriseList[i].enterpriseName  ;//公司名称

                                             var tr = $("#_container_baseInfo table.table.-striped-col.-border-top-none tr", el);
                                             if(businessTerm.length>8){
                                                     if(businessTerm.substring(0,3) != '***'){
                                                         one.startTime = businessTerm.substring(0,9)  ;
                                                         if(businessTerm.substr(11) == '无固定期限'){
                                                             one.endTime = '2099-12-31';
                                                         }else{
                                                             one.endTime = businessTerm.substr(11);
                                                         }
                                             }else{
                                                         one.startTime = td[12].innerText.replace(/\s+/g,"").replace(/[\n\r]/g,'')  ;
                                                         if(businessTerm.substr(4) == '无固定期限'){
                                                             one.endTime = '2099-12-31';
                                                         }else{
                                                             one.endTime = businessTerm.substr(4);
                                                         }
                                                     }
                                             }
                                        }, error:function(data){}});
                             }else{
                one.qualificationNo = '--';
                 }
                 dataList.push(one);
                             if(dataList.length == 10){
                                   saveData(dataList);//保存数据
                                   dataList = [];
                                   count += 10;
                                   console.log('已保存数据:'+count);
                              }
                         }, error:function(data){ }});
             }catch(e){
             }
         }
     }
 })();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343