Greasy Fork

Greasy Fork is available in English.

网盘自动填写密码【威力加强版】

智能融合网盘密码到网址中,打开网盘链接时不再需要手动复制密码,并自动提交密码,一路畅通无阻。同时记录网盘信息,当你再次打开该分享文件时,不再需要去找提取码,同时可追溯网盘地址的来源。

当前为 2017-12-08 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name 			  网盘自动填写密码【威力加强版】
// @description	智能融合网盘密码到网址中,打开网盘链接时不再需要手动复制密码,并自动提交密码,一路畅通无阻。同时记录网盘信息,当你再次打开该分享文件时,不再需要去找提取码,同时可追溯网盘地址的来源。
// @author			极品小猫
// @namespace   http://greasyfork.icu/zh-CN/users/3128
// @version			3.3.2
// @date			  2015.10.30
// @modified		2017.11.24
// 
// 支持的网盘
// @include			http://pan.baidu.com/s/*
// @include			http://eyun.baidu.com/s/*
// @include     http://*
// @include			https://*
// 
// 白名单
// @exclude			http*://*.pcs.baidu.com/*
// @exclude			http*://*.baidupcs.com/*
// @exclude			http*://*:8666/file/*
// @exclude			http*://*.baidu.com/file/*
// @exclude			http*://index.baidu.com/*
// 
// @exclude			http*://*.gov/*
// @exclude			http*://*.gov.cn/*
// @exclude			http*://*.taobao.com/*
// @exclude			http*://*.tmall.com/*
// @exclude			http*://*.alimama.com/*
// @exclude			http*://*.jd.com/*
// @exclude			http://*.zol.com.cn/*
// @exclude			http://*.ctrip.com/*
// @exclude			https://*.evernote.com/*
// @exclude			https://*.yinxiang.com/*
// @exclude			/^https?://(localhost|10\.|192\.|127\.)/
// @exclude			/https?://www.baidu.com/(?:s|baidu)\?/
// @exclude			http*://www.zhihu.com/question/*/answers/created
// require			http://code.jquery.com/jquery-2.1.4.min.js
// @require			http://cdn.staticfile.org/jquery/2.1.4/jquery.min.js
// @supportURL  http://greasyfork.icu/zh-CN/scripts/29762/feedback
// @icon			  https://eyun.baidu.com/box-static/page-common/images/favicon.ico
// @grant			  unsafeWindow
// @grant      	GM_setValue
// @grant      	GM_getValue
// @grant       GM_deleteValue
// @grant			  GM_listValues
// @grant			  GM_addStyle
// @grant			  GM_xmlhttpRequest
// @grant       GM_notification
// @grant			  GM_registerMenuCommand
// @grant       GM_info
// @noframes
// @encoding		utf-8
// @run-at			document-idle
// @Note 3.3.2 [2017.12.06]\r\n * 1、【修改】信息记录保存的天数修改为365天\r\n * 2、【修正】信息记录载入时,被最新的数据覆盖问题\r\n * 3、【增加】信息记录更新选项
// ==/UserScript==

var urls=location.href;
var hash=location.hash;
var host=location.hostname.replace(/^www\./i,'').toLowerCase();
var paths=location.pathname.toLowerCase();

var newTag=true;				       // 网盘链接添加以新页面打开属性
var msg=false;
unsafeWindow.eve = Event;

MsgFn(GM_listValues());
//管理功能开关 & 设置
var CatPW_Manage_Config, // 管理功能配置,采用 GM_setValue API进行保存,非 localStorage
    StorageSave,         // 信息记录功能,localStorage 记录密码开关
    StorageExp,          // localStorage 记录密码的有效期(天数)
    UpdataConfig={
      UpdataSave:true,             // 再次访问该网盘地址时,更新信息
      UpdataNotify:true,           // 更新该网盘地址时,发出桌面通知
      UpdataPlugin:true,           // 脚本更新后,发出桌面通知
      UpdataVersion:GM_info.script.version  //记录脚本的版本号
    };

if(GM_getValue('CatPW_Manage')=='undefined'||GM_getValue('CatPW_Manage')==undefined) {
  CatPW_Manage_Config={'StorageSave':true,'UpdataConfig':UpdataConfig,'StorageExp':365};
  GM_setValue('CatPW_Manage', CatPW_Manage_Config);
} else {
  CatPW_Manage_Config=GM_getValue('CatPW_Manage');
  if(!CatPW_Manage_Config.UpdataConfig) CatPW_Manage_Config.UpdataConfig=UpdataConfig, GM_setValue('CatPW_Manage', CatPW_Manage_Config);
  if(!CatPW_Manage_Config.UpdataConfig.UpdataVersion) CatPW_Manage_Config.UpdataConfig.UpdataVersion=GM_info.script.version, GM_setValue('CatPW_Manage', CatPW_Manage_Config);
}

StorageSave=CatPW_Manage_Config.StorageSave;
StorageExp=CatPW_Manage_Config.StorageExp;
UpdataConfig=CatPW_Manage_Config.UpdataConfig;

var Cat = {
  changelog : {
    "3.3.2" : {
      "date" : "2017.12.06",
      "info" : "1、【修改】信息记录保存的天数修改为365天\r\n2、【修正】信息记录载入时,被新数据覆盖问题\r\n3、【增加】管理功能加入信息记录更新选项\r\n4、其它BUG修复"
    }
  },
  UpdataPlugin : function(e){
    //插件更新提示
    var v1=CatPW_Manage_Config.UpdataConfig.UpdataVersion, v1arr=v1.split('.');
    var v2=GM_info.script.version, v2arr=v2.split('.');
    for(i=0;i<v2.length;i++){
      if(Number(v2arr[i])>Number(v1arr[i])) {
        GM_notification({
          'text':'本次更新内容(该消息仅提醒一次)'+'\n当期版本:'+v2+'\n更新日期:'+this.changelog[v2]['date']+'\n'+this.changelog[v2]['info'],
          'title':'网盘自动填写密码更新日志提醒',
          'image':'https://eyun.baidu.com/box-static/page-common/images/favicon.ico',
          'timeout': 60
        });
        CatPW_Manage_Config.UpdataConfig.UpdataVersion=v2;
        GM_setValue('CatPW_Manage', CatPW_Manage_Config);
        break;
      }
    }
  },
  init : function(){
    this.UpdataPlugin();//更新提示
  }
};
Cat.init();

var site = {
  'YunDisk':{
    'pan.baidu.com':{
      surl	:	getQueryString('surl')||location.pathname.replace('/s/1',''),
      chk	:	/^[a-z0-9]{4}$/,
      code	:	'.pickpw input, #accessCode',
      btn	:	'.g-button, #submitBtn, #getfileBtn',
      PreProcess: function() {	//已处理

        console.group('===== 百度网盘自动填写密码 Begin =====');
        var CatPW_BaiduPan={
          CatPW_Manage : function(){
            var CatPW_Manage_Menu_Fn = {
              infoFn : function(e){ //信息记录功能
                StorageSave=CatPW_Manage_Config.StorageSave=StorageSave?!confirm('你已开启“信息记录功能”,是否需要关闭?'):confirm('你已关闭“信息记录功能”,是否需要开启?');
                $(this).text(StorageSave?'已开启信息记录功能':'已关闭信息记录功能');
                CatPW_Manage_Menu_Fn.save();
                CatPW_BaiduPan.ShowInfo();
              },
              UpdataConfigFn : {
                UpdataSave : function(e){
                  UpdataConfig.UpdataSave=CatPW_Manage_Config.UpdataConfig.UpdataSave=UpdataConfig.UpdataSave?!confirm('你已开启“信息记录更新功能”,是否需要关闭?'):confirm('你已关闭“信息记录更新功能”,是否需要开启?');
                  $(this).text(UpdataConfig.UpdataSave?'已开启记录更新功能':'已关闭记录更新功能');
                  CatPW_Manage_Menu_Fn.save();
                },
                UpdataNotify : function(e){
                  UpdataConfig.UpdataNotify=CatPW_Manage_Config.UpdataConfig.UpdataNotify=UpdataConfig.UpdataNotify?!confirm('你已开启“信息记录更新桌面通知功能”,是否需要关闭?'):confirm('你已关闭“信息记录更新桌面通知功能”,是否需要开启?');
                  $(this).text(UpdataConfig.UpdataNotify?'已开启更新桌面通知':'已关闭更新桌面通知');
                  CatPW_Manage_Menu_Fn.save();
                },
                UpdataPlugin : function(e){
                  UpdataConfig.UpdataPlugin=CatPW_Manage_Config.UpdataConfig.UpdataPlugin=UpdataConfig.UpdataPlugin?!confirm('你已开启“脚本更新桌面通知功能”,是否需要关闭?'):confirm('你已关闭“脚本更新桌面通知功能”,是否需要开启?');
                  $(this).text(UpdataConfig.UpdataPlugin?'脚本更新桌面通知':'脚本更新不通知');
                  CatPW_Manage_Menu_Fn.save();
                }
              },
              Exp : function(e){
                var _StorageExpTemp;
                do{
                  _StorageExpTemp=prompt("设置信息保存时间(天数):", _StorageExpTemp||StorageExp)||_StorageExpTemp||StorageExp;
                  if(!/^\d+$/.test(_StorageExpTemp)) {
                    alert('所设置的天数不是数字,请重新设置');
                  }
                  else break;
                } while(!/^\d+$/.test(_StorageExpTemp));
                StorageExp=CatPW_Manage_Config.StorageExp=_StorageExpTemp;
                $(this).text('信息保存时间:'+_StorageExpTemp+'天');
                CatPW_Manage_Menu_Fn.save();
              },
              CleanInfo : function(e){
                var _CleanInfo=confirm("如果所记录的信息并没有及时更新,可通过该功能清除记录。");
                if(_CleanInfo) GM_setValue('CatPW', {});
              },
              save : function(){
                GM_setValue('CatPW_Manage', CatPW_Manage_Config);
              }
            };
            var CatPW_Manage_Main=$('<span>').attr({'class':'g-dropdown-button'}).css({'width':'135px'});
            var CatPW_Manage_A=$('<a>').attr({'class':'g-button','data-button-id':'b300','data-button-index':'300','href':'javascript:void(0)'});
            var CatPW_Manage_A_span=$('<span class="g-button-right">');
            var CatPW_Manage_A_span_span=$('<span class="text">').text('密码填写管理');
            var CatPW_Manage_Menu=$('<span class="menu" style="width:auto;z-index:41;">');
            var CatPW_Manage_Menu_infoFn=$('<A class="g-button-menu" href="javascript:void(0);">').text(StorageSave?'已开启信息记录功能':'已关闭信息记录功能').attr({'data-menu-id':'b-menu307'}).click(CatPW_Manage_Menu_Fn.infoFn);
            var CatPW_Manage_Menu_Exp=$('<A class="g-button-menu" href="javascript:void(0);">').text('信息保存时间:'+StorageExp+'天').attr({'data-menu-id':'b-menu308'}).click(CatPW_Manage_Menu_Fn.Exp);
            var CatPW_Manage_Menu_CleanInfo=$('<A class="g-button-menu" href="javascript:void(0);">').text('清除缓存记录信息').attr({'data-menu-id':'b-menu309'}).click(CatPW_Manage_Menu_Fn.CleanInfo);
            var CatPW_Manage_Menu_UpdataSave=$('<A class="g-button-menu" href="javascript:void(0);">').text(UpdataConfig.UpdataSave?'已开启记录更新功能':'已关闭记录更新功能').attr({'data-menu-id':'b-menu310'}).click(CatPW_Manage_Menu_Fn.UpdataConfigFn.UpdataSave);
            var CatPW_Manage_Menu_UpdataNotify=$('<A class="g-button-menu" href="javascript:void(0);">').text(UpdataConfig.UpdataNotify?'已开启更新桌面通知':'已关闭更新桌面通知').attr({'data-menu-id':'b-menu311'}).click(CatPW_Manage_Menu_Fn.UpdataConfigFn.UpdataNotify);
            var CatPW_Manage_Menu_UpdataPlugin=$('<A class="g-button-menu" href="javascript:void(0);">').text(UpdataConfig.UpdataPlugin?'脚本更新桌面通知':'脚本更新不通知').attr({'data-menu-id':'b-menu313'}).click(CatPW_Manage_Menu_Fn.UpdataConfigFn.UpdataPlugin);


            CatPW_Manage_A.append(CatPW_Manage_A_span);
            CatPW_Manage_A_span.append(CatPW_Manage_A_span_span);
            CatPW_Manage_Menu.append(CatPW_Manage_Menu_infoFn, CatPW_Manage_Menu_Exp, CatPW_Manage_Menu_CleanInfo, '<hr>', CatPW_Manage_Menu_UpdataSave, CatPW_Manage_Menu_UpdataNotify, CatPW_Manage_Menu_UpdataPlugin);
            CatPW_Manage_Main.insertBefore('.button-box>.g-button.g-button-blue');

            CatPW_Manage_Main.append(CatPW_Manage_A).append(CatPW_Manage_Menu).hover(function(){
              CatPW_Manage_Main.toggleClass('button-open');
            });
            GM_addStyle('.slide-show-right{width:650px!important;}');
          },
          ShowInfo : function(){
            //显示信息记录
            var CatPW_Info_Display=$('#CatPW_Info').css('display');
            console.log(CatPW_Info_Display);
            if(CatPW_Info_Display) {
              if(CatPW_Info_Display=='none') $('#CatPW_Info').css('display','block');
              else $('#CatPW_Info').css('display','none');
            } else if(StorageSave){
            //插入信息记录
              var CatPW, yunData=unsafeWindow.yunData;
              if(GM_getValue('CatPW')==('undefined'||undefined)) GM_setValue('CatPW',{});	//初始化
              yunData.surl=getQueryString('surl')||location.pathname.replace('/s/1','');
              CatPW=GM_getValue('CatPW');
              CatPW.sCode=(GM_getValue('CatPW').Hash?GM_getValue('CatPW').Hash.replace('#',''):/^#/.test(hash)&&!/^#list\/path=/.test(hash)?hash.match(/^#([^&]+)&?/)[1]:'');		//获取 提取码
              CatPW.surl='Share_'+yunData.surl;                                       //获取 分享文件surl
              CatPW.unPW=decodeURIComponent(CatPW.unPW)||'';
              CatPW.webTitle=decodeURIComponent(CatPW.webTitle);
              CatPW.webSrc=decodeURIComponent(CatPW.webSrc);

              if(!localStorage[CatPW.surl]) { //当不存在记录时,收集信息
                CatPW.ShareUK=yunData.SHARE_UK;			                                    //获取 分享用户ID
                CatPW.ShareID=yunData.SHARE_ID;		                                      //获取 分享文件ID
                StorageDB(CatPW.surl).insert(CatPW);
              }
              else if(UpdataConfig.UpdataSave && localStorage[CatPW.surl] &&//是否已开启网盘信息记录更新,是否存在缓存
                      CatPW.Src.search(StorageDB(CatPW.surl).read().surl.replace('Share_',''))>0) {//从检测缓存中的分享ID是否与记录中的分享ID匹配
                var CatPW_StorageDB=StorageDB(CatPW.surl||yunData.SHARE_ID||getQueryString('shareid')).read();
                if(decodeURIComponent(CatPW.webSrc)!==decodeURIComponent(CatPW_StorageDB.webSrc)) {
                  CatPW_StorageDB.webSrc=decodeURIComponent(CatPW.webSrc);
                  CatPW_StorageDB.webTitle=decodeURIComponent(CatPW.webTitle);
                  StorageDB(CatPW.surl).insert(CatPW_StorageDB);
                  if(UpdataConfig.UpdataNotify) GM_notification({
                    'text':'网盘地址来源与上一次记录不同,记录已更新',
                    'title':'网盘信息记录更新通知',
                    'image':'https://eyun.baidu.com/box-static/page-common/images/favicon.ico',
                    'timeout': 5
                  });
                }
              } else {//直接载入记录
                MsgFn('载入 locatStorage 记录');
                CatPW=StorageDB(CatPW.surl||yunData.SHARE_ID||getQueryString('shareid')).read();
              }

              console.log('分享文件ID:', CatPW.surl, '提取码:', StorageDB(CatPW.surl).find('sCode'));
              MsgFn('已收集的信息:', 'conf:', conf, 'CatPW:', CatPW);

              $(conf.btn).click(function(){	//提交密码时
                CatPW.sCode=!CatPW.sCode?$(CatPW.code).val().trim()!=''?$(CatPW.code).val().trim():CatPW.sCode:CatPW.sCode;
                //如果 localStorage 没有密码,则重新手动记录

                if(!localStorage[CatPW.surl]&&(CatPW.sCode&&($('#tip').css('display')=='none')||$('#tip').text()=='')) {
                  //如果不存在记录时,且没有任何提示信息时,添加新纪录
                  StorageDB(CatPW.surl).insert(CatPW);//插入记录
                  StorageDB('ShareIDexp').add(CatPW.surl,{'date':Dates(),'id':CatPW.surl,'exp':$.now()+StorageExp*24*60*60*1000});		//记录超时时间
                } else if(CatPW.sCode&&$('#tip').css('display')=='none'){
                  StorageDB('ShareIDexp').add(CatPW.surl,{'date':Dates(),'id':CatPW.surl,'exp':$.now()+StorageExp*24*60*60*1000});		//记录超时时间
                } else if($('#tip').text()=='密码错误'){
                  delete localStorage[CatPW.surl];
                  StorageDB('ShareIDexp').delete(CatPW.surl);		//删除超时时间记录
                }
              });

              //当存在解压密码时,插入新纪录
              if(CatPW.unPW&&!localStorage[CatPW.surl]){
                StorageDB(CatPW.surl).insert(CatPW);
                StorageDB('ShareIDexp').add(CatPW.surl,{'date':Dates(),'id':CatPW.surl,'exp':$.now()+StorageExp*24*60*60*1000});		//记录超时时间
              }

              //显示记录的信息
              if('Share_'+yunData.surl==CatPW.surl && localStorage[CatPW.surl]){
                $('<DIV>').attr('id','CatPW_Info').text('提取码:'+CatPW.sCode+'  '+'解压密码:').insertBefore($('.module-share-header'));
                //解压密码
                $('<input>').attr({'id':'unPW','title':'点击复制密码'}).css({'margin':'0 10px','width':'150px','text-align':'center'}).val(CatPW.unPW).click(function(){
                  document.execCommand("SelectAll");document.execCommand("copy");
                }).appendTo($('#CatPW_Info'));
                //来源页面:
                $('<button>').text('删除记录').val('删除记录').click(function(){
                  delete localStorage[CatPW.surl];
                  StorageDB('ShareIDexp').del(CatPW.surl);
                  GM_setValue('CatPW', {});
                  this.disabled=true;
                }).appendTo($('#CatPW_Info'));
                $('<br>').appendTo($('#CatPW_Info'));
                $('<A>').attr({'id':'CatPWsrc','href':CatPW.webSrc,'target':'blank'}).text('网盘来源:'+CatPW.webSrc).appendTo($('#CatPW_Info'));
                GM_addStyle('#CatPW_Info{font-size:14px;border:1px solid #06c;padding:5px;display:block;}');
              }

              StorageDB('ShareIDexp').deleteExpires();
            }
          },
          init : function(){
            this.CatPW_Manage();
            this.ShowInfo();
          }
        };
        CatPW_BaiduPan.init();
        console.groupEnd();
        }
    },
    'eyun.baidu.com': {
      chk:	/^[a-z0-9]{4}$/,
      code:	'.share-access-code',
      btn:	'.g-button-right',
      PreProcess: function() {
        if((hash&&!/sharelink|path/i.test(hash))&&!/enterprise/.test(paths)) {
          location.href=location.href.replace(location.hash,'');
        }
        conf.ShareUK=yunData.SHARE_UK||getQueryString('uk');		//获取 分享用户ID
        conf.ShareID=yunData.SHARE_ID||getQueryString('cid');		//获取 分享文件ID
        conf.sCode=/^#/.test(hash)?hash.match(/^#(\w+)&?/)[1]:StorageDB(conf.ShareID).find('sCode');		//获取 提取码
        $(conf.btn).click(function(){
          if(!localStorage[conf.ShareID]&&conf.sCode) {
            StorageDB(conf.ShareID).insert({'sCode':conf.sCode});
            StorageDB('ShareIDexp').add(conf.ShareID,{'id':conf.ShareID,'exp':$.now()+StorageExp*24*60*60*1000});		//记录超时时间
          }
        });
        StorageDB('ShareIDexp').deleteExpires();
      }
    },
    'weiyun.com': {
      chk: /^[a-z0-9]{4}$/i,
      code: '#outlink_pwd',
      btn:  '#outlink_pwd_ok'
    },
  },
  'pwdRule' : /(?:提取|访问)[码碼]?\s*[:: ]?\s*([a-z\d]{4})/,			//常规密码
  'codeRule' : /(?:(?:提取|访问|密[码碼]|艾|Extracted-code)[码碼]?)\s*[:: ]?\s*([a-z\d]{4})/i,	//其它类型的密码
  //跳转链预处理
  'JumpUrl' : {
    'zhihu.com' :  {
      href: $('A[href*="//link.zhihu.com/?target="]'),
      url:/.*\/\/link\.zhihu\.com\/\?target=/
    },
    'sijihuisuo.club': {
      href: $('.down-tip A[href^="https://www.sijihuisuo.club/go/?url="]'),
      url: 'https://www.sijihuisuo.club/go/?url='
    }
  },
  //密码融合需要特殊支持的网站
  'Support' : {
    'dakashangche.com':{
      path:/\/sj\/\d/,
      callback:function(){
        console.log('特殊支持');
        $('.down-tip>a[href*="du.acgget.com"]').each(function(){
          DownAjax(this.href,'.panel-body',function(e){
            console.log('return',e);
            $(e).appendTo($('#paydown'));
          });
        });
      }
    },
    'meta.appinn.com':{
      path:/\/t\/[^/]+\//i,
      callback:function(){
        new PreHandle.VM();
        $('A[href*="pan.baidu.com"],A[href*="eyun.baidu.com"]').each(function(){
          $(this).data({'url':this.href}).click(function(e){
            location.href=$(this).data('url');
          });
        });
      }
    },
    'madsck.com':{
      path: /\/resource\/\d+/,
      callback:function(){
        var ID=$('.btn-download').data('id');
        $.ajax({
          "url":"http://www.madsck.com/ajax/login/download-link?id="+ID,
          method: "GET",
          dataType: "json",
          success:function(e){
            var res=e.resource;
            $('.btn-download').css('display','none');
            $('<a>').attr({'href':res.resource_link+'#'+res.fetch_code,'target':'blank','class':'btn-download'}).css({'line-height':'60px','text-align':'center','font-size':'24px'}).text('下载').insertBefore('.btn-download');
          }
        });
      }
    },
    'idanmu.co': {
      path : /storage\-download/i,
      callback : function(){
        $('.input-group').each(function(){
          $(this).text($(this).text()+$(this).find('input').val());
        });
      }
    },
    'qiuquan.cc':{
      path:/./,
      callback : function(){
        $('#down>a[href*="pan.baidu.com"]').each(function(){
          if(!this.hash) {
            this.hash=$(this).text().match(/[\((](\w+)[)\)]/i)[1];
          }
        });
      }
    },
    'acg44.com':{
      //search:['page_id','p'],
      path:/download/i,
      callback : function(){
        site['codeRule']=/(?:(?:提取|访问|密[码碼])[码碼]?)\s*[:: ]?\s*([a-z\d]{4}|[^$]+)/i;
        addMutationObserver('#download-container',function(e){
          e.some(function(a){
            for(var i in a.addedNodes){
              var b=a.addedNodes[i];
              if(b.className=='animated fadeIn') {
                var VerCode=$('[id^="downloadPwd"]').val();
                var unZipPW=encodeURIComponent($('[id^="extractPwd"]').val());
                var DownUrl=$('#download-container a.btn').attr('href');
                if(/pan.baidu.com\/share/i.test(DownUrl)){
                  $('#download-container a.btn').attr('href',DownUrl+'&unPW='+unZipPW+'&Src='+encodeURIComponent(urls));
                } else {
                  $('#download-container a.btn').attr('href',DownUrl+'#'+VerCode+'&unPW='+unZipPW+'&Src='+encodeURIComponent(urls));
                }
              }
            }
          });
        });
      }
    },
    'xunyingwang.com':{
      path:/movie/i,
      callback:function(){
        $(window).load(function(){
          $('A[href*="pan.baidu.com"],A[href*="eyun.baidu.com"]').each(function(){
            $(this).attr('href',$(this).attr('href')+'#'+$(this).next("strong").text());
          });
        });
      }
    },
    'huhupan.com':{
      path:/e\/extend\/down/i,
      callback:function(){
        var _Linktmp=$('A[href*="pan.baidu.com"],A[href*="eyun.baidu.com"]');
        var _PWtmp=$('input[id^="bdypas"],input[id^="foo"]');
        for(i=0;i<_Linktmp.length;i++){
          _Linktmp[i].href+="#"+_PWtmp[i].value;
        }
      }
    },
    'blog.reimu.net': {
      path: /archives/i,
      callback: function(){
        site['codeRule']=/(?:(?:提取|访问|密[码碼])[码碼]?)\s*[:: ]?\s*([a-z\d]{4}|8酱)/i;
        console.log(site['codeRule']);
      }
    },
    'reimu.net': {
      path: /archives/i,
      callback: function(){
        site['codeRule']=/(?:(?:提取|访问|密[码碼])[码碼]?)\s*[:: ]?\s*([a-z\d]{4}|8酱)/i;
        console.log(site['codeRule']);
      }
    }
  }
};

var conf = site['YunDisk'][host];											//设置主域名

/* -----===== 生成正则,校验匹配的网盘 Start =====----- */
var HostArr = [];									//生成域名数组
for(var i in site['YunDisk']) HostArr.push(i);					//插入域名对象数组
var HostExp = new RegExp(HostArr.join("|"),'i');	//生成支持网盘的校验的正则

/* -----===== 生成正则,校验匹配的网盘 End =====----- */

/* -----===== 检查是否需要处理跳转链 Start =====----- */

//console.log(site.JumpUrl[host]);
if(site['JumpUrl'][host]){
  console.log(site['JumpUrl'][host]['href']);
  site['JumpUrl'][host]['href'].each(function(){
    console.log(site['JumpUrl'][host]['rep']);
    $(this).attr({'href':decodeURIComponent($(this).attr('href').replace(site['JumpUrl'][host]['url'],'')),'target':'blank'});
  });
}
/* -----===== 检查是否需要处理跳转链 End =====----- */


if(conf&&!/zhidao.baidu.com/i.test(host)){	//网盘页面填密码登录
  // 抓取提取码
  if(conf.PreProcess) conf.PreProcess();		//内容预处理
  //var sCode = hash.slice(1).trim();				//提取码获取
  var sCode =/^#/.test(hash)?hash.match(/^#([^&]+)&?/)[1]:StorageDB('Share_'+conf.surl).find('sCode');		//获取 提取码
  // 调试用,检查是否为合法格式

  if (!sCode) {
    console.log('没有 Key 或格式不对');
  } else {
    console.log ('抓取到的提取码: %s', sCode);
  }

  // 加个小延时
  setTimeout (function () {
    // 键入提取码并单击「提交」按钮,报错不用理。
    var codeBox = $(conf.code),
        btnOk = $(conf.btn);
    if(codeBox.length>0) {		//存在密码框时才进行密码提交操作
      codeBox.val(sCode);		//填写验证码
      if (conf.preSubmit)
        if (conf.preSubmit (codeBox, btnOk))
          return ;
      btnOk.click();
    }
  }, 10);

} else {
  var PreHandle={	//内容预处理
    Text : function(text){	//预处理含解码密码的文本
      text=text?typeof(text)=="string"?text.trim():text.textContent.trim():null;
      text=text?text.replace(/([\[【]?解[压壓]|[压壓][缩縮])密[码碼][\]】]?\s*[:: ]?\s*([a-z\d]{4}|[^\n]+)/ig,''):null;
      return text;
    },
    Code : function(obj){	//
      var text=this.Text(obj);
      if(!text) return;
      //首先尝试使用 提取码|访问码 作为密码匹配的关键字,无效时则使用模糊匹配规则
      var pw=site['pwdRule'].test(text)?text.match(site['pwdRule'])[1]:site['codeRule'].test(text)?text.match(site['codeRule'])[1]:null;
      //console.log(text,pw);
      return pw;
    },
    VM : function(){	//暴力匹配
      var Link=$('A[href*="pan.baidu.com"],A[href*="eyun.baidu.com"]');

      for(i=0;i<Link.length;i++){
        var LinkParent=$(Link[i]).parent();
        var LinkParentHtml=LinkParent.html();
        if(PreHandle.Code(LinkParentHtml)) Link[i].href+='#'+PreHandle.Code(LinkParentHtml);
      }
    }
  };

  //密码融合 特别支持的网站
  var SupportHost=site['Support'][host];
  if(SupportHost&&(SupportHost['path']?SupportHost['path'].test(paths):getQueryString(SupportHost['search']))) {
    SupportHost.callback();
  }
  //监听 A 标签点击事件
  $('body').on('click', 'a', function (e) {
    var target=this, CatPW;

    //如果目标对象为百度企业盘,提升密码匹配范围,以兼容百度企业云
    if(/eyun.baidu.com/i.test(this.href)) {
      site['pwdRule']=/(?:提取|访问)[码碼]?\s*[:: ]?\s*([a-z\d]{4,14})/;
      site['codeRule']=/(?:(?:提取|访问|密[码碼]|Extracted-code)[码碼]?)\s*[:: ]?\s*([a-z\d]{4,14})/i;
    }

    //正则校验超链接匹配的网盘
    //console.log('处理好的文本:'+PreHandle.Text(target.nextSibling));
    //console.log('Code匹配结果',PreHandle.Code(target.parentNode.nextSibling));

    if(HostExp.test(this.href)){
      if(newTag) this.target='blank';		//新页面打开网盘
      //初始化信息记录变量
      CatPW={'date':Dates(),'sCode':'','Src':this.href,'Hash':this.hash,"webSrc":encodeURIComponent(urls),"webTitle":encodeURIComponent(document.title)};
      if(this.hash) return;		//如果超链接已有 hash 则跳过
      console.group(' ===== 网盘自动填写密码 密码融合 =====');
      if(PreHandle.Code(target)){
        console.log('在当前超链接的对象中查找密码');
        target.href+='#'+PreHandle.Code(target);
      } else if(PreHandle.Code(target.nextSibling)){
        console.log('密码在超链接后面的兄弟元素中');
        target.href+='#'+PreHandle.Code(target.nextSibling);
      } else if(PreHandle.Code(target.parentNode)){
        console.log('从父对象中查找密码');
        target.href+='#'+PreHandle.Code(target.parentNode);
      } else {
        var i = 0,
            maxParent = 5,	//向上遍历的层级
            parent = target;
        while(i<maxParent) {
          i++;									//遍历计数
          parent = parent.parentNode;			//取得父对象
          console.log('遍历上级目录查找密码:'+ i,parent);
          if(parent.tagName=="TR") {				//如果父对象是表格,则从表格中提取密码
            if(PreHandle.Code(parent.nextElementSibling)) {
              parent=parent.nextElementSibling;
              console.log('表格中查找密码成功!',parent);
              target.href+='#'+PreHandle.Code(parent);
              break;
            }
          } else if(PreHandle.Code(parent.nextSibling)){
            console.log('向上遍历查找,在超链接后面的兄弟元素中,',parent.nextSibling);
            target.href+='#'+PreHandle.Code(parent.nextSibling);
            break;
          } else if(PreHandle.Code(parent)) {		//否则按照常规方式提取密码
            console.log('向上遍历查找密码成功!');
            target.href+='#'+PreHandle.Code(parent);
            break;
          } else {
            if(maxParent>5) console.log('已超出遍历范围');
          }
          if(parent==document.body) break;								//如果已经遍历到最顶部
        }
      }
      if(this.hash) CatPW.Hash=this.hash;

      if(StorageSave) {
        var unPWArr=[
          /password[:: ]?([^\n]+)/igm,
          /解压[:: ]?(\w+)/gm,
          /【解压密码】\s*[:: ]?\s*([^\n]+)/igm,
          /\[解压密码\]\s*[:: ]?\s*([a-z\d\.:/]+)/igm,		//http://www.itokoo.com/
          /(?:解[压壓]密?[码碼])\s*[:: ]?\s*([a-z\d\.:/]+)/igm,
          /(?:解[压壓]密?[码碼])(?:都?是)?\s*[:: ]?\s*([^\w]+)[^$\r\n]/igm,
          /【?压缩密码】?\s*[:: ]?\s*([^\n]+)/igm
        ];
        for(i=0;i<unPWArr.length;i++) {
          var unPWTemp=unPWArr[i].exec(document.body.textContent);
          if(unPWTemp) {
            //console.log('解压密码提取:',unPWTemp,encodeURIComponent(unPWTemp[1]));
            CatPW.unPW=encodeURIComponent(unPWTemp[1]);
            break;
          }
        }
        GM_setValue('CatPW', CatPW);
        MsgFn('GM_getValue', GM_getValue('CatPW'));
      }
    }
    console.groupEnd();
  });
}

function addMutationObserver(selector, callback, Kill) {
  var watch = document.querySelector(selector);
  //console.log(watch);

  if (!watch) {
    return;
  }
  var observer = new MutationObserver(function(mutations){
    //console.log(mutations);
    var nodeAdded = mutations.some(function(x){ return x.addedNodes.length > 0; });
    if (nodeAdded) {
      callback(mutations);
      if(Kill) {
          console.log('停止'+selector+'的监控');
          observer.disconnect();
      }
    }
  });
  observer.observe(watch, {childList: true, subtree: true});
}

function getQueryString(name,url) {//筛选参数
  url=url?url.match(/[?#].*/).toString():location.search;	//网址传递的参数提取,如果传入了url参数则使用传入的参数,否则使用当前页面的网址参数

  if(Array.isArray(name)){
    for(var i in name){
      var reg = new RegExp("(?:^|&)(" + name[i] + ")=([^&]*)(?:&|$)", "i");		//正则筛选参数
      var str = url.substr(1).match(reg);
      if (str !== null) return unescape(str[2]);
    }
  } else {
    var reg = new RegExp("(?:^|&)(" + name + ")=([^&]*)(?:&|$)", "i");		//正则筛选参数
    var str = url.substr(1).match(reg);
    if (str !== null) return unescape(str[2]);
  }
  return null;
}

function StorageDB(collectionName) {
  //如果没有 集合名,则使用默认 default
  collectionName = collectionName ? collectionName : 'default';
  //创建JSON缓存,如果缓存存在,则转为JSON,否则新建
  var cache = localStorage[collectionName] ? JSON.parse(localStorage[collectionName]) : {};

  return {
    add : function(name, value) {
      cache[name]=value;
      localStorage.setItem(collectionName, JSON.stringify(cache));        //回写 localStorage
    },
    del:function(name) {
      if(name) {
        delete cache[name];
        localStorage.setItem(collectionName, JSON.stringify(cache));        //回写 localStorage
      } else {
        //删除整个 localStorage 数据
        localStorage.removeItem(name);
      }
    },
    insert: function(obj){
      localStorage.setItem(collectionName, JSON.stringify(obj));
    },
    Updata : function(name,obj,value){
      cache[obj]=cache[obj]||{};
      cache[obj][name]=value;
      localStorage.setItem(collectionName, JSON.stringify(cache));        //回写 localStorage
    },
    Query : function(obj,name){
      return cache[obj]?name?(cache[obj][name]?cache[obj][name]:null):cache[obj]:null;
    },
    find : function(name) {
      if(!collectionName) return false;
      return cache[name];
    },
    read : function(){
      console.log(cache);
      return cache;
    },
    deleteExpires : function(now){
      var now=now||$.now();
      for(var i in cache) {
        //console.log(i, collectionName, now, cache[i]['exp'], now>cache[i]['exp']); //删除记录显示
        //console.log(cache[i], localStorage[i]);
        if(now>cache[i]['exp']) {
          delete localStorage[i];     //删除对应分享 ID 的记录
          this.del(i);                //删除时间表中的记录
        }
      }
    }
  };
}

function MsgFn(a, b, c, d, e){
  /*
  var args = Array.prototype.slice.call(arguments, 1);
  console.log(args);
  */
  if(msg) console.log(a, b, c, d, e);
}

function DownAjax(urls,selection,callback){
  GM_xmlhttpRequest({
    method: "GET",
    url: urls,
    onload: function (result) {
      var parsetext = function(text){
        var doc = null;
        try {
          doc = document.implementation.createHTMLDocument("");
          doc.documentElement.innerHTML = text;
          return doc;
        }
        catch (e) {
          alert("parse error");
        }
      };
      var Down;
      var doc = parsetext(result.responseText);
      console.log(doc,$(doc));
      var t = $(doc).find(selection);
      callback(t);
    }
  });
}

function Dates(){
  var sDate=new Date();
  return sDate.getFullYear()+'/'+(sDate.getMonth()+1)+'/'+sDate.getDate();
}