2013年10月18日 星期五

如何用 WSH 抓取網頁

我在清大張智興老師的書 "Javascript 程式設計與應用" 裡找到如何用 WSH 抓取網頁的方法. 這需要用到 Inet Controls 物件, Windows 系統預設是沒有的, 要依下列方式安裝 :
  1. 下載 InetCtls.Inet 元件 : http://activex.microsoft.com/controls/vb6/msinet.cab
  2. 雙擊 msinet.cab 解壓縮後, 得到 msinet.inf 與 msinet.ocx, 請將此兩檔複製到 C:\Windows\system32\ 下.
  3. 打開 DOS 視窗, 進入 C:\Windows\system32\, 點擊 msinet.ocx 執行安裝即可.
抓取網頁的 Javascript 程式範例 :

var inet=new ActivXObject("InetCtls.Inet"); //產生 Inet Controls 物件
inet.Url="http://www.google.com.tw"; //指定欲抓取的網頁
inet.RequestTimeOut=60; //設定抓取計時器為 60 秒
WScript.Echo("正在下載 " + inet.Url + " 中 ... ");
var page=inet.OpenURL(); //下載網頁
WScript.Echo(page);

書上說, 此元件無法偵測網路斷線情況, 因此當網路斷線時就會 Time out, 而程式卻無法察知. 如果要能偵測網路斷線情況, 則須用 IIS 內建的元件 WinHttp.WinHttpRequest, 上面範例程式碼可改寫如下 :

var url="http://www.google.com.tw"; //指定欲抓取的網頁
var page=null;
try {
      var whr=new ActiveXObject("WinHttp.WinHttpRequest.5.1");
      whr.Open("GET", url, false); //用 GET 方法下載網頁
      whr.Send(); //向伺服器傳送要求
      page=whr.ResponseText; //取得網頁
      }
catch(e) {
      page="錯誤 : " + e.description;
      }
WScript.Echo(page);

問題是, 如果電腦沒有安裝 IIS, 那這個 WinHttpRequest 元件會存在嗎? 再測試看看.


沒有留言 :