1

ページからリンクを抽出するために Mechanize を使用しています。開発を容易にするために、コードを実行するたびに待ち時間と煩わしさを軽減するために、fakeweb を使用して超高速応答を行います。

tags_url = "http://website.com/tags/"
FakeWeb.register_uri(:get, tags_url, :body => "tags.txt")

agent = WWW::Mechanize.new
page = agent.get(tags_url)
page.links.each do |link|
   puts link.text.strip
end

上記のコードを実行すると、次のように表示されます。

nokogiri_test.rb:33: undefined method `links' for #<WWW::Mechanize::File:0x9a886e0> (NoMethodError)

ページオブジェクトのクラスを調べた後

puts page.class # => File

tags_url を偽造しなければ、ページ クラスが Page になったので機能します。

puts page.class # => Page

では、mechanize で fakeweb を使用して、File オブジェクトの代わりに Page を返すにはどうすればよいでしょうか?

4

2 に答える 2

7

FakeWeb を使用して、プリフェッチされた HTTP リクエストを再生します。

tags_url = "http://website.com/tags/"
request  = `curl -is #{tags_url}`
FakeWeb.register_uri(:get, tags_url, :response => request)

agent = WWW::Mechanize.new
page = agent.get(tags_url)
page.links.each do |link|
   puts link.text.strip
end

-i フラグを指定して curl を呼び出すと、応答にヘッダーが含まれます。

于 2009-12-09T10:38:05.097 に答える
5

呼び出しにオプションを追加することで簡単に修正でき:content_type => "text/html"ますFakeWeb.register_uri

于 2011-06-19T17:50:30.010 に答える