我使用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
如何输入字符串,提交表单并以数组的形式返回结果?
答案 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