문제

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을 가짜로 만들지 않으면 페이지 클래스가 지금 페이지이기 때문에 작동합니다.

puts page.class # => Page

그렇다면 File Object 대신 Mechanize와 함께 가짜 웹을 사용하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

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 플래그로 컬을 호출하는 데 응답에 헤더가 포함됩니다.

다른 팁

옵션 추가를 쉽게 수정할 수 있습니다 :content_type => "text/html" 당신의 FakeWeb.register_uri 전화

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top