Greasy Fork

Greasy Fork is available in English.

批量找图脚本正式版

批量找图脚本正式版,已经为批量下载做好了准备

当前为 2016-01-31 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        批量找图脚本正式版
// @namespace   http://greasyfork.icu/users/14059
// @author      setycyas
// @homepage    http://blog.sina.com.cn/u/1365265583
// @description 批量找图脚本正式版,已经为批量下载做好了准备
// @include     http://www.uumt.cc/*
// @include     http://mm.xmeise.com/*
// @include     http://www.mm131.com/*
// @version     1.00
// @grant       GM_registerMenuCommand
// @grant       GM_getValue
// @grant       GM_setValue
// @require     http://code.jquery.com/jquery-2.1.1.min.js
// @run-at      document-end
// @license     MIT
// ==/UserScript==

/****************************************
######## version 20160130_01 #########
脚本主要过程开始,根据图片站点不同,主要修改
global_picReg和global_numReg两个找图地址与
图总数的正则表达式.global_titleReg最好匹配
,错了也能运行
****************************************/

console.log("setycyas的批量找图脚本开始执行!");

//注册菜单
GM_registerMenuCommand('批量找图',mass_FindPic_Normal);
GM_registerMenuCommand('批量找图自动保存',mass_FindPic_AutoSave);
GM_registerMenuCommand('测试本页找图',_CurrentPageTest);

//根据网站不同而修改的变量
var global_picReg //查找图片链接的正则表达式
var global_numReg //查找图片总数的正则表达式
var global_titleReg //查找标题的正则表达式

/*******************************
增加新网站支持就在这里!!!!记得
在开头的include也补上
********************************/
if(window.location.href.match("www.uumt.cc")){
  console.log("该页属于网站 www.uumt.cc");
  global_picReg=/<div class="articleBody">\s{0,1}<p align="center">.*<img[^>]*src="([^>]*jpg)"/;
  global_numReg=/<ul><li><a>共(\d+)图:/;
  global_titleReg=/<div\s+class="articleTitle">\s+<h1>([^\(]*)/
}
if(window.location.href.match("mm.xmeise.com")){
  console.log("该页属于网站 mm.xmeise.com");
  global_picReg=/<div id="big-pic">\s{0,10}.*<img[^>]*src="([^>]*jpg)"/;
  global_numReg=/<ul><a>共(\d+)页/;
  global_titleReg=/<title>([^<\(]*)[<\(]/
}
if(window.location.href.match("www.mm131.com")){
  console.log("该页属于网站 www.mm131.com");
  global_picReg=/<div\sclass="content\-pic">s{0,10}[\s\S]{0,250}<img[^>]*src="([^>]+jpg)"/;
  global_numReg=/<span\sclass="page\-ch">共(\d+)页<\/span>/;
  global_titleReg=/<title>([^<\(]*)[<\(]/
}
/*此网站图太刺激,不明确提供支持
if(window.location.href.match("www.gaoxiaola")){
  console.log("该页属于网站 www.gaoxiaola.com 或 www.gaoxiaola.net");
  global_picReg=/src="([^>]*(gif|jpg|png))"\salt="/;
  global_numReg=/<b>\d+<\/b>\/<b>(\d+)<\/b>/;
  global_titleReg=/<title>([^<\(]*)[<\(]/
}*/

//开始主函数,一般显示模式
function mass_FindPic_Normal(){
  
  //在当前页查找图集的图片总数,修改查找图片总数的方法就改这里的正则表达式
  var mass_PicNum=_GetPicNum(document.getElementsByTagName("body")[0].innerHTML,global_numReg);
  if(mass_PicNum<0){
    alert("在本页找不到图片总数信息");
    return;
  }
  //开始查找,修改从网页中提取图片地址的方法,就改这里的正则表达式
  FindSrcPic(window.location.href,global_picReg,mass_PicNum,global_titleReg,_finishNormal);
  
}

//开始主函数,自动保存模式
function mass_FindPic_AutoSave(){
  
  //在当前页查找图集的图片总数,修改查找图片总数的方法就改这里的正则表达式
  var mass_PicNum=_GetPicNum(document.getElementsByTagName("body")[0].innerHTML,global_numReg);
  if(mass_PicNum<0){
    alert("在本页找不到图片总数信息");
    return;
  }
  //开始查找,修改从网页中提取图片地址的方法,就改这里的正则表达式
  FindSrcPic(window.location.href,global_picReg,mass_PicNum,global_titleReg,_finishAutoSave);
  alert("自动保存成功!标题是: "+_GetTitle(global_titleReg)+'('+mass_PicNum+')');
  
}

/****************************************
############ FindSrcPic_lib ################
######## version = 20160130_02 ############
批量找图代码库
主函数是FindSrcPic
给出例如uumt之类的图片站的图集首地址(形如http://*.html)
自动获取整个图集的所有图片地址并存放于_FindSrcPic_Result中
每次更新_FindSrcPic_Result都会刷新显示结果的文本框的文本
查找结束前,也可以通过立即显示结果菜单先看看找到的图片地址
如果有些请求没返回,会一直处于查找状态,只能刷新页面恢复
未查找状态了,这是目前的一个不足.但是只要参数正确一般没问题
****************************************/

var _FindSrcPic_Result="" //存放找到的图片地址
var _FindSrcPic_ResponNum=0 //已返回或超时的响应数目
var _FindSrcPic_IsRunning=0 //是否运行中,0表示非运行中
var _FindSrcPic_Record="picSrcRecord" //记录已找到的图集链接的数据库名

//添加显示结果的显隐div
var _FindSrcPic_maskDivHtml='<br/><b>交互消息框:</b><br/><br/><textarea id="_FindSrcPic_ResultTextArea"></textarea><br/>'

_FindSrcPic_maskDivHtml+='<input type=button value=Save id="_FindSrcPic_Save"/>&nbsp;&nbsp;&nbsp;<input type=button value=ClearRecord id="_FindSrcPic_Clear"/>'
_FindSrcPic_maskDivHtml+='&nbsp;&nbsp;&nbsp;<input type=button value=ShowRecord id="_FindSrcPic_Show"/><br/>'
AddMaskDiv("_FindSrcPic_ResultDiv",_FindSrcPic_maskDivHtml)
$('#_FindSrcPic_ResultTextArea').css({'width':'70%','height':'70%'});
$('#_FindSrcPic_Save').click(function(){
  var temp=GM_getValue(_FindSrcPic_Record, "")
  temp+=$('#_FindSrcPic_ResultTextArea').val()
  GM_setValue(_FindSrcPic_Record,temp)
  alert("成功将文本框内容加入到记录中!")
})
$('#_FindSrcPic_Clear').click(function(){if(confirm("确定要清空记录吗?")) GM_setValue(_FindSrcPic_Record,"")})
$('#_FindSrcPic_Show').click(function(){$('#_FindSrcPic_ResultTextArea').val(GM_getValue(_FindSrcPic_Record, ""))})

//根据referURL地址(一般传入本页地址),尝试获取图集目录字符串
function _GetDir(referURL){
  var temp3;
  temp3=referURL.match(/(.*)\/[^\/]*/)
  if(temp3){
    return (temp3[1]+'/');
  }else{
    console.log("无法根据地址获取图集目录");
    return ""
  }
}

//根据referURL地址(一般传入本页地址),获取图集页面类型,如果地址只有目录则默认为html
function _GetPageType(referURL){
  var temp0=referURL;
  if(temp0.substr(temp0.length-1,1)=="/"){
    return 'html';
  }
  if(temp0.substr(temp0.length-2,1)=="/"){
    return 'html';
  }
  var temp4;
  temp4=temp0.match(/.*\.([^\.#]*)#{0,1}$/);
  if(temp4){
    return temp4[1];
  }else{
    console.log("无法根据地址获取页面类型");
    return ""
  }
}

//根据referURL地址(一般传入本页地址),获取站点名称类型
function _GetWebName(referURL){
  var temp0=referURL;
  var temp4;
  temp4=temp0.match(/http:\/\/([^\/]+)\//);
  if(temp4){
    return temp4[1];
  }else{
    console.log("无法根据地址获取站点名称");
    return ""
  }
}

//根据referURL地址(一般传入本页地址),尝试获取图集首文件名(不包括扩展名),地址只有目录时默认index
function _GetStartFile(referURL){
  var temp0=referURL;
  if(temp0.substr(temp0.length-1,1)=="/"){
    return "index";
  }
  if(temp0.substr(temp0.length-2,1)=="/"){
    return "index";
  }
  temp4=temp0.match(/([^\/_]+)[\._][^\/]*$/);
  if(temp4){
    return temp4[1];
  }else{
    console.log("无法根据地址获取首文件名");
    return ""
  }
}

//从bodyHTML中,通过picNumReg正则表达式找到图片总数,返回-1表示找不到
function _GetPicNum(bodyHTML,picNumReg){
  
  var temp;
  if(temp=bodyHTML.match(picNumReg)){
    return temp[1]-0;
  }else{
    return -1;
  }
  
}

//从当前页的body的html中,通过titleReg正则表达式找到标题,返回空字符串表示找不到
function _GetTitle(titleReg){
  
  var temp;
  if(temp=document.getElementsByTagName('html')[0].innerHTML.match(titleReg)){
    return temp[1];
  }else{
    return "";
  }
 
}

//找图主函数,referURL是传入的参考url,一般是本页地址,为了增加可重用性运行传参数.失败返回-1,成功返回0.但只要请求发送了就是成功,与回应无关
function FindSrcPic(referURL,picSrcReg,picNum,titleReg,onFinish){
  
  //查看是否查找中
  if(_FindSrcPic_IsRunning>0){
    alert("上次寻找仍进行中,请不要急于重新查找,可尝试先看看已找到的结果");
    return -1
  }
  
  var pageType=_GetPageType(referURL)
  var startFile=_GetStartFile(referURL)
  var dir=_GetDir(referURL)
  var webName=_GetWebName(referURL)
  if(pageType==""){
    alert("无法识别网页文件类型");
    return -1
  }
  if(startFile==""){
    alert("无法判断首文件名");
    return -1
  }
  if(dir==""){
    alert("无法判断图集目录");
    return -1
  }
  if(webName==""){
    alert("无法获取站点名");
    return -1
  }
  
  //开始查找前初始化记录变量
  var tempTitle=_GetTitle(titleReg)
  if(tempTitle==""){
    var tempDate=new Date()
    _FindSrcPic_Result='['+tempDate.getTime()+'('+picNum+')'+']\n';
  }else{
    _FindSrcPic_Result='['+tempTitle+'('+picNum+')'+']\n'
  }
  _FindSrcPic_ResponNum=0;
  _FindSrcPic_IsRunning=1;
  $('#_FindSrcPic_ResultTextArea').val(_FindSrcPic_Result);
  
  //开始遍历发送消息,获取图片链接.遍历地址的形式如需改变就改这里
  console.log("开始批量发送请求");
  for(var i=1;i<picNum+1;i++){
    
    var picURL;
    if(i==1){
      picURL=dir+startFile+"."+pageType
    }else{
      picURL=dir+startFile+"_"+i+"."+pageType
    }
    
    
    $.get(    
     picURL,
     {},     
     function(data) {
      _FindSrcPic_ResponNum++;
       
    var temp2=data.match(picSrcReg);
      if(temp2){       
        if(!temp2[1].match("http:")) 
         temp2[1]="http://"+webName+temp2[1]
       _FindSrcPic_Result+=temp2[1]+"\n";
       $('#_FindSrcPic_ResultTextArea').val(_FindSrcPic_Result);
       console.log("返回一个成功的请求,找到图片: "+temp2[1]);
      }else{
       console.log("返回一个成功的请求,但找不到图片");
      }
      console.log("目前已返回请求数/总请求数 ="+_FindSrcPic_ResponNum+"/"+picNum);
       
      if(_FindSrcPic_ResponNum==picNum){
       onFinish()
      }
     }
    ).fail(function(XMLHttpRequest){
     _FindSrcPic_ResponNum++;
     console.log("返回一个失败的请求");
     console.log("目前已返回请求数/总请求数 ="+_FindSrcPic_ResponNum+"/"+picNum);
       
     if(_FindSrcPic_ResponNum==picNum){
      onFinish()
     }
    });
    console.log("已发送请求: "+picURL);
  }
  
}

//找图完结时,一般显示
function _finishNormal(){
  $('#_FindSrcPic_ResultDiv').css({display:'block'});
  _FindSrcPic_IsRunning=0;
}

//找图完结时,自动保存
function _finishAutoSave(){
  var temp=GM_getValue(_FindSrcPic_Record, "")
  temp+=$('#_FindSrcPic_ResultTextArea').val()
  GM_setValue(_FindSrcPic_Record,temp)
  _FindSrcPic_IsRunning=0
}

//测试本页的找图结果
function _CurrentPageTest(){
  console.log('当前页面找图测试开始')
  console.log('获取图集图片总数= '+_GetPicNum(document.getElementsByTagName("body")[0].innerHTML,global_numReg))
  console.log('获取图集标题= '+_GetTitle(global_titleReg))
  var temp=document.getElementsByTagName("html")[0].innerHTML.match(global_picReg)
  if(temp){
   console.log('获取图片地址= '+temp[1]);
  }else{
   console.log('无法获取图片地址')
  }
  
}
/****************************************
############ MaskDiv_lib ################
####version = 20160129_01 ######
显示覆盖原页面的上层div的库
主函数是AddMaskDiv,添加目标div
除了目标div外,内部html的css,绑定函数等需自行
另外处理
****************************************/

//添加一个隐藏的层,maskDivId为该层的div的Id,maskDivInnerHTML为内部html
//至于css则需要在外部添加.函数只管maskDiv的css,以及额外赠送的一个重新隐藏该层的按钮
//最后注册一个GM菜单用于显示该层
function AddMaskDiv(maskDivId,maskDivInnerHTML){
  
  var htmlAppend='<div id=' + maskDivId +">"+maskDivInnerHTML+"<br/>&nbsp;&nbsp;<input type=button id="+maskDivId+"_return value=Return></input><br /></div>";
  $('body').append(htmlAppend);
  $('#'+maskDivId).css({'position':'fixed','left':'10%','top':'10%','width':'70%','height':'70%','background-color':'#ffffff','z-index':'10001','display':'none','text-align':'center','border':'1px solid #00F'});
  $('#'+maskDivId+'_return').click(function(){$('#'+maskDivId).css({display:'none'});});
  GM_registerMenuCommand('显示'+maskDivId,function(){$('#'+maskDivId).css({display:'block'});});
 
}