快速保存当前网页全部图片GetImages.js源代码 – The3gwireless’s Coding Blog – 博客频道 – CSDN.NET

/**//************************************************************************************************/
/**//****                   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].length1);
                
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.length1)==/){
                            imagesArray[i].replace(
../,sUrl);
                        }
else {
                            imagesArray[i].replace(
..,sUrl);
                        }

                    }
else {
                        
if (sUrl.charAt(sUrl.length1)==/){
                            
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 = 
UTF8 //缺省采用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