如何使用Mechanize更改dom节点输入并解析相关信息?

时间:2014-02-04 09:17:00

标签: ruby mechanize

如何更改dom节点输入并使用Mechanize解析相关信息?

我希望该网站能够展示从2010年起生产的一系列卡车,以便我能够解析相关信息。

我想要它做什么:

  1. 访问https://www.kleyntrucks.com/trucks/tractorunit/
  2. 将“MATPEULATION YEAR”(制造年份)设定为2010年和2014年的范围(http://d.pr/i/kDky
  3. 删除所列列出的所有卡车的信息(并在2010年至2014年之间制造)
  4. 这是代码:

    require "mechanize"
    
    @url = "https://www.kleyntrucks.nl/vrachtwagens/trekker/"
    
    a = Mechanize.new do |agent|
      agent.user_agent_alias = 'Mac Safari'
      agent.follow_meta_refresh = true
    end
    
    a.get(@url) do |page|
    
            # Put range input to "2010"
        bouwjaar_range_field = page.search("#imprp0")
        bouwjaar_range_details = bouwjaar_range_field.search(".details")
        input = bouwjaar_range_details.search("input")[0]
        input['value'] = "2010"
    
        puts bouwjaar_range_field
    
    end
    

    这是输出:

    <li id="imprp0" class="">
        <a name="bouwjaar"></a>
        <div class="title">Bouwjaar</div>
        <div class="details">
    
                        <input type="hidden" name="slider_from" value="2010"><input type="hidden" name="slider_till" value="2014"><input type="hidden" name="slider_selected_from" value="0"><input type="hidden" name="slider_selected_till" value="0"><input type="hidden" name="slider_units" value="">
    </div>
    </li>
    

    它没有显示我需要的所有卡车相关信息。

    有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,由于该页面正在使用AJAX更新,因此您将无法轻松使用Mechanize。

与浏览器不同,Mechanize不会在页面上执行任何Javascript,因此在更改输入时不会通过AJAX更新结果。

仍然可以使用Mechanize获取结果,但是您必须手动创建必要参数的请求(使用AJAX发布的请求;您可以使用Developer Tools查看),发布并解析结果页面。