自动化网站互动 - Mechanzie - Rails

时间:2014-09-30 15:54:48

标签: ruby-on-rails ruby mechanize-ruby

我使用Mechanize gem自动与网站表单进行互动。

我尝试与之互动的网站是http://www.tastekid.com/like/books

我尝试自动提交字符串以在表单中查询并返回数组中的建议书籍。

关注the guide,我已经打印了页面布局以找到表单名称,但是,我只是找到一个没有名称的表单,nill:

require 'rubygems'
require 'mechanize'

agent = Mechanize.new
page = agent.get('http://www.tastekid.com/like/books')
pp page

如何输入字符串,提交表单并以数组的形式返回结果?

3 个答案:

答案 0 :(得分:1)

guide之后,您可以获得以下表单:

form = page.form 

我没有在表单上看到一个名字,我实际上有两个表格:一个在页面上,一个隐藏。

我致电

form.fields.first.methods.sort  #not the hidden form

并且看到我可以在表单上调用value,所以我将其设置为:

form.fields.first.value = "Blood Meridian"

然后我提交并打印出来:

page = agent.submit(form)

这对你有用!

答案 1 :(得分:1)

您可以使用form_with方法找到所需的表单。例如:

require 'mechanize'

agent = Mechanize.new
page = agent.get('http://www.tastekid.com/like/books')

the_form_you_want = page.form_with(:id => "searchFrm")  # form_with
the_form_you_want.q = 'No Country for Old Men'
page = agent.submit(the_form_you_want)
pp page

看起来书名都具有相同的类属性。要提取书名,请使用links_with方法并将该类作为定位器传递:

arr = []

page.links_with(:class => "rsrc").each do |link|
  arr << link.text
end

但是@aceofbassgreg是对的。你需要阅读机械化和nokogiri文件......

答案 2 :(得分:1)

这些答案让我觉得有些混乱,所以让我试着让它变得更简单:

page = agent.get 'http://www.tastekid.com/like/books'

只有一种形式,所以:

form = page.form
form['q'] = 'twilight'

提交表格

page = form.submit

打印a

中的文字
puts page.search('.books a').map &:text