2008年6月14日 星期六

IECapt -- 截取網頁畫面的工具

IECapt 是一套在 Windows 底下抓取網頁圖片的命令列(command line)工具,它可以利用 IE 來抓取網頁的畫面,並存成一般常見的圖檔格式,如:png, jpeg, bmp...等。而且 IECapt 是 Open Source 軟體。

它有一些參數如下:

  • --help Print this help page and exit
    印出參數列表
  • --url= The URL to capture (http:...|file:...|...)
    指定要抓取的網址
  • --out= The target file (.png|bmp|jpeg|emf|...)
    指定輸出圖檔的路徑及圖片格式
  • --min-width= Minimal width for the image (default: 800)
    指定欲截取網頁的最小寬度
  • --max-wait= Don't wait more than (default: 90000, inf: 0)
    最長的等待時間:指定一段時間,讓程式執行抓取網頁時不要超過這個時間
  • --delay= Wait after loading (e.g. for Flash; default: 0)
    指定一段等待期間:有些網站有 Flash 特效的,須要久一點的載入時間,才能抓取到正確的 Flash 顯示畫面
 
使用範例如下:
 
IECapt --url=http://www.example.com.tw/ --out=localfile.png --delay=500
 
但萬一抓取的網頁太長,以下圖這個網頁來講,全部長度就有兩千多 pixel,如果我只需要大概一頁或兩頁的長度,那必需還要用額外的軟體來處理自己要的長度:
 
over
 
原作者提供了 C++C# 版的原始碼,我修改了 C++ 版的原始程式,讓這支 IECapt 可以自行設定要抓取的網頁長度。執行這支程式時,您會在參數列表下發現多了一行:
 
  • --max-height=<int> Maximum height for the image (default: 0(full height))
當沒有指定 max-height 或是 max-height=0 時,是抓取整個頁面的長度。使用的方式如下:
 
IECapt --url=http://www.example.org/ --out=localfile.png --max-height=800
 
這表示要抓取的長度為 800 pixel。
 
以本站為例,抓取長度 800 pixel 的話,則大小看起來如下:
 
800
 
當然,要抓取多大多長, 一切由您自行決定。
 
請點選這個連結下載這隻程式的執行檔或原始碼:執行檔原始碼
如果您有興趣想自行修改這隻程式加入一些小功能或除錯,可由 IECapt 官網處,連結到 SourceForge 的 CVS 處下載最新版的程式。
 
參考資料:
IECapt
 
 

10 則留言:

匿名 提到...

非常有用,太感谢了!超赞!
如果能做出生成缩略图的功能就更完美了!

HawBaShuin 提到...

想請問版主,我使用IECapt抓取有google map的頁面,一直無法抓取成功…不曉得版主有沒有相關的經驗與方法?

平凡小人物 提到...

不知道您是怎麼下的指令, 我試了一下, 是可以抓到 google map 的圖.

HawBaShuin 提到...

您好,打擾了,我目前的環境是Win Server 2003 + AppServ + php,我的googmap網頁也能正常顯示(http://163.17.136.62:4382/googlemap.php)
而抓取圖片的程式為(http://163.17.136.62:4382/url2iecapt_.php),程式碼如下:
$server = 'IECapt.exe --url="http://163.17.136.62:4382/googlemap.php" --out=xdxd.png --delay=10000 --max-wait=90000 --silent ';
system($server,$output);
目前在抓圖時都僅只抓到在google map 在載入時的初始點…也試過將delay的值設長一點,還是一樣…

HawBaShuin 提到...

另外我使用令列輸入時,卻抓得到圖…令我百思不得其解,感謝版主撥空回覆,若佔用您太多時間,還請版主見諒,實在不行的話也沒關係,感謝您!

平凡小人物 提到...

的確是用命令列就可以正常顯示,
但我剛剛再看了一次您的 url2iecapt_.php 頁面,
我發現他已經是正常的了,
我想您應該已經成功了吧?!

HawBaShuin 提到...

感謝版主,但老實說小弟也不曉得為什麼今天試就又可以了…哈,而且好像抓到的map是顯示英文的地名…還是感謝囉^^

希望的天空 提到...

請問一下,如果我要抓圖片的網頁,是必須先輸入帳號密碼才能進去的畫面,結果會抓不到耶 ~~~ ,有沒有什麼參數是可以傳入 帳號及 密碼的呢 ??

平凡小人物 提到...

如果是帳號密碼的話, 或許可以看一下網頁中傳帳號密碼的變數是什麼, 在網址列後面直接用參數傳遞的方式試試看!

ex: http://example.com/login.php?id=me&passwd=1234

希望的天空 提到...

帳號&密碼並非傳URL參數,是用.NET的SERVER 事件去觸發的。