ruby-on-rails - 无法在红宝石上使用机械化自动填充表格
问题描述
我正在尝试测试机械化宝石。我想使用该表格订阅一个网站。我正确选择了所有元素(我猜)但提交按钮没有提交表单。提交表单后,会立即收到一封邮件。我是 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
解决方案
您的表单没有被提交,因为实际的表单使用 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 执行的支持。
推荐阅读
- c++ - 如何使用 std::optional 返回 NULL 值?
- android - Android 材质范围日期选择器未正确放置
- python - Pandas groupby 折叠第一行组
- python - 有没有办法使用乌龟在“背景”中绘制?
- git - 你如何告诉 git 删除和添加确实是一个动作?
- jenkins - Maven 3.5.2 是否支持 Java11 构建
- google-cloud-platform - 使用部署管理器的未经身份验证的 CloudRun
- jquery - 导航栏(折叠)不起作用 Bootstrap 5
- r - 当我写入 Excel 工作表时,如何从数字单元格 R 中取出绿色三角形?
- java - 在 Page 类中使用 Test 类中的驱动程序时出现驱动程序 Null 指针异常