【发布时间】:2016-03-25 11:09:37
【问题描述】:
我正在尝试在我没有源代码的网站上自动输入一些表单。找到合适的字段并用 js 填写并以编程方式提交表单是一项非常简单的任务。但是该网站是用 Angular 构建的,当单击表单提交时,输入字段的所有验证标志都会弹出,就好像没有填写任何字段一样。
浏览其他几篇文章,我意识到我需要以某种方式将变量设置在范围内,如下所示:
$scope.$apply(function() {
$scope.fieldName = varname;
});
或将字段设置为脏,如下所示:
$scope.fieldname.$dirty = true;
不幸的是,由于无法访问代码,我不确定范围可能是什么,或者如何适当地告诉 Angular 表单上的字段已以编程方式更新。
编辑
我使用 Roblox 作为此错误的示例。
网站上的不同表单,例如注册表单(以及登录后的表单)对它们进行了验证,这会引发我提到的错误。
这是我尝试在注册脚本上使用与登录脚本相同的逻辑的示例:
// ==UserScript==
// @name Roblox Account Create
// @namespace http://roblox.com/
// @version 0.1
// @description Create Roblox Account
// @author You
// @match https://www.roblox.com/
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant none
// ==/UserScript==
/* jshint -W097 */
'use strict';
var _adj = [ 'Cool', 'Masked', 'Bloody', 'Lame' ];
var _animals = [ 'Hamster', 'Moose', 'Lama', 'Duck' ];
var _months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];
var _username = _adj[ parseInt( Math.random( ) * _adj.length ) ], _pass = Math.random( ).toString( 36 ).substring( 2, 10 );
_username += _animals[ parseInt( Math.random( ) * _animals.length ) ];
_username += parseInt( Math.random( ) * 1000 );
var _dt_month = _months[ Math.floor( Math.random( ) * ( 12 ) + 0 ) ];
var _dt_day = Math.floor( Math.random( ) * ( 28 ) + 1 );
var _dt_year = Math.floor( Math.random( ) * ( 2005 - 1916 + 1 ) + 1916 );
$( '#Username' ).val( _username );
$( '#Password' ).val( _pass );
$( '#PasswordConfirm' ).val( _pass );
$( '#MonthDropdown' ).val( _dt_month );
$( '#DayDropdown' ).val( _dt_day );
$( '#YearDropdown' ).val( _dt_year );
$( '#FemaleButton' ).click( );
$( '#SignupButton' ).click( );
我尝试在更改值后将输入和更改事件添加到我的调用中,但是在将验证更新为我添加到输入字段中的值方面没有任何变化。例如:
$( '#Username' ).val( _username ).trigger( 'input' ); // Also .trigger( 'change' )
您可以通过将它们添加到 Tampermonkey 并导航到 ssl roblox homepage 来测试这两个脚本。
【问题讨论】:
-
有测试用的网页网址就好了。
-
我正在为其制作此脚本的站点是受 IP 限制的白名单。我确实有一些网站有篡改猴子自动登录到我的页面加载。其中一个网站也使用 angularjs,因此我遇到了同样的问题:Roblox
-
@BrockAdams,我已经更新了我的帖子以包含相关的测试 url 以及测试脚本来复制问题。
标签: javascript jquery angularjs greasemonkey tampermonkey