4

現在、Mechanizeを調べています。私はRubyを初めて使用するので、しばらくお待ちください。

私は小さなテストスクリプトを書きました:

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new

page = agent.get('http://www.google.de')
pp page.title
google_form = page.form_with(:name => 'f')
google_form.q = 'test'
page = agent.submit(google_form)
pp page.title

page_links = Array.new
page.links.each do |ll|
  page_links << ll
end
puts page_links.size

これは機能します。ただしpage_links、検索結果だけではありません。また、Login、PicturesなどのGoogleリンクも含まれています。結果のリンクはスタイルクラス「1」を所有しています。class == 1のリンクのみを選択することはできますか?どうすればこれを達成できますか?

「agentalias」を変更することは可能ですか?私がグーグルアナリティクスなどを含むウェブサイトを所有している場合、私のサイトでmechanizeを使用すると、どのブラウザクライアントが表示されますか?

名前ではなくIDで要素を選択できますか?使ってみました

my_form = page.form_with(:id => 'myformid')

しかし、これは機能しません。

4

3 に答える 3

4

あなたのような場合、私はNokogiri DOM検索を使用しています。これはあなたのコードを少し書き直したものです:

require 'rubygems'
require 'mechanize'

agent = Mechanize.new

page = agent.get('http://www.google.de')
pp page.title
google_form = page.form_with(:name => 'f')
google_form.q = 'test'
page = agent.submit(google_form)
pp page.title

page_links = Array.new
#maybe you better use 'h3.r > a.l' here
page.parser.css("a.l").each do |ll|
#page.parser here is Nokogiri::HTML::Document
  page_links << ll
  puts ll.text + "=>" + ll["href"]
end
puts page_links.size

おそらく、この記事は開始するのに適した場所です: Getting-start-with-nokogiri ちなみに、この記事のサンプルでは Google 検索も扱っています ;)

于 2011-03-14T18:29:53.933 に答える
2

コードを次のように変更することで、検索結果リンクのみのリストを作成できます。

page.links.each do |ll|
  cls = ll.attributes.attributes['class']
  page_links << ll if cls && cls.value == 'l'
end

の各要素についてllpage.linksll.attributesNokogiri::XML::Elementあり、ll.attributes.attributesHashリンク上の属性を含むためll.attributes.attributes、実際のクラスを取得する必要があり、値を 'l' と比較する前に nil チェックを行う必要があります。

:idフォームを検索する基準で を使用する際の問題はObject#id、Ruby オブジェクトの内部 ID を返す Ruby のメソッドと競合することです。これに対する回避策が何であるかはわかりません。他の属性 (アクションなど) でフォームを選択しても問題ありません。

于 2010-02-02T18:21:53.280 に答える
0

あなたが探しているセレクターは次のとおりだと思います:たとえば、あなたの場合:
:dom_id

my_form = page.form_with(:dom_id => 'myformid')

于 2013-05-19T14:34:29.070 に答える