<frame> または <iframe> を表現するクラスです。
Mechanize においては「フレームの先の HTML」は明示的に取得します。自動で読み込むことはありません。
Mechanize::Page::Link を継承しています。
画面を分割するフレーム <frame> の場合は
Mechanize::Page#frames に配列で格納されており、
Mechanize::Page#frame_with や
Mechanize::Page#frames_with で抽出します。
src 属性の値は
#src メソッドで、name 属性の値は
#name メソッドで取得できます。
なので、たとえば
<frameset cols="150,*">
<frame src="frame_left.htm" name="left">
<frame src="frame_right.htm" name="right">
</frameset>
というフレームがあったとすると、Mechanize はこれを
<a href="frame_left.htm">left</a>
<a href="frame_right.htm">right</a>
であるかのようにみなして処理します。left という名前のフレームを選択し内容を取得するには
agent.page.frame_with(:name =>'left').click
のように、内容が frame_left.htm であるフレームを選択しその内容を取得するには
agent.page.frame_with(:src => 'frame_left.htm').click
のように書くことができます。
<frameset> の情報は消えているので、フレームの入れ子や位置関係で選択することはできません。<noframes> を特別に解釈するようなこともありません。なお、通常の Web ブラウザは、フレーム内の HTML をリファラつきで取得します。Mechanize が click でフレーム内容を取得する動作は妥当です。
途中に別 HTML を表示するインラインフレーム <iframe> の場合は
Mechanize::Page#iframes に配列で格納されており、
Mechanize::Page#iframe_with や
Mechanize::Page#iframes_with で抽出します。
上記のフレームの場合同様、src 属性の値は
#src メソッドで、name 属性の値は
#name メソッドで取得できます。
たとえば
<iframe src="data/iframe.htm" name="test" width="400" height="200">
インラインフレームが有効なブラウザで見てください
</iframe>
というインラインフレームがあったとすると、Mechanize はこれを
<a href="data/iframe.htm">test</a>
であるかのようにみなして処理をします。インラインフレームの内容を取得するには
agent.page.iframe_with(:name =>'test').click
のように書くことができます。
「インラインに展開」することはできません。必ず、ひとつの個別のページとして明示的に取得し処理する必要があります。