Ruby on rails 无法在ruby上使用mechanize自动填写表单

Ruby on rails 无法在ruby上使用mechanize自动填写表单,ruby-on-rails,ruby,forms,mechanize,Ruby On Rails,Ruby,Forms,Mechanize,我正在尝试测试机械化宝石。我想用这个表格订阅一个网站。我正确地选择了所有元素(我猜),但是提交按钮没有提交表单。提交表单时,会立即收到邮件。我是一个新的创业板,我测试注册到一个网站与一个单一的强制性领域。我正在使用webservice for spam mail来检查它是否有效,因此每个邮件字段都可以替换为@moncourrier.fr.nf之前的任何内容,然后检查yopmail网站是否收到邮件,但我什么也没有收到。你知道他为什么不工作吗 require 'rubygems' require '

我正在尝试测试机械化宝石。我想用这个表格订阅一个网站。我正确地选择了所有元素(我猜),但是提交按钮没有提交表单。提交表单时,会立即收到邮件。我是一个新的创业板,我测试注册到一个网站与一个单一的强制性领域。我正在使用webservice for spam mail来检查它是否有效,因此每个邮件字段都可以替换为@moncourrier.fr.nf之前的任何内容,然后检查yopmail网站是否收到邮件,但我什么也没有收到。你知道他为什么不工作吗

require 'rubygems'
require 'mechanize'
require'pry'


agent = Mechanize.new
agent.get('http://blackburnecreek.com/newsletter-registration') do |page|
form=agent.page.forms[1]
button=form.button_with(:value => "Subscribe")
agent.page.forms[1]["EMAIL"]= "testmechanizegem@moncourrier.fr.nf"

agent.submit(form, button)


end

您的表单没有被提交,因为实际表单使用jquery,jquery使用一些额外的参数提交表单。他们正在解除表单提交事件的绑定,并执行ajax请求以提交表单,而不是使用额外的参数
id

您可以通过查看浏览器“网络”选项卡中正在启动的请求来确认,该请求包含以下参数:

页面还运行以下javascript,将额外的id参数添加到请求中:

function mce_init_form(){
    jQuery(document).ready( function(jQuery) {
      var options = { errorClass: 'mce_inline_error', errorElement: 'div', onkeyup: function(){}, onfocusout:function(){}, onblur:function(){}  };
      var mce_validator = jQuery("#mc-embedded-subscribe-form").validate(options);
jQuery("#mc-embedded-subscribe-form").unbind('submit');//remove the validator so we can get into beforeSubmit on the ajaxform, which then calls the validator
      options = { url: 'http://blackburnecreek.us8.list-manage.com/subscribe/post-json?u=68692d660a16c9b7e4be6f51e&id=f19ba31349&c=?', type: 'GET', dataType: 'json', contentType: "application/json; charset=utf-8",
请参阅上述函数中的
url:
部分。因此,当您通过mechanize提交它时,您正在执行一个无效的请求(没有参数id)


我猜mechanize不支持javascript的执行。我建议您使用capybara,它使用类似poltergiest的web驱动程序,以促进对js执行的支持。

谢谢您的解释,我对它失去了理智。