WWW::Mechanize 是Perl裡很代表性的一個模組,
我們稱它為網頁代理人,它可以幫你做瀏覽網頁的動作,
包含:點擊連結、帳號密碼登入、擷取所需資訊等等。
因為是針對網頁做處理,所以建議各位要有一點HTML的觀念才容易理解。
在這裡先我們用簡單的例子來說明:
首先,我想先到google的首頁去,並且輸入CPAN下去尋找。
因此我們必須讓程式知道,要在搜尋欄位打上關鍵字,並且按下搜尋按鈕
每個欄位都會有自己的name值,我們可以透過右鍵→檢視原始碼來得知,
很暈對吧!事實上,很多瀏覽器提供的plugin(附加元件),
都可以讓原始碼排的很整齊,讓大家更容易瀏覽,
在這裡要推薦一個好東西,火狐(FireFox)上的一個plugin:Firebug
Firebug可以把CSS、HTML等各自分開,讓使用者更容易閱讀原始碼。
因此我們可以看到,google上的搜尋欄位名稱是q (name="q"),
先做到這裡為止,我們來看程式碼:
use WWW::Mechanize; # 表示我要使用這模組
my $agent = WWW::Mechanize->new();# 建立一個新物件 $agent
$agent -> get("http://www.google.com.tw/"); # 讓$agent連到網頁
$agent -> field("q","CPAN"); # 在名為q的欄位填上CPAN
$agent -> click_button(number => 1); # 點選第一個按鈕 也就是搜尋
這樣就完成很簡單的,進到網站、填寫資料、送出。
接著,我們希望程式繼續往下探索網頁,
點選了超連結後,會進入CPAN網站中,搜尋的分頁。
因為我們已經讓程式點選搜尋按鈕了,
所以剩餘的程式碼為:
$agent -> follow_link(n => 29); # 點選第29個超連結
my $content = $agent ->{content}; # 把整個內容都取下 存在變數
open HTML, ">Agent.html"; # 開啟一個新檔案
print HTML $content; # 把$content存放的值都存進新檔案
這裡的例子,是把所有資訊都存到$content裡
表示說,如果有必要,可以再利用正規表示,
把$content裡,感興趣的東西留下。
事實上到這步,已經算是有實質功能了,
不少灌票程式都是利用這模組稍作修改,
只是把填寫的欄位變多一點(ex: 帳號、密碼),後續就一樣是,
點第幾個連結、到第幾個頁面、投票給哪位候選人等等。
最後,這模組其實能使用的功能很多,絕對不只上面範例中所使用的,
有興趣想深入研究的,CPAN網站上的WWW::Mechanize
有很詳細的介紹。