<?xml version='1.0' encoding='utf-8'?>
<pod xmlns="http://axkit.org/ns/2000/pod2xml">
<head>
	<title>WWW::Mechanize - Perlオブジェクト中のハンディWebブラウザ</title>
</head>
<sect1>
<title>VERSION</title>
<para>
Version 1.02
</para>
<verbatim><![CDATA[
$Header: /cvsroot/www-mechanize/www-mechanize/lib/WWW/Mechanize.pm,v 1.129 2004/04/10 05:30:10 petdance Exp $
]]></verbatim>
</sect1>
<sect1>
<title>SYNOPSIS</title>
<para>
<code>WWW::Mechanize</code>、あるいは縮めてMechはWebサイトとのやりとりの自動化を
助けます。これはリンク先やフォームデータの送信を含む、複数のページの取得を
サポートします。取得したページはそれぞれ解析され、そのリンクやフォームが
抽出されます。リンクやフォームを選択し、フォームを埋め、次のページを取得
することが可能です。Mechは訪れたURLの履歴を保持しますので、これを問い
あわせたり再訪することも可能です。
</para>
<verbatim><![CDATA[
use WWW::Mechanize;
my $mech = WWW::Mechanize->new();
]]></verbatim>
<verbatim><![CDATA[
$mech->get( $url );
]]></verbatim>
<verbatim><![CDATA[
$mech->follow_link( n => 3 );
$mech->follow_link( text_regex => qr/download this/i );
$mech->follow_link( url => 'http://host.com/index.html' );
]]></verbatim>
<verbatim><![CDATA[
$mech->submit_form(
    form_number => 3,
    fields      => {
        username    => 'yourname',
        password    => 'dummy',
    }
);
]]></verbatim>
<verbatim><![CDATA[
$mech->submit_form(
    form_name => 'search',
    fields    => { query  => 'pot of gold', },
    button    => 'Search Now'
);
]]></verbatim>
<para>
MechはWebアプリケーションのテストにも良くあいます。<link xref='Test::HTML::Lint'>Test::HTML::Lint</link>
モジュールなど、Test::*の内の一つを使えば、取得したコンテンツを
チェックし、testコールへの入力に使うことができます。
</para>
<verbatim><![CDATA[
use Test::More;
like( $mech->content(), qr/$expected/, "Got expected content" );
]]></verbatim>
<para>
ページ取得を行う度にそのURLはスタックに保持され、これを前後に移動
することができます。
</para>
<verbatim><![CDATA[
$mech->back();
]]></verbatim>
<para>
ページ取得の過程をよりうまくコントロールしようと思ったら、以下の
メソッドを使うことができます。<code>follow_link</code>と<code>submit_form</code>は、
つまるところこれらの高レベルのラッパーです。
</para>
<verbatim><![CDATA[
$mech->follow( $link );
$mech->find_link( n => $number );
$mech->form_number( $number );
$mech->form_name( $name );
$mech->field( $name, $value );
$mech->set_fields( %field_values );
$mech->set_visible( @criteria );
$mech->click( $button );
]]></verbatim>
<para>
<link xref='WWW::Mechanize'>WWW::Mechanize</link>はまさしく<link xref='LWP::UserAgent'>LWP::UserAgent</link>のサブクラスであり、
<link xref='LWP::UserAgent'>LWP::UserAgent</link>のどのメソッドも利用可能です。
</para>
<verbatim><![CDATA[
$mech->add_header($name => $value);
]]></verbatim>
</sect1>
<sect1>
<title>重要なリンク</title>
<list>
<item><itemtext><link xref='{tag:xlink uri='http:#/search.cpan.org/dist/WWW-Mechanize/'>http:#/search.cpan.org/dist/WWW-Mechanize/</xlink>'}<xlink uri='http://search.cpan.org/dist/WWW-Mechanize/'>http://search.cpan.org/dist/WWW-Mechanize/</xlink></link></itemtext>
<para>
CPANのMechanizeのドキュメントページ。
</para>
</item>
<item><itemtext><link xref='{tag:xlink uri='http:#/rt.cpan.org/NoAuth/Bugs.html?Dist=WWW-Mechanize'>http:#/rt.cpan.org/NoAuth/Bugs.html?Dist=WWW-Mechanize</xlink>'}<xlink uri='http://rt.cpan.org/NoAuth/Bugs.html?Dist=WWW-Mechanize'>http://rt.cpan.org/NoAuth/Bugs.html?Dist=WWW-Mechanize</xlink></link></itemtext>
<para>
Mechanizeにはバグと機能向上のRTキューがあります。もしあなたの抱えて
いるバグが未報告のものであれば&quot;Report bug&quot;をクリックしてください。
</para>
</item>
</list>
</sect1>
<sect1>
<title>コンストラクタと開始</title>
<sect2>
<title>new()</title>
<para>
WWW::Mechanizeの新規オブジェクトを生成し、返します。
以下ではこのオブジェクトを'agent'と呼びます。
</para>
<verbatim><![CDATA[
my $mech = WWW::Mechanize->new()
]]></verbatim>
<para>
WWW::Mechanizeのコンストラクタは、LWP::UserAgentのコンストラクタへの
パラメータのうち2つを上書きします。
</para>
<verbatim><![CDATA[
agent => "WWW-Mechanize/#.##"
cookie_jar => {}    # an empty, memory-only HTTP::Cookies object
]]></verbatim>
<para>
コンストラクタにパラメータを渡すことで、この上書き値を変更することが
できます。以下のようになります:
</para>
<verbatim><![CDATA[
my $mech = WWW::Mechanize->new( agent=>"wonderbot 1.01" );
]]></verbatim>
<para>
cookie jarでのオーバーヘッドを避けたい時や、botにcookieを受け入れ
させたくない時は、明示的にこれを禁止します。こんな感じです:
</para>
<verbatim><![CDATA[
my $mech = WWW::Mechanize->new( cookie_jar => undef );
]]></verbatim>
<para>
以下はWWW::Mechanizeが認識できるパラメータです。
これらは<link xref='LWP::UserAgent'>LWP::UserAgent</link>が認識するパラメータには含まれていません。
</para>
<list>
<item><itemtext><code>autocheck =&gt; [0|1]</code></itemtext>
<para>
ここのリクエストについてそれが成功していそうか否かをチェックします。
これはあなたが自分でマニュアルでチェックすることによるトラブルを防ぎ
ます。エラーが見つかれば、それはワーニングではなくエラーになります。
デフォルトはオフです。
</para>
</item>
<item><itemtext><code>onwarn =&gt; \&amp;func()</code></itemtext>
<para>
<code><link xref='Carp'>Carp</link>::carp</code>のような<code>warn</code>互換の、ワーニングを表示する必要が
あるときに呼び出される関数へのリファレンスです。
</para>
<para>
ここに<code>undef</code>が設定されると、ワーニングはまったく表示されなくなります。
とはいえ、その振る舞いを制御するのに<code>quiet</code>を使うよりは良いでしょう。
</para>
<para>
この値が渡されなければ、Mechは<link xref='Carp'>Carp</link>がインストールされていれば
<code>Carp::carp</code>を、そうでなければ<code>CORE::warn</code>を使用します。
</para>
</item>
<item><itemtext><code>onerror =&gt; \&amp;func()</code></itemtext>
<para>
<code><link xref='Carp'>Carp</link>::croak</code>のような<code>die</code>互換の、知恵意的なエラーが発生した
際に呼び出される関数へのリファレンスです。
</para>
<para>
ここに<code>undef</code>が設定されると、エラーはまったく表示されなくなります。
</para>
<para>
この値が渡されなければ、Mechは<link xref='Carp'>Carp</link>がインストールされていれば
<code>Carp::croak</code>を、そうでなければ<code>CORE::die</code>を使用します。
</para>
</item>
<item><itemtext><code>quiet =&gt; [0|1]</code></itemtext>
<para>
ワーニングを出しません。<code>quiet =&gt; 1</code>に設定するのと、
<code>$agent-&gt;quiet(1)</code>を呼び出すのは同じです。デフォルトではオフです。
</para>
</item>
</list>
</sect2>
<sect2>
<title>$mech-&gt;agent_alias( $alias )</title>
<para>
実際にユーザーが渡した文字列からバージョンなどを拡張したものをuser 
agentに設定します。<emphasis>$alias</emphasis>には以下のうち一つを使用できます。
</para>
<list>
<item><itemtext>Windows IE 6</itemtext>
</item>
<item><itemtext>Windows Mozilla</itemtext>
</item>
<item><itemtext>Mac Safari</itemtext>
</item>
<item><itemtext>Mac Mozilla</itemtext>
</item>
<item><itemtext>Linux Mozilla</itemtext>
</item>
<item><itemtext>Linux Konqueror</itemtext>
</item>
</list>
<para>
すると、最も関連深いものの一つに置き換えられます。例えば、
</para>
<verbatim><![CDATA[
$mech->agent_alias( 'Windows IE 6' );
]]></verbatim>
<para>
ではUser-Agentは以下に設定されます。
</para>
<verbatim><![CDATA[
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
]]></verbatim>
<para>
適切な別名の一覧は<code>known_agent_aliases()</code>から返されます。
</para>
</sect2>
<sect2>
<title><code>known_agent_aliases()</code></title>
<para>
Mechが知っている全てのエージェントの別名のリストを返します。
</para>
</sect2>
</sect1>
<sect1>
<title>ページ取得メソッド</title>
<sect2>
<title>$mech-&gt;get($url)</title>
<para>
URL/URIを与えられると、それを取得します。<link xref='{tag:xlink uri='HTTP::Response'>HTTP::Response</xlink>'}<xlink uri='HTTP::Response'>HTTP::Response</xlink></link>
オブジェクトが帰り値です。<emphasis>$url</emphasis>は適切に整形されたURL文字列か、
<link xref='URI'>URI</link>オブジェクトです。
</para>
<para>
この結果はagentオブジェクトに内部的に保持されますが、それを知っている
必要はありません。以下にリストされているアクセッサを使うだけです。
内部の詮索はしないように祈りますし、サブジェクトは将来変更されます。
</para>
<para>
<code>get()</code>は<link xref='LWP::UserAgent'>LWP::UserAgent</link>のメソッドをよりよい振る舞いをするように
オーバーライドしたバージョンです。これは
</para>
<verbatim><![CDATA[
$mech->get( $url, ":content_file"=>$tempfile );
]]></verbatim>
<para>
のようなことを可能にしますし、このパラメータが適当にフィルタされて
取得されることとみなして構いません。
</para>
</sect2>
<sect2>
<title>$mech-&gt;reload()</title>
<para>
ブラウザのリロードボタンのように振舞います: 現在のリクエストを
再実行します。
</para>
<para>
リロードによる<link xref='{tag:xlink uri='HTTP::Response'>HTTP::Response</xlink>'}<xlink uri='HTTP::Response'>HTTP::Response</xlink></link>オブジェクトか、まだリクエストが実行
されていない時は現在のリクエストがない時には<code>undef</code>を返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;back()</title>
<para>
ブラウザの&quot;back&quot;ボタンを叩くのと等価です。前のページに戻ります。
過去の最初のページに戻りたくはありませんか？（実際、それが可能だと
したらそうするでしょう？）
</para>
</sect2>
</sect1>
<sect1>
<title>リンク追跡メソッド</title>
<sect2>
<title>$mech-&gt;follow_link(...)</title>
<para>
そのページの指定されたリンクをたどります。<code><link xref='find_link()'>find_link()</link></code>で使うのと
同じパラメータを使い、それにマッチするものを指定します。
</para>
<para>
以下がその例です:
</para>
<list>
<item><itemtext>&quot;download&quot;と名づけられた3番目のリンク</itemtext>
<verbatim><![CDATA[
$mech->follow_link( text => "download", n => 3 );
]]></verbatim>
</item>
<item><itemtext>大文字小文字を区別せず、&quot;download&quot;をURL中に含む最初のリンク:</itemtext>
<verbatim><![CDATA[
$mech->follow_link( url_regex => qr/download/i );
]]></verbatim>
<para>
または
</para>
<verbatim><![CDATA[
$mech->follow_link( url_regex => qr/(?i:download)/ );
]]></verbatim>
</item>
<item><itemtext>ページ内の3番目のリンク</itemtext>
<verbatim><![CDATA[
$mech->follow_link( n => 3 );
]]></verbatim>
</item>
</list>
<para>
リンクが見つかれば、GETメソッドの実行結果（<xlink uri='HTTP::Response'>HTTP::Response</xlink>
オブジェクト）が返されます。ページ内にリンクがないか、または指定された
リンクが見つからなかった時は、undefを返します。
</para>
<para>
このメソッドは、将来の開発では使用されない<code>$mech-&gt;follow()</code>の置き
換えにあたります。
</para>
</sect2>
</sect1>
<sect1>
<title>フォームフィールド入力メソッド</title>
<sect2>
<title>$mech-&gt;form_number($number)</title>
<para>
ページ中の<emphasis>number</emphasis>番目のフォームを副手順で<code><link xref='field()'>field()</link></code>や
<code><link xref='click()'>click()</link></code>で呼び出す際のターゲットとして選択します。返り値も選択
されたフォームです。選択されたものが存在しない場合には、ワーニングを
出し、undefを返します。フォームは1番からインデックスが付けられるので
最初のフォームは0ではなく、1です。
</para>
</sect2>
<sect2>
<title>$mech-&gt;form_name($name)</title>
<para>
フォームを名前で選択します。ページ上にその名前のフォームが複数ある
時は、そのうち最初のものが選択され、ワーニングが生成されます。
通常はフォームそれ自体を、見つからなかった時にはundefを返します。
</para>
<para>
この機能はlibwww-perl 5.69以降を必要としますのでご注意ください。
</para>
</sect2>
<sect2>
<title>$mech-&gt;field( $name, $value, $number )</title>
</sect2>
<sect2>
<title>$mech-&gt;field( $name, \@values, $number )</title>
<para>
フィールド名を受け取り、指定された値をそこにセットします。これは
現在のフォーム（<code><link xref='form()'>form()</link></code>で設定されたものか、デフォルトである
ページ内の最初のフォーム）に適用されます。
</para>
<para>
オプションの<emphasis>$number</emphasis>パラメータは、2つ以上の同じ名前のフィールドが
ある時に、それらを区別するのに使われます。フィールドは1から番号が
ふられます。
</para>
</sect2>
<sect2>
<title>$mech-&gt;set_fields( $name =&gt; $value ... )</title>
<para>
このメソッドはフォームの複数のフィールドを設定します。これはフィールド
名と値のペアのリストを引数に取ります。もし同じ名前のフィールドが複数
あれば、そのうち最初に見つかったものに値がセットされます。この複製
されたフィールドのいずれかを選択したいときは、値として、値と番号の
2つの要素をもつ無名配列を使用します。
</para>
<verbatim><![CDATA[
# set the second foo field
$mech->set_fields( $name => [ 'foo', 2 ] ) ;
]]></verbatim>
<para>
フィールドは1から番号がふられます。
</para>
<para>
これは現在のフォーム（<code><link xref='form()'>form()</link></code>で設定されたものか、デフォルトである
ページ内の最初のフォーム）に適用されます。
</para>
</sect2>
<sect2>
<title>$mech-&gt;set_visible( @criteria )</title>
<para>
このメソッドはフォームフィールドを、そのフィールド名を知る必要なく
セットします。したがって、もしユーザー名とパスワードを要求するログイン
画面があるなら、そのフィールド名を知るためにフォームを取得してソース
から調査する（あるいはWWW::Mechanizeといっしょにインストールされる
<filename>mech-dump</filename>を使う）必要はありません; こう命じるだけで
</para>
<verbatim><![CDATA[
$mech->set_visible( $username, $password ) ;
]]></verbatim>
<para>
これにしたがって、1番目と2番目のフィールドがセットされます。この
メソッドは、可視（visible）フィールドのみに働くので、set_<emphasis>visible</emphasis>と
呼ばれます; 不可視（hidden）のフォームインプットは無視されます。
フィールドの順番はHTMLソース中に出てくる順番と同じで、多くの場合は
ページ上で見える順番と同じですが、テーブルを使ったクリエイティブな
デザインでは異なることがあることは警告しておきます。
</para>
<para>
<code>@criteria</code>の個々の要素はフィールド値またはフィールド指定値です。
フィールド値はスカラです。フィールド指定値では値をセットしたい
フィールドの<emphasis>タイプ</emphasis>を指定でき、二つの要素をもつ配列リファレンスで
表わされます。したがって、最初のラジオボタンを次のように指定できます
</para>
<verbatim><![CDATA[
$mech->set_visible( [ radio => "KCRW" ] ) ;
]]></verbatim>
<para>
フィールド値とフィールド指定値は混在させることができ、したがって
</para>
<verbatim><![CDATA[
$mech->set_visible( "fred", "secret", [ option => "Checking" ] ) ;
]]></verbatim>
<para>
は1、2番目のフィールドを&quot;fred&quot;と&quot;secret&quot;に、そして<emphasis>次の</emphasis><code>OPTION</code>
メニューフィールドを&quot;Checking&quot;にセットします。
</para>
<para>
フィールド指定値のタイプには以下を使用できます: &quot;text&quot;や&quot;password&quot;、
&quot;hidden&quot;,&quot;textarea&quot;、&quot;file&quot;、&quot;image&quot;、&quot;submit&quot;、&quot;radio&quot;、&quot;checkbox&quot;、
&quot;option&quot;。
</para>
</sect2>
<sect2>
<title>$mech-&gt;tick( $name, $value [, $set] )</title>
<para>
現在のフォーム中の、その名前と値を持つ最初のチェックボックスに '印を
付け(Ticks)' ます。その値を持つ名前月のチェックボックスがない時は
dieします。オプションの三番目の引数でFalseの値を渡すと、チェック
ボックスは印がはずされます。
</para>
</sect2>
<sect2>
<title>$mech-&gt;untick($name, $value)</title>
<para>
チェックボックスの印をはずします。<code>tick($name,$value,undef)</code>の短い
書き方です。
</para>
</sect2>
</sect1>
<sect1>
<title>フォーム送信メソッド</title>
<sect2>
<title>$mech-&gt;click( $button [, $x, $y] )</title>
<para>
ボタンをクリックする効果を持ちます。最初の引数は、クリックするボタンの
名前です。2番目と3番目の（オプションの）引数ではクリックする(x,y)
座標を指定できます。
</para>
<para>
フォーム上にボタンが一つしかなければ、引数なしで<code>$mech-&gt;click()</code>と
するだけで、そのボタンをクリックしたことになります。
</para>
<para>
<link xref='{tag:xlink uri='HTTP::Response'>HTTP::Response</xlink>'}<xlink uri='HTTP::Response'>HTTP::Response</xlink></link>オブジェクトを返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;click_button( ... )</title>
<para>
フォーム上の名前、値、またはインデックスで指定されたボタンをクリック
する効果をもちます。引数はキーと値のペアです。一つの名前、番号、または
値だけを指定しなければいけません。
</para>
<para>
TODO: この関数はテストされていません。
</para>
<list>
<item><itemtext>name =&gt; name</itemtext>
<para>
<emphasis>name</emphasis>という名前のボタンをクリックします。
</para>
</item>
<item><itemtext>number =&gt; n</itemtext>
<para>
フォームの<emphasis>n</emphasis>番目のボタンをクリックします。
</para>
</item>
<item><itemtext>value =&gt; value</itemtext>
<para>
値が<emphasis>value</emphasis>のボタンをクリックします。
</para>
</item>
<item><itemtext>x =&gt; x
=item * y =&gt; y</itemtext>
<para>
この（オプションの）引数でクリックする(x,y)座標を指定できます。
</para>
</item>
</list>
</sect2>
<sect2>
<title>$mech-&gt;select($name, $value)</title>
</sect2>
<sect2>
<title>$mech-&gt;select($name, \@values)</title>
<para>
<code>select</code>フィールド名を与えると、その値を指定された値にセットします。
フィールドが&lt;複数選択&gt;ではなく、<code>$value</code>が配列の時は、その
最後の値がセットされます。これは現在のフォーム（<code><link xref='form()'>form()</link></code>メソッドで
セットされたものか、デフォルトではページの最初のフォーム）に適用され
ます。
</para>
</sect2>
<sect2>
<title>$mech-&gt;submit()</title>
<para>
ボタンをクリックしないまま、そのページをsubmitします。実際には、どの
ボタンもクリックされなかったことになります。
</para>
<para>
これは<code>$mech-&gt;click(&quot;submit&quot;)</code>の別名として使用されてきましたが、
今後、いずれかのバージョンでなくなるでしょう。
</para>
</sect2>
<sect2>
<title>$mech-&gt;submit_form( ... )</title>
<para>
このメソッドは、直前に取得したページのフォームを選択し、フィールドを
埋め、それをsubmitするためのものです。これはform_number/form_name、
set_fields、clickメソッドを一つの高レベルの呼び出しに結合したものです。
これの引数はkey/valueの組み合わせのリストで、そのいずれもオプション
です。
</para>
<list>
<item><itemtext>form_number =&gt; n</itemtext>
<para>
<emphasis>n</emphasis>番目のフォームを選択します（<code><link xref='form_number()'>form_number()</link></code>を呼びます）。この
パラメータが指定されなかった場合、現在選択されているフォームが使用
されます。
</para>
</item>
<item><itemtext>form_name =&gt; name</itemtext>
<para>
<emphasis>name</emphasis>と名づけられたフォームを使用します（<code><link xref='form_name()'>form_name()</link></code>を呼び
ます）。
</para>
</item>
<item><itemtext>fields =&gt; fields</itemtext>
<para>
<emphasis>fields</emphasis>ハッシュリファレンスの値でフィールド値をセットします
（<code><link xref='set_fields()'>set_fields()</link></code>を呼びます）。
</para>
</item>
<item><itemtext>button =&gt; button</itemtext>
<para>
<emphasis>button</emphasis>ボタンをクリックします（<code><link xref='click()'>click()</link></code>を呼びます）。
</para>
</item>
<item><itemtext>x =&gt; x, y =&gt; y</itemtext>
<para>
<code><link xref='click()'>click()</link></code>にxおよびyの値をセットします。
</para>
</item>
</list>
<para>
フォームが選択されていない時は、最初に見つかったフォームが使用
されます。
</para>
<para>
<emphasis>button</emphasis>が渡されなかった時は、代わりに<code><link xref='submit()'>submit()</link></code>メソッドが使われ
ます。
</para>
<para>
<link xref='{tag:xlink uri='HTTP::Response'>HTTP::Response</xlink>'}<xlink uri='HTTP::Response'>HTTP::Response</xlink></link>オブジェクトを返します。
</para>
</sect2>
</sect1>
<sect1>
<title>ステータスメソッド</title>
<sect2>
<title>$mech-&gt;success()</title>
<para>
最後のリクエストが成功したか否かをtrue(1)かfalse(0)で返します。まだ
リクエストを実行していなければ、falseを返します。
</para>
<para>
これは<code>$mech-&gt;res-&gt;is_success</code>をラップする便利な関数です。
</para>
</sect2>
<sect2>
<title>$mech-&gt;uri()</title>
<para>
現在のURIを返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;response() / $mech-&gt;res()</title>
<para>
現在のレスポンスを<link xref='{tag:xlink uri='HTTP::Response'>HTTP::Response</xlink>'}<xlink uri='HTTP::Response'>HTTP::Response</xlink></link>オブジェクトとして返します。
</para>
<para>
<code>$mech-&gt;response()</code>の短縮形です。
</para>
</sect2>
<sect2>
<title>$mech-&gt;status()</title>
<para>
レスポンス中のHTTPステータスコードを返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;ct()</title>
<para>
レスポンスのコンテントタイプを返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;base()</title>
<para>
現在のレスポンスのベースURIを返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;content()</title>
<para>
レスポンスのコンテントを返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;forms()</title>
<para>
リストコンテキストで呼ばれたときは、最後に取得したページ内で見つかった
フォームのリストを返します。スカラーコンテキストのときは、これらの
フォームの配列リファレンスを返します。これで返されるフォームはいずれも
<link xref='HTML::Form'>HTML::Form</link>オブジェクトです。
</para>
</sect2>
<sect2>
<title>$mech-&gt;current_form()</title>
<para>
現在のフォームを<link xref='HTML::Form'>HTML::Form</link>オブジェクトとして返します。私は
<code><link xref='form()'>form()</link></code>が既に存在してcurrent_formがセットされている場合を除いては
こちらの<code>form()</code>を呼んでいます。
</para>
</sect2>
<sect2>
<title>$mech-&gt;links()</title>
<para>
リストコンテキストで呼ばれたときは、最後に取得したページ内で見つかった
リンクのリストを返します。スカラーコンテキストのときは、これらの
リンクの配列リファレンスを返します。これで返されるリンクはいずれも
<link xref='WWW::Mechanize::Link'>WWW::Mechanize::Link</link>オブジェクトです。
</para>
</sect2>
<sect2>
<title>$mech-&gt;is_html()</title>
<para>
現在のコンテントがHTMLか否かをHTTPヘッダーを元に判断して、trueまたは
falseを返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;title()</title>
<para>
<link xref='HTML::HeadParser'>HTML::HeadParser</link>の解析結果を元に、<code>&lt;TITLE&gt;</code>タグの内容を返します。
コンテントがHTMLではない場合はundefを返します。
</para>
</sect2>
</sect1>
<sect1>
<title>コンテントハンドリングメソッド</title>
<sect2>
<title>$mech-&gt;find_link()</title>
<para>
このメソッドは現在取得されているページ内のリンクを検索します。これは
そのリンクについて記述している<link xref='WWW::Mechanize::Link'>WWW::Mechanize::Link</link>オブジェクトを
返します。（きっとURLの記述より、こちらに魅力を覚えるでしょう。）
リンクが見つからなかったときにはundefを返します。
</para>
<para>
URL部分を取り出し、<code><link xref='get()'>get()</link></code>メソッドに渡すことができます。もしこれを
したいのであれば、直接<code><link xref='follow_link()'>follow_link()</link></code>メソッドを呼ぶのも良い
でしょう。これは、自動的に<code><link xref='get()'>get()</link></code>を実行します。
</para>
<para>
<code>&lt;FRAME SRC=&quot;...&quot;&gt;</code>タグはHTMLとして解析され、リンクとして扱われ
ますので、このメソッドを使えることを覚えておいてください。
</para>
<para>
以下のkey/valueの組み合わせを一つまたは複数渡すことで、リンクを選択
することができます:
</para>
<list>
<item><itemtext><code>text =&gt; string</code> および <code>text_regex =&gt; regex</code></itemtext>
<para>
<code>text</code>は、<emphasis>string</emphasis>と一致するテキストのリンクにマッチします。正確に
&quot;download&quot;というテキストを持つリンクを選択するには、以下のようにします
</para>
<verbatim><![CDATA[
$mech->find_link( text => "download" );
]]></verbatim>
<para>
<code>text_regex</code>は、<emphasis>regex</emphasis>に該当するテキストのリンクにマッチします。
大文字小文字を問わず、&quot;download&quot;というテキストが含まれるリンクを選択
するには、以下のようにします
</para>
<verbatim><![CDATA[
$mech->find_link( text_regex => qr/download/i );
]]></verbatim>
<para>
ページのリンクから抽出されたテキストはトリムされることに注意して
ください。<code>&lt;a&gt; foo &lt;/a&gt;</code>は'foo'として保持され、先頭および末尾の
空白の検索は失敗します。
</para>
</item>
<item><itemtext><code>url =&gt; string</code> および <code>url_regex =&gt; regex</code></itemtext>
<para>
<emphasis>string</emphasis>または<emphasis>regex</emphasis>に該当するURLのリンクにマッチします。
このURLは、そのページのコードによっては、<filename>foo/bar.html</filename>のような相対
URLかも知れません。
</para>
</item>
<item><itemtext><code>url_abs =&gt; string</code> および <code>url_abs_regex =&gt; regex</code></itemtext>
<para>
リンクの絶対URLを、<emphasis>string</emphasis>または<emphasis>regex</emphasis>に対して代わりにマッチング
します。このURLは、ページ中では相対URLであるとしても、絶対URLになり
ます。
</para>
</item>
<item><itemtext><code>name =&gt; string</code> および <code>name_regex =&gt; regex</code></itemtext>
<para>
<emphasis>string</emphasis>または<emphasis>regex</emphasis>に該当する名前のリンクにマッチします。
</para>
</item>
<item><itemtext><code>tag =&gt; string</code> および <code>tag_regex =&gt; regex</code></itemtext>
<para>
<emphasis>string</emphasis>または<emphasis>regex</emphasis>に該当するタグのリンクにマッチします。
<code>tag_regex</code>はおそらく、以下のように複数のタグをチェックするのに最も
便利でしょう:
</para>
<verbatim><![CDATA[
$mech->find_link( tag_regex => qr/^(a|img)$/;
]]></verbatim>
</item>
<item><itemtext><code>n =&gt; number</code></itemtext>
<para>
<emphasis>n</emphasis>番目のリンクにマッチします。
</para>
<para>
<code>n</code>パラメータは、上述の他のパラメータと番号を指定するために組み
合わせることができます。たとえば、<code>text =&gt; &quot;download&quot;, n =&gt; 3</code>
では&quot;download&quot;というテキストに一致する3番目のリンクが検索されます。
</para>
</item>
</list>
<para>
<code>n</code>が指定されなかった場合、デフォルトは1です。したがって、もし一切
パラメータを指定しなかった場合には、このメソッドはデフォルトで
ページ中の最初のリンクを検索します。
</para>
<para>
複数のテキストまたはURLパラメータを指定でき、これらはすべてand条件
として扱われることを覚えておいてください。例えば、テキストが&quot;News&quot;で、
URLに&quot;cnn.com&quot;を含む最初のリンクを探すには、以下のようにします:
</para>
<verbatim><![CDATA[
$mech->find_link( text => "News", url_regex => qr/cnn\.com/ );
]]></verbatim>
</sect2>
<sect2>
<title>$mech-&gt;find_link() : link format</title>
<para>
<code>$self-&gt;content</code>中のリンクに対応する<link xref='WWW::Mechanize::Link'>WWW::Mechanize::Link</link>
オブジェクトをすべて含んだ配列リファレンスが返り値です。
</para>
<para>
リンクは、以下から取得されます:
</para>
<list>
<item><itemtext><code>&lt;A HREF=...&gt;</code></itemtext>
</item>
<item><itemtext><code>&lt;AREA HREF=...&gt;</code></itemtext>
</item>
<item><itemtext><code>&lt;FRAME SRC=...&gt;</code></itemtext>
</item>
<item><itemtext><code>&lt;IFRAME SRC=...&gt;</code></itemtext>
</item>
</list>
</sect2>
<sect2>
<title>$mech-&gt;find_all_links( ... )</title>
<para>
判定基準にマッチするすべてのリンクを返します。このメソッドへのリンク
の判定基準の指定方法は、<code><link xref='find_link()'>find_link()</link></code>と同じです。すべてのリンクは
<link xref='WWW::Mechanize::Link'>WWW::Mechanize::Link</link>として返されます。
</para>
<para>
リストコンテキストでは、<code>find_all_links()</code>はリンクのリストを返します。
そうでなければ、リンクのリストへのリファレンスを返します。
</para>
<para>
<code>find_all_links()</code>をパラメータなしで呼ぶと、ページ中のすべての
リンクが返されます。
</para>
</sect2>
</sect1>
<sect1>
<title>その他のメソッド</title>
<sect2>
<title>$mech-&gt;add_header( name =&gt; $value [, name =&gt; $value... ] )</title>
<para>
エージェントにHTTPリクエスト時に追加または削除するhttpヘッダーを設定し
ます。
</para>
<verbatim><![CDATA[
$mech->add_header( Encoding => 'text/klingon' );
]]></verbatim>
<para>
もし<emphasis>value</emphasis>が<code>undef</code>であれば、そのヘッダーは以降のリクエストでは削除
されます。例えば、Refererヘッダーをもう送らないようにするには:
</para>
<verbatim><![CDATA[
$mech->add_header( Referer => undef );
]]></verbatim>
<para>
もしヘッダーを削除したいのであれば、<code>delete_header</code>を使います。
</para>
<para>
追加された名前/値の組み合わせの個数を返します。
</para>
<para>
<strong>NOTE</strong>: このメソッドは1.00以前のWWW::Mechanizeとは異なります。
以前は、ヘッダーはオブジェクトインスタンスのメンバーではなく、パッケー
ジのハッシュに保持されました。<code>add_header()</code>の呼出しは、仮にそのオブ
ジェクトがすぐになくなる場合でも、全てのWWW::Mechanizeオブジェクトの
ヘッダーを変更しました。
</para>
</sect2>
<sect2>
<title>$mech-&gt;delete_header( name [, name ... ] )</title>
<para>
Removes HTTP headers from the agent's list of special headers.  For instance, you might need to do something like:
</para>
<verbatim><![CDATA[
# Don't send a Referer for this URL
$mech->add_header( Referer => undef );
]]></verbatim>
<verbatim><![CDATA[
# Get the URL
$mech->get( $url );
]]></verbatim>
<verbatim><![CDATA[
# Back to the default behavior
$mech->delete_header( 'Referer' );
]]></verbatim>
</sect2>
<sect2>
<title>$mech-&gt;quiet(true/false)</title>
<para>
画面へのワーニングを抑制することができます。
</para>
<verbatim><![CDATA[
$mech->quiet(0); # ワーニングを有効にします (デフォルト)
$mech->quiet(1); # ワーニングを無効にします
$mech->quiet();  # 現在のquiet設定状態を返します
]]></verbatim>
</sect2>
</sect1>
<sect1>
<title><link xref='LWP::UserAgent'>LWP::UserAgent</link>メソッドのオーバーライド</title>
<sect2>
<title>$mech-&gt;redirect_ok()</title>
<para>
<link xref='LWP::UserAgent'>LWP::UserAgent</link>の<code>redirect_ok()</code>をオーバーライドしたバージョンです。
このメソッドはリダイレクションを追跡すべきか否かを判定するために
使われます。
</para>
</sect2>
<sect2>
<title>$mech-&gt;request( $request [, $arg [, $size]])</title>
<para>
<link xref='LWP::UserAgent'>LWP::UserAgent</link>の<code>request()</code>をオーバーライドしたバージョンです。
現在のリクエストを実行します。通常は、WWW::Mechanizeを使っていれば、
このようなレベルで作業し様とはまったく思わないでしょうから、こう
すべきでしょう
</para>
<para>
<code>$request</code>が修正されていることは覚えておいてください。
</para>
<para>
<link xref='{tag:xlink uri='HTTP::Response'>HTTP::Response</xlink>'}<xlink uri='HTTP::Response'>HTTP::Response</xlink></link>オブジェクトを返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;update_html( $html )</title>
<para>
mechが見つけたHTMLを置き換えることができます。リンクやフォームを更新
します。
</para>
<para>
もし不恰好な出力をされたページを持っており、更新する気があるというので
あればリンクは正しい形で出てくるでしょう:
</para>
<verbatim><![CDATA[
my $html = $mech->content;
$html =~ s[</option>.?.?.?</td>][</option></select></td>]isg;
$mech->update_html( $html );
]]></verbatim>
</sect2>
<sect2>
<title>$mech-&gt;_parse_html()</title>
<para>
HTMLドキュメントから得られるフォームとリンクを初期化する内部メソッド
です。もしサブクラスでこれをオーバーライドしたり、複数回これを呼び出し
たくなったら、どうぞそうしてください。
</para>
</sect2>
<sect2>
<title>$mech-&gt;_modify_request( $req )</title>
<para>
ずたずたに切り裂かれた内部ヘッダによってリクエストを編集します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;_make_request()</title>
<para>
<link xref='WWW::Mechanize::Cached'>WWW::Mechanize::Cached</link>のように、サブクラスでリクエストを中断させる
のに便利なメソッドです。
</para>
</sect2>
</sect1>
<sect1>
<title>使用が推奨されないメソッド</title>
<para>
このメソッドはより正しく柔軟なメソッドで置き換えられています。そちら
代わりにお使いください。
</para>
<sect2>
<title>$mech-&gt;follow($string|$num)</title>
<para>
<strong>非推奨になっており</strong>、より柔軟な<code><link xref='follow_link()'>follow_link()</link></code>を使うことが
勧められます。
</para>
<para>
リンクを追跡します。文字列を与えれば、そのテキストがこの文字列にマッチ
する最初のリンクが追跡されます。番号を与えれば、ページ中の
<emphasis>$num</emphasis>番目のリンクになります。リンクは0から始まることに注意して
ください。
</para>
<para>
ページ中にリンクが見つかればtrueを、そうでなければundefを返します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;form($number|$name)</title>
<para>
<strong>非推奨になっており</strong>、<code><link xref='form_name()'>form_name()</link></code>または<code><link xref='form_number()'>form_number()</link></code>を
使うことが勧められます。
</para>
<para>
渡されたのが数字だけの文字列か否かによって、フォームを番号または名前で
選択します。これは、もし数字だけの名前をもつフォームがあった場合に、
このメソッドは正しく動かないかも知れないことを意味しています。
</para>
</sect2>
</sect1>
<sect1>
<title>内部使用限定のメソッド</title>
<para>
これらのメソッドは内部でのみ使われます。これらについて知る必要は多分
ないでしょう。
</para>
<sect2>
<title>$mech-&gt;_reset_page()</title>
<para>
ページを解析した際のガラクタのような内部フィールドをリセットします。
</para>
</sect2>
<sect2>
<title>$mech-&gt;_extract_links()</title>
<para>
Webページの今テントからリンクを抽出するもので、<link xref='WWW::Mechanize::Link'>WWW::Mechanize::Link</link>
の<code>{links}</code>プロパティを一般化します。
</para>
</sect2>
<sect2>
<title>$mech-&gt;_push_page_stack() / $mech-&gt;_pop_page_stack()</title>
<para>
エージェントは訪れたページをスタックしており、BACKの際など必要になった
時にはこれで取り出します。
</para>
<para>
現在のページは新しいページを取得する前にスタックに追加されなければ
いけませんし、BACKが発生した際にはスタックから取り出されなければ
いけません。
</para>
<para>
どちらも引数を与えられても、$mechオブジェクトを操作します。
</para>
</sect2>
<sect2>
<title>warn( @messages )</title>
<para>
Fatalでない問題と診断用のための、中心となるワーニングメソッドです。
デフォルトでは<code>CORE::warn</code>を呼びますが、コンストラクタで<code>onwarn</code>を
セットすることで上書きできます。
</para>
</sect2>
<sect2>
<title>die( @messages )</title>
<para>
中心となるエラーメソッドです。デフォルトでは<code>CORE::die</code>を呼びますが、
コンストラクタで<code>onerror</code>をセットすることで上書きできます。
</para>
</sect2>
</sect1>
<sect1>
<title>この他のドキュメント</title>
<sect2>
<title><emphasis>Spidering Hacks</emphasis>, by Kevin Hemenway and Tara Calishain</title>
<para>
O'Reilly(<link xref='{tag:xlink uri='http:#/www.oreilly.com/catalog/spiderhks/'>http:#/www.oreilly.com/catalog/spiderhks/</xlink>'}<xlink uri='http://www.oreilly.com/catalog/spiderhks/'>http://www.oreilly.com/catalog/spiderhks/</xlink></link>)刊の
<emphasis>Spidering Hacks</emphasis>はscreen-scrapingとspideringについてもっと知りたい
人にとってすばらしい本です。
</para>
<para>
この本には6つのMechハックおよびMechの派生物があります:
</para>
<list>
<item><itemtext>#21 WWW::Mechanize 101</itemtext>
</item>
<item><itemtext>#22 Scraping with WWW::Mechanize</itemtext>
</item>
<item><itemtext>#36 Downloading Images from Webshots</itemtext>
</item>
<item><itemtext>#44 Archiving Yahoo! Groups Messages with WWW::Yahoo::Groups</itemtext>
</item>
<item><itemtext>#64 Super Author Searching</itemtext>
</item>
<item><itemtext>#73 Scraping TV Listings</itemtext>
</item>
</list>
<para>
この本はSlashdotで積極的にレビューされています:
<link xref='{tag:xlink uri='http:#/books.slashdot.org/article.pl?sid=03/12/11/2126256'>http:#/books.slashdot.org/article.pl?sid=03/12/11/2126256</xlink>'}<xlink uri='http://books.slashdot.org/article.pl?sid=03/12/11/2126256'>http://books.slashdot.org/article.pl?sid=03/12/11/2126256</xlink></link>
</para>
</sect2>
<sect2>
<title>Web上のリソース</title>
<list>
<item><itemtext>WWW::Mechanize Development mailing list</itemtext>
<para>
Sourceforgeによって配信されており、Mechへの貢献者たちが様々なことを
話し合う場になっています。 <link xref='{tag:xlink uri='http:#/sourceforge.net/mail/?group_id=83309'>http:#/sourceforge.net/mail/?group_id=83309</xlink>'}<xlink uri='http://sourceforge.net/mail/?group_id=83309'>http://sourceforge.net/mail/?group_id=83309</xlink></link>
</para>
</item>
<item><itemtext>LWP mailing list</itemtext>
<para>
LWPメーリングリストは<link xref='{tag:xlink uri='http:#/lists.perl.org/showlist.cgi?name=libwww'>http:#/lists.perl.org/showlist.cgi?name=libwww</xlink>'}<xlink uri='http://lists.perl.org/showlist.cgi?name=libwww'>http://lists.perl.org/showlist.cgi?name=libwww</xlink></link>に
あり、WWW::Mechanize開発リストよりも一般的でユーザー主導になっています。
LWPはMechの基盤ですから、これはMechユーザーにとって良いリストです。
</para>
</item>
<item><itemtext><link xref='WWW::Mechanize::Examples'>WWW::Mechanize::Examples</link></itemtext>
<para>
手当たり次第にユーザから投稿されたサンプル群で、Mechanizeディストリ
ビューションに含まれています。
</para>
</item>
<item><itemtext><link xref='{tag:xlink uri='http:#/www.perl.com/pub/a/2003/01/22/mechanize.html'>http:#/www.perl.com/pub/a/2003/01/22/mechanize.html</xlink>'}<xlink uri='http://www.perl.com/pub/a/2003/01/22/mechanize.html'>http://www.perl.com/pub/a/2003/01/22/mechanize.html</xlink></link></itemtext>
<para>
テレビ番組表をWWW::Mechanizeを使ってスクラップすることについての
Chris Ballの記事です。
</para>
</item>
<item><itemtext><link xref='{tag:xlink uri='http:#/www.stonehenge.com/merlyn/LinuxMag/col47.html'>http:#/www.stonehenge.com/merlyn/LinuxMag/col47.html</xlink>'}<xlink uri='http://www.stonehenge.com/merlyn/LinuxMag/col47.html'>http://www.stonehenge.com/merlyn/LinuxMag/col47.html</xlink></link></itemtext>
<para>
Yahoo Newsの画像のスクラップについてのRandal Schwartzの記事です。
これは既に古くなっています: 彼はマッチするリンクを探すのにリンクリストを
歩きまわりましたが、これの発行時に<code>find_link()</code>メソッドがあれば
その必要はなかったでしょう。
</para>
</item>
<item><itemtext><link xref='{tag:xlink uri='http:#/www.perladvent.org/2002/16th/'>http:#/www.perladvent.org/2002/16th/</xlink>'}<xlink uri='http://www.perladvent.org/2002/16th/'>http://www.perladvent.org/2002/16th/</xlink></link></itemtext>
<para>
Mark FowlerによるPerl Advent Calendar上のWWW::Mechanizeページ。
</para>
</item>
<item><itemtext><link xref='{tag:xlink uri='http:#/www.linux-magazin.de/Artikel/ausgabe/2004/03/perl/perl.html'>http:#/www.linux-magazin.de/Artikel/ausgabe/2004/03/perl/perl.html</xlink>'}<xlink uri='http://www.linux-magazin.de/Artikel/ausgabe/2004/03/perl/perl.html'>http://www.linux-magazin.de/Artikel/ausgabe/2004/03/perl/perl.html</xlink></link></itemtext>
<para>
ドイツ誌<emphasis>Linux Magazin</emphasis>のMichael SchilliによるMechおよび
<link xref='WWW::Mechanize::Shell'>WWW::Mechanize::Shell</link>の記事。
</para>
</item>
</list>
</sect2>
<sect2>
<title>その他のMechanizeを使用するモジュール</title>
<para>
以下はMechanizeを使用しているかサブクラスになっているモジュールです。
他にあれば教えてください:
</para>
<list>
<item><itemtext><link xref='WWW::Bugzilla'>WWW::Bugzilla</link></itemtext>
</item>
<item><itemtext><link xref='WWW::Google::Groups'>WWW::Google::Groups</link></itemtext>
</item>
<item><itemtext><link xref='WWW::Mechanize::Cached'>WWW::Mechanize::Cached</link></itemtext>
</item>
<item><itemtext><link xref='WWW::Mechanize::FormFiller'>WWW::Mechanize::FormFiller</link></itemtext>
</item>
<item><itemtext><link xref='WWW::Mechanize::Shell'>WWW::Mechanize::Shell</link></itemtext>
</item>
<item><itemtext><link xref='WWW::Mechanize::Sleepy'>WWW::Mechanize::Sleepy</link></itemtext>
</item>
<item><itemtext><link xref='WWW::Mechanize::SpamCop'>WWW::Mechanize::SpamCop</link></itemtext>
</item>
<item><itemtext><link xref='WWW::Mechanize::Timed'>WWW::Mechanize::Timed</link></itemtext>
</item>
<item><itemtext><link xref='WWW::SourceForge'>WWW::SourceForge</link></itemtext>
</item>
<item><itemtext><link xref='WWW::Yahoo::Groups'>WWW::Yahoo::Groups</link></itemtext>
</item>
</list>
</sect2>
</sect1>
<sect1>
<title>要望とバグ</title>
<para>
要望や示唆、バグ（ヤバッ！）は <xlink uri='http://rt.cpan.org/'>http://rt.cpan.org/</xlink> のRTバグ
トラッキングシステムか、 bug-WWW-Mechanize@rt.cpan.org へのemailで
報告してください。これは私が追跡するのを簡単にしてくれます。
</para>
<para>
<link xref='{tag:xlink uri='http:#/rt.cpan.org/NoAuth/Bugs.html?Dist=WWW-Mechanize'>http:#/rt.cpan.org/NoAuth/Bugs.html?Dist=WWW-Mechanize</xlink>'}<xlink uri='http://rt.cpan.org/NoAuth/Bugs.html?Dist=WWW-Mechanize'>http://rt.cpan.org/NoAuth/Bugs.html?Dist=WWW-Mechanize</xlink></link> はMechanize
へのRTキューです。あなたのバグが既に報告されていないか見るにはこちらを
チェックしてください。
</para>
</sect1>
<sect1>
<title>Author</title>
<para>
Copyright 2004 Andy Lester &lt;andy@petdance.com&gt;
</para>
<para>
Artistic Licenseに基づきリリースされています。
Kirrily Robertのすばらしい<link xref='WWW::Automate'>WWW::Automate</link>パッケージをベースにしました。
</para>
</sect1>
</pod>
