使用相同的NAME / VALUE为多个INPUT标签机械化Page.Form.Action POST

时间:2012-11-27 21:02:54

标签: ruby mechanize

需要发布到现有网页(无需登录)并发布提交参数,其中存在多个提交表单标签,并且包含具有相同NAME和VALUE标签的相同标签;例如,在同一页面上,此INPUT提交在不同的FORM标签下重复3次:

< INPUT TYPE='Submit' NAME='submit_button' VALUE='Submit Query' >

我的Ruby代码可以识别表单标签上的字段,但是在page.forms [x] .action post上有405 HTTPMethodNotAllowed用于https://pdb.nipr.com/html/PacNpnSearch - 未处理的响应。

Ruby代码:

class PostNIPR2
def post(url)
 button_count = 0
 agent = Mechanize.new
 page = agent.get(url)
 page.forms.each do |form|
  form.buttons.each do |button|
   if(button.value == 'Submit Query')
    button_count = button_count + 1
   if (button_count == 3) 
    btn_submit_license = button.name
    puts button
    puts btn_submit_license 
    puts button.value
   end
  end
 end    
end
begin
 uform = page.forms[1]
 uform.license = "0H20649"
 uform.state = "CA"
 uform.action = 'https://pdb.nipr.com/html/PacNpnSearch'
rescue Exception => e
 error_page = e.page
end
page = agent.submit(uform)
end
url = "https://pdb.nipr.com/html/PacNpnSearch.html"
p = PostNIPR2.new
p.post(url)
end

2 个答案:

答案 0 :(得分:0)

您的问题是如何选择该按钮?如果是这样的话:

form.button_with(:name => 'submit_button')

或提交如下表格:

next_page = form.submit form.button_with(:name => 'submit_button')

此外,由于某种原因,您正在更改表单的操作,这将解释405s

答案 1 :(得分:0)

您是对的,对评论代码感到抱歉 - 问题是让form.licenseform.state更新输入参数然后form.submit发布form.button_with(:name => 'Submit Query' - 我这样做并收到405 HTTPMethodNotAllowed,而https://pdb.nipr.com/html/PacNpnSearch - unhandled response。但现在我已将代码更改为agent.page.form_with(:name => 'license_form'),现在可以正确找到我需要发布的表单;然后我得到form.button_with(:value => 'Submit Query'),然后使用agent.submit(form, button)。现在我得到了正确的结果。