検索
連載

WWW::MechanizeモジュールによるWebアクセスの自動化UNIX処方箋

最新のハードウェアやソフトウェアにかんするニュースもいいけれど、「事件は枯れたシステムが稼働する現場で起こってるんだ」と現場ですぐに役立つ知識を欲するあなたへ贈る珠玉のTips集。今回は、Perlスクリプトを用いたWebアクセスの自動化だ。

Share
Tweet
LINE
Hatena

郵便番号検索などが行えるWebサイトをよく利用します。ただ、毎回Webブラウザで項目を入力して検索するのは面倒なので、スクリプトなどを利用したいと考えています。どのように実現したらよいでしょうか?


 一般的なCGIに対しては、Perlスクリプトなどを用いると簡単に検索できます。ここでは、「MACアドレスのベンダーコード検索」サービス用のスクリプトとして、WWW::Mechanizeモジュールを利用したoui-search.plを紹介します(リスト1)

 なおシステムには、PerlおよびWWW::Mechanizeモジュールを事前にインストールしてください。WWW::Mechanizeモジュールは依存するものが複数あるので、CPANモジュールを利用すると簡単に導入できます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

リスト1 oui-search.pl

oui-search.plの実行と内容

 oui-search.plを実行する際は、引数としてMACアドレスのベンダーコードを指定します。例えば、「08-00-20」を指定すると、

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

のように表示されます。ここで、存在しないコードを指定した場合は、

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

と「NOT FOUND」が表示されるので注意してください。

 oui-search.plの内容を見てみると、まず6行目で引数の型チェックを行っています。14行目でインスタンスを生成し、15行目で指定URLへアクセスします。16行目では、「x」というテキストフィールドに対して、引数で与えられたベンダーコードを入力しています。最後に17行目で[Submit]ボタンを押し、検索を実行します。そして21行目では、検索結果表示ページの内容からベンダー名を抜き出し、23行目で標準出力へ表示させています。

プロキシサーバーを利用した応用

 このように、WWW::Mechanizeモジュールを利用すれば、Web経由での管理インタフェースしか持たないネットワーク機器などのメンテナンスが容易になります。例えば、「cronで定期的にスクリプトを実行し、ステータス表示画面からデータを抜き出して管理者にメールする」という操作も実現できるわけです。

 スクリプトを作成するうえで面倒なのが、HTMLソースコードからフォームの名称や値の入力方法を調べる部分だと思います。これについては、HTTP::Recorderモジュールを用いることで、スクリプト主要部分のひな形を生成させることが可能です。例えば、HTTP::ProxyモジュールとHTTP::Recorderモジュールを利用して簡易プロキシサーバーrecord-http.plを作成し(リスト2)、Webブラウザでのアクセスを経由注5させることで、HTTP通信の内容(Webブラウザから送信された内容の主要部分)を取得できます(実行例1)

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

リスト2 record-http.pl

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

実行例1 record-http.plによるHTTP通信内容の取得

 JavaScriptを利用している場合など、一部のWebページでは正常に記録されないことがありますが、この内容をカスタマイズすることで、HTMLソースコードを参照することなしに、WWW::Mechanizeモジュールを利用したスクリプトの作成が可能になります。

関連キーワード

Perl | CGI


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る