首页 > 解决方案 > 无法在红宝石上使用机械化自动填充表格

问题描述

我正在尝试测试机械化宝石。我想使用该表格订阅一个网站。我正确选择了所有元素(我猜)但提交按钮没有提交表单。提交表单后,会立即收到一封邮件。我是 gem 的新手,我正在测试注册到具有单个必填字段的网站。我正在使用垃圾邮件的网络服务来检查它是否有效,因此每个邮件字段都可以替换为@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

标签: ruby-on-railsrubyformsmechanize

解决方案


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

您可以通过查看在浏览器的网络选项卡中发起的请求来确认,它包含以下参数:

在此处输入图像描述 该页面还按照 javascript 运行,该 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 执行的支持。


推荐阅读