最終更新: kitamomonga 2010年08月24日(火) 10:50:55履歴
<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のように書くことができます。
「インラインに展開」することはできません。必ず、ひとつの個別のページとして明示的に取得し処理する必要があります。
- new - Mechanize::Page::Frame オブジェクトを生成する
- src - alias #href
- name - alias #text
- node - このフレームを表す HTML ノードを返す
- href - フレームの URL を文字列で返す
- text - このフレームの名前を文字列で返す
- attributes - alias #node
- page - このフレームを含むページオブジェクトを返す
- to_s - alias #text
- referer - alias #page
- uri - フレームの URL を URI オブジェクトで返す
- click - このフレームの指す内容にアクセスし結果を履歴に登録して返す
このフレームオブジェクトを作成したときに使用した HTML ノードを Nokogiri::HTML::Element? 等で返します。
Mechanize::Page::Link#node を参照してください。中身的には Nokogiri::HTML.parse(このframeタグ) です。
このフレームが指す 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 というエイリアスがあります。
このフレームの名前を文字列で返します。
パーサが解釈した name 属性の値がそのまま返ります。継承元クラスの Mechanize::Page::Link#text に該当します。
<frame src="frame_left.htm" name="left">という HTML で表されるフレームだった場合、この name メソッドは文字列 "left" を返します。name 属性がないフレームだった場合には nil が返ります。
#name というエイリアスがあります。
このフレームオブジェクトを作成したときに使用した Mechanize::Page オブジェクトを返します。
通常はこのフレームオブジェクトを含むページオブジェクトが返ります(frame 要素や iframe 要素そのものが書かれているページ)。