快速保存当前网页全部图片GetImages.js源代码

/************************************************************************************************/
/****                   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("<HTML> "+
                                
"<HEAD> "+
                                
"<TITLE></TITLE> "+
                                
"<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> "+
                                
"</HEAD> "+
                                
"<BODY BGCOLOR="#EAEAEA"> "+
                                
"<form name=loading> "+
                                
"<table border=0 cellpadding=0 cellspacing=0 width="100%" height="100%"> "+
                                
"<tr> "+
                                
"<TD align="center" valign="top"> "+
                                
"<p><FONT color="000000" face="Arial"><BR> "+
                                
"正在保存图片...</FONT></p> "+
                                
"<p><input type=text name=chart size=46 style="font-family:Arial; font-weight:bolder; color:black; background-color:#EAEAEA; padding:0px; border-style:none;"> "+
                                
"<br> "+
                                
"<input type=text name=percent size=46 style="font-family:Arial; color:black; background-color:#EAEAEA;text-align:center; border-width:medium; border-style:none;"> "+
                                
"<script>var bar = 0  "+
                                
"var line = "||"  "+
                                
"var amount ="||"  "+
                                
"count(); "+
                                
"function count(){  "+
                                
"bar= bar+2  "+
                                
"amount =amount + line  "+
                                
"document.loading.chart.value=amount  "+
                            
//    "document.loading.percent.value=bar+"%"  "+
                                "if (bar<99)  "+
                                
"{setTimeout("count()",200);}  "+
                                
"else  "+
                                
"{;} "+
                                
"} "+
                                
"</script></p></TD> "+
                                
"</tr> "+
                                
"</table> "+
                                
"</FORM> "+
                                
" "+
                                
" "+
                                
"</BODY> "+
                                
"</HTML> "
                                );
        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);//使用正则表达式将<img .*?>选中
        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);
}

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值