/**//************************************************************************************************/
/**//**** File: GetImages.js ****/
/**//**** Version: 1.0.1 ****/
/**//**** Description: ****/
/**//**** Save all pictures in current web page to a specified local folder ****/
/**//**** Author: the3gwireless ****/
/**//**** URL: www.the3gwireless.com ****/
/**//**** Last Update: 2007.7.16 ****/
/**//**** Q/A or Bug Report: sam4it@gmail.com ****/
/**//**** 注:转载请标明出处 ****/
/**//************************************************************************************************/
//主程序开始
var sDestFolder = “C:/Users/Sam/Pictures/pic/“; //图片将被保存到的本地目录,用户可以自己修改
var SILENT = false; //true 表示安静模式,整个程序在后台运行,在保存图片过程中不会有状态条和消息提示
CheckLocalFolder(sDestFolder); //判断即将保存图片的本地目录是否存在,如果不存在,则建立此目录
var sSrcUrl = GetUrl(); //获得当前浏览器地址栏里的网址
//WScript.Echo(sSrcUrl);
if (sSrcUrl == null) …{
WScript.Echo(“获取当前网页地址失败,请重试。“);
WScript.Quit();
}
var count=0;
var errors=0;
var imagesArray = GetImagesUrl(sSrcUrl); //获得指定网址里所有的图片地址
if (imagesArray==null) …{
WScript.Echo(“未知错误!不能从当前的网页下载图片。“);
if (!SILENT)…{
CloseGauge();
}
WScript.Quit();
}
for (i=0;i<imagesArray.length;i++)…{
var imageUrl;
var imageLocal = imagesArray[i].substring(imagesArray[i].lastIndexOf(“/“)+1);
if (imageLocal.indexOf(“?“)>0)…{ //有些网站在图片名后边跟了一些无用的东西,用”?”分割,这里将这些东东清理掉
imageLocal = imageLocal.substring(0,imageLocal.indexOf(“?“));
}
imageUrl = imagesArray[i];
//WScript.Echo(imageUrl);
var result = GetImageFile(sDestFolder,imageUrl,TimeStamp()+“_“+imageLocal); //保存图片,并在文件名上打上时间戳,便于以后归档整理,同时也避免重名情况
if (result) count++;
}
if (!SILENT)…{
CloseGauge();
WScript.Echo(“抓图结束,一共抓了“+count+“张图,“+errors+“张图出错!“);
}
//主程序结束
//===============================================================================
//Function Name: CloseGauge
//Description: 关闭非安静模式下弹出的IE状态条
//Parameter(s): 无
//Return: 无
//===============================================================================
function CloseGauge() …{
oShell=new ActiveXObject(“WScript.Shell“);
oShell.AppActivate(“http:// – about:blank – Microsoft Internet Explorer“);//激活状态条窗口为当前窗口
oShell.SendKeys(“%{F4}“); //发送系统按键 Alt+F4 关闭当前激活窗口
}
//===============================================================================
//Function Name: GetUrl
//Description: 获取当前浏览器地址栏网页URL
//Parameter(s): 无
//Return: null 表示失败
//===============================================================================
function GetUrl()…{
var oIE;
var oShell;
var url;
try …{
oShell=new ActiveXObject(“WScript.Shell“);
WScript.sleep(300);
oShell.SendKeys(“{F6}“);//发送系统按键F6,激活浏览器地址栏,幸运的是FireFox等其他浏览器也支持此操作
oShell.SendKeys(“^c“); //发送系统按键Ctrl+C,这个地球人都知道是做什么的
oIE = new ActiveXObject(“InternetExplorer.Application“); // 创建 Internet Explorer application 对象.
oIE.navigate(“about:blank“); // 创建空文本
oIE.left=50; // 弹出窗口位置
oIE.top = 100; // 弹出窗口位置
oIE.height = 150;
oIE.width = 450;
oIE.menubar = 0; // 不显示菜单
oIE.toolbar = 0; // 不显示工具栏
oIE.statusbar = 0; // 不显示状态栏
if (SILENT) …{
oIE.Visible = false;
} else …{
oIE.Visible = true; // 如果是非安静模式,将此窗口显示
}
while (oIE.Busy) …{;} // 非常重要: 一直等待到oIE对象准备好.
obj = oIE.document.parentWindow.clipboardData;
url = oIE.document.parentWindow.clipboardData.getData(“text“); //将地址栏的内容从剪贴板里取出来
if (!SILENT) …{
//以下代码创建一个假的进度条,不是本程序的重点,关于如何创建一个真的进度条,我还没有想好,如有时间,可能会在以后的版本中更新,欢迎网友讨论。
oIE.document.write(“ “+
“ “+
“
“ “+
“ “+
“ “+
““+
“
“+
“
“+
“
“+ “+ “
“正在保存图片…
“
“
“+ “ “+
“
“
“
“ “+
“ “+
“ “+
“ “+
“ “
);
oShell.AppActivate(“Internet Explorer“);
}
} catch (e)…{
WScript.Echo(“出现异常: “ + e+“ “ + “描述: “ + e.description+“ “);
}
if (SILENT) …{
oIE.Quit();
}
//WScript.Echo(url);
return url;
}
//===============================================================================
//Function Name: GetImageFile
//Description: 将指定网址的图片保存到本地目录中
//Parameter(s): argDestFolder 本地目录
// argSrcUrl 图像的URL
// argImageFile 本地文件名
//Return: true 表示成功,false 表示失败
//===============================================================================
function GetImageFile(argDestFolder,argSrcUrl,argImageFile)…{
var index=true;
var oHTTP = false;
try …{
oHTTP = new XMLHttpRequest();
} catch (trymicrosoft) …{
try …{
oHTTP = new ActiveXObject(“Msxml2.XMLHTTP“);
} catch (othermicrosoft) …{
try …{
oHTTP = new ActiveXObject(“Microsoft.XMLHTTP“);
} catch (failed) …{
oHTTP = false;
}
}
}
if (!oHTTP)…{
WScript.Echo(“初始化XMLHttpRequest对象出错!“);
WScript.Quit();
}
try…{
oHTTP.open(“GET“, argSrcUrl, false);
oHTTP.send();
if (oHTTP.status != 200) …{
//WScript.Echo(“未知状态: ” + oHTTP.status + ” 原因:”+ oHTTP.statusText);
errors++;
index = false;
}
if (index)…{
var oStream = new ActiveXObject(“adodb.stream“);
var adTypeBinary = 1;
var adSaveCreateOverWrite = 2;
oStream.type = adTypeBinary;
oStream.open();
oStream.write(oHTTP.responseBody);
//WScript.Echo(argDestFolder+argImageFile);
oStream.savetofile(argDestFolder+argImageFile,adSaveCreateOverWrite);
oStream = null;
oHTTP = null;
return index;
} else …{
return index;
}
}catch (e)…{
return false;
}
}
//===============================================================================
//Function Name: GetImagesUrl
//Description: 将指定网址包含的所有图像信息保存在数据里并返回
//Parameter(s): argSrcUrl 指定的URL
//Return: null 表示失败
//===============================================================================
function GetImagesUrl(sSrcUrl)…{
var index=true;
var oHTTP = false;
try …{
oHTTP = new XMLHttpRequest();
} catch (trymicrosoft) …{
try …{
oHTTP = new ActiveXObject(“Msxml2.XMLHTTP“);
} catch (othermicrosoft) …{
try …{
oHTTP = new ActiveXObject(“Microsoft.XMLHTTP“);
} catch (failed) …{
oHTTP = false;
}
}
}
if (!oHTTP)…{
WScript.Echo(“初始化XMLHttpRequest对象出错!“);
index = false;
}
oHTTP.open(“GET“, sSrcUrl, false);
oHTTP.send();
if (oHTTP.status != 200) …{
WScript.Echo(“未知状态: “ + oHTTP.status + “ 原因:“+ oHTTP.statusText);
index = false;
}
if (index)…{
//WScript.Echo(oHTTP.responseBody);
//WScript.Echo(oHTTP.responseText);
//WScript.Echo(oHTTP.responseXML);
var charset = CharSetDetector(oHTTP.responseText); //获得当前使用的字符集
var oText = BytesToBSTR(oHTTP.Responsebody,charset); //将Raw数据根据制定字符集编码后返回正确的HTML网页内容
var sUrls = sSrcUrl.match(/(http://.*?/)/i);
var sUrl;//将网站的URL解析出来,以后使用
if (sUrls!=null)…{
sUrl = sUrls[1];
}else …{
sUrl = sSrcUrl;
}
var imagesArray = oText.match(/<img .*?>/ig);//使用正则表达式将
选中
if (imagesArray!=null)…{
for (i=0;i<imagesArray.length;i++)…{
imagesArray[i] = imagesArray[i].substring(imagesArray[i].indexOf(“src=“)+4,imagesArray[i].length–1);
var tmp = imagesArray[i].indexOf(“ “);
if (tmp >0) …{
imagesArray[i] = imagesArray[i].substring(0,tmp);
}
//WScript.Echo(imagesArray[i]);
imagesArray[i] = imagesArray[i].replace(/“/g,“”);
imagesArray[i] = imagesArray[i].replace(/’/g,“”);
//以下开始整理图片的路径,这里考虑到了相对路径和绝对路径等各种情况,很可能还不完全,网友可以自己补充
if (imagesArray[i].indexOf(“http://“)==0){
//标准的路径,什么也不做
}else…{
if (imagesArray[i].indexOf(“../“)==0)…{
if (sUrl.charAt(sUrl.length–1)==“/“)…{
imagesArray[i].replace(“../“,sUrl);
}else …{
imagesArray[i].replace(“..“,sUrl);
}
}else …{
if (sUrl.charAt(sUrl.length–1)==“/“)…{
if (imagesArray[i].charAt(0)!=“/“)…{
imagesArray[i] = sUrl+imagesArray[i];
} else …{
imagesArray[i] = sUrl + imagesArray[i].substring(1);
}
}
else …{
if (imagesArray[i].charAt(0)!=“/“)…{
imagesArray[i] = sUrl+“/“+imagesArray[i];
} else …{
imagesArray[i] = sUrl + imagesArray[i];
}
}
}
}//整理图片路径结束
}
}
oHTTP = null;
return imagesArray;
} else …{
return null;
}
}
//===============================================================================
//Function Name: BytesToBSTR
//Description: 将Raw数据根据制定字符集编码后返回正确的HTML网页内容
//Parameter(s): body 二进制数据,charset 字符集
//Return: null 编码后的HTML网页内容
//===============================================================================
function BytesToBSTR(body,charset)…{
var objstream;
objstream = new ActiveXObject(“adodb.stream“);
objstream.Type = 1;
objstream.Mode = 3;
objstream.Open();
objstream.Write(body);
objstream.Position = 0;
objstream.Type = 2;
objstream.Charset = charset;
var bytesToBSTR = objstream.Readtext;
objstream.Close;
return(bytesToBSTR);
}
//===============================================================================
//Function Name: CharSetDetector
//Description: 根据HTML网页内容判断该网页使用的字符集
//Parameter(s): oText HTML网页内容
//Return: 使用的字符集
//===============================================================================
function CharSetDetector(oText)…{
var charset;
//自动判断编码开始
var charSets = oText.match(/charset=(S+)“/i);
if (charSets != null){
charset = charSets[1];
}else{
charset = “UTF–8“ //缺省采用UTF-8编码
}
//自动判断编码结束
return charset;
}
//===============================================================================
//Function Name: CheckLocalFolder
//Description: 判断即将保存图片的本地目录是否存在,如果不存在,则建立此目录
//Parameter(s): sDestFolder 本地目录
//Return: 无
//===============================================================================
function CheckLocalFolder(sDestFolder){
var fso = new ActiveXObject(“Scripting.FileSystemObject“);
if (!fso.FolderExists(sDestFolder)){
fso.CreateFolder(sDestFolder);
if (!SILENT){
WScript.Echo(“图片将被存放在“+sDestFolder+“中。“);
}
}
else {
fso = null;
}
}
//===============================================================================
//Function Name: TimeStamp
//Description: 返回当前系统的时间戳
//Parameter(s): 无
//Return: 当前系统时间戳
//===============================================================================
function TimeStamp(){
var date = “”;
var timestamp = “”;
date = new Date();
var month = date.getMonth() + 1;
var day = date.getDate() + 1;
var hours = date.getHours() ;
var minutes = date.getMinutes() ;
var seconds = date.getSeconds() ;
timestamp += date.getYear();
if (month < 10){
timestamp += “0“ + month;
}else{
timestamp += month;
}
if (day < 10){
timestamp += “0“ + day;
}else{
timestamp += day;
}
if (hours < 10){
timestamp+=“0“+hours ;
}else{
timestamp += hours;
}
if (minutes < 10){
timestamp+=“0“+minutes;
}else{
timestamp += minutes;
}
if (seconds< 10){
timestamp+=“0“+seconds;
}else{
timestamp += seconds;
}
return(timestamp);
}
来源URL:http://blog.csdn.net/the3gwireless/article/details/1750281