人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

rubyのmechanizeで質問です。
.search("form[@name = 'NAME']).each do| name |
を使用して、あるページのNAME要素の中身を抜き出したいと思っています。
この際、NAMEがひとつだけのページと2つ複数こあるページが混在しています。2つあるページは最後のNAME要素の中身を抜き出したいのですが、同じnameが2つある場合、最後のnameの内容を取得するにはどのように記述すればよいのでしょうか?
よろしくお願いします。


●質問者: osietekudasaibadr
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

Array の last メソッドを使う。

name_element = page.search("form[@name = 'NAME']").last
unless name_element.nil? then
 NAME を使う処理
end

Array のリファレンス。
http://doc.ruby-lang.org/ja/1.9.3/class/Array.html


もし、ベタに書くなら、こんな感じ。

name_element = nil
page.search("form[@name = 'NAME']").each { |ele|
 name_element = ele
}
unless name_element.nil? then
 NAME を使う処理
end


追記です。

例えば、value='A'の場合だったら処理を実行するというにするにはどうすればいいのでしょうか?

きっと、form も複数あるんでしょうね。
動作を試してませんが、こんな雰囲気で。

last_element = nil
page.forms.each { |form|
 form.field_with(:value => 'A') { |field|
 last_element = field
 }
}
unless last_element.nil? then
 value='A' な要素を使う処理
end

もし、form を名前とかで特定できるなら、こんなふうにも。

last_element = nil
page.form_with(:name => 'form_1') { |form|
 form.field_with(:value => 'A') { |field|
 last_element = field
 }
}
unless last_element.nil? then
 value='A' な要素を使う処理
end

探したいのが、<input type="button"> だったら、field_with ではなく、button_with メソッドを使う。
http://w.livedoor.jp/ruby_mechanize/d/Mechanize%3A%3AForm


関連するドキュメントを。
http://mechanize.rubyforge.org/Mechanize/Form.html
http://mechanize.rubyforge.org/Mechanize/Form/Field.html


osietekudasaibadrさんのコメント
すみません。私の実力が足らず、思うに処理ができませんでした・・・・。 良く見たら、抜き出したいformの中に含まれるINPUTtypeのvalue名が他のものとは違うことに気がつきました。 例えば、value='A'の場合だったら処理を実行するというにするにはどうすればいいのでしょうか?

a-kuma3さんのコメント
>> 例えば、value='A'の場合だったら処理を実行するというにするにはどうすればいいのでしょうか? << 回答に追記しました。 最初の質問にあった「最後の」というのを意識して書いてますが、適宜、読み替えてください。

osietekudasaibadrさんのコメント
a-kuma3さん 本当にありがとうございます。 おかげで思い通りの結果に処理をすることができました。 わからないことだらけの初心者ですが、rubyを頑張って習得したいと思います。 ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ