Ruby Mechanize wiki (ja) - Mechanize::Page::Frame

Mechanize::Page::Frame


<frame> または <iframe> を表現するクラスです。
Mechanize においては「フレームの先の HTML」は明示的に取得します。自動で読み込むことはありません。
Mechanize::Page::Link を継承しています。

画面を分割するフレーム <frame> の場合は Mechanize::Page#frames に配列で格納されており、Mechanize::Page#frame_withMechanize::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_withMechanize::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
のように書くことができます。
「インラインに展開」することはできません。必ず、ひとつの個別のページとして明示的に取得し処理する必要があります。


Mechanize::Page::Frame.new(node, mech, referer)

Mechanize::Page::Frame オブジェクトを生成します。ユーザーが使用することはありません。

src

alias #href

name

alias #text

node

このフレームオブジェクトを作成したときに使用した HTML ノードを Nokogiri::HTML::Element? 等で返します。
Mechanize::Page::Link#node を参照してください。中身的には Nokogiri::HTML.parse(このframeタグ) です。

href

このフレームが指す HTML の URL を文字列で返します。
パーサが解釈した src 属性の値がそのまま返ります。継承元クラスの Mechanize::Page::Link#href に該当します。相対 URL はそのままです。
<frame src="frame_left.htm" name="left">
という HTML で表されるフレームだった場合、この src メソッドは文字列 "frame_left.htm" を返します。何かの間違いで src 属性のないフレームだった場合には nil が返ります。
URI オブジェクトで欲しい場合は #uri メソッドを使用します。
#src というエイリアスがあります。

text

このフレームの名前を文字列で返します。
パーサが解釈した name 属性の値がそのまま返ります。継承元クラスの Mechanize::Page::Link#text に該当します。
<frame src="frame_left.htm" name="left">
という HTML で表されるフレームだった場合、この name メソッドは文字列 "left" を返します。name 属性がないフレームだった場合には nil が返ります。
#name というエイリアスがあります。

attributes

alias #node

page

このフレームオブジェクトを作成したときに使用した Mechanize::Page オブジェクトを返します。
通常はこのフレームオブジェクトを含むページオブジェクトが返ります(frame 要素や iframe 要素そのものが書かれているページ)。

to_s

alias #text

referer

alias #page

uri

このフレームのフレーム先 URL を Ruby 標準の URI オブジェクトで返します。
#href の値を URI.escape して URI.parse したものが返ります。相対 URL だった場合は相対 URI なオブジェクトが返ります。
文字列で欲しい場合は #href を使用します。

click

#href の返す URL にアクセスし、サーバからの結果を履歴に登録して返します。Mechanize::Page#click と同様です。