代码之家  ›  专栏  ›  技术社区  ›  millisami

用人造网机械化

  •  1
  • millisami  · 技术社区  · 15 年前

    我正在使用机械化从页面中提取链接。 为了便于开发,我使用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
    

    如果我不伪造标记的URL,它会起作用,因为page类现在是page

    puts page.class # => Page
    

    那么,如何使用FakeWeb和机械化来返回页面而不是文件对象呢?

    2 回复  |  直到 13 年前
        1
  •  7
  •   Steve Graham    15 年前

    使用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将在响应中包含头。

        2
  •  5
  •   Felipe Lima    13 年前

    您可以很容易地修复添加选项的问题 :content_type => "text/html" 你自己 FakeWeb.register_uri 呼叫