如何使用Mechanize填充输入元素的值?

时间:2014-02-03 21:38:51

标签: ruby nokogiri mechanize

如何使用Mechanize更改填充输入元素的值?

我想要做的是将游侠http://d.pr/i/nMuM设置为介于2010和默认值2014之间,以便正确的卡车显示进行解析。那可能吗?

我正在关注示例here,但它似乎无效。

这是代码:

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|

    bouwjaar_range_field = page.search("#imprp0")

    bouwjaar_range_details = bouwjaar_range_field.search(".details")

    input = bouwjaar_range_details.search("input")[0]

    input.value = "2010"

end

这是输出:

/Users/username/Dropbox/Development/Rails/folder/lib/tasks/experiment.rb:20:in `block in <main>': undefined method `value=' for #<Nokogiri::XML::Element:0x007fd4ab0fd9a8> (NoMethodError)
    from /Users/username/.rvm/gems/ruby-2.0.0-p353@global/gems/mechanize-2.7.3/lib/mechanize.rb:442:in `get'
    from /Users/username/Dropbox/Development/Rails/folder/lib/tasks/experiment.rb:10:in `<main>'
[Finished in 1.9s with exit code 1]

pp input给出了以下输出:

#(Element:0x3fe33c82ab68 {
  name = "input",
  attributes = [
    #(Attr:0x3fe33c869430 { name = "type", value = "hidden" }),
    #(Attr:0x3fe33c8692a0 { name = "name", value = "slider_from" }),
    #(Attr:0x3fe33c869278 { name = "value", value = "1968" })]
  })

puts input给出了以下输出:

<input type="hidden" name="slider_from" value="1968">

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这里有很多问题。首先,您的表单不是表单,而是输入。甚至不是“形式”输入,而是“dom节点”输入。理解差异后,找到表单并使用以下值设置值:

form['key'] = 'value'

答案 1 :(得分:0)

看起来元素具有set_attribute方法。你应该可以做到

form.set_attribute 'value', 1970

并获得正确的结果。

这对我来说过于复杂,但它应该可以解决您当前的问题。 (我和Mechanize一起工作过很多次,虽然不是很近。)