登录表单是否受到用户脚本的保护?
Login form is protected against userscripts?
这是来自站点 rutracker.org:
的登录表单
<form id="top-login-form" action="http://login.rutracker.org/forum/login.php" method="post" style="display: inline;">
<input id="top-login-uname" type="text" placeholder="имя" accesskey="l" tabindex="1" name="login_username">
<input id="top-login-pwd" type="password" placeholder="пароль" tabindex="2" name="login_password">
<input id="top-login-btn" type="submit" tabindex="3" value="вход" name="login">
</form>
这是自动登录的 Greasemonkey 脚本:
// ==UserScript==
// @include http://rutracker.org/*
// @grant none
// ==/UserScript==
var f = document.getElementById("top-login-form");
f.elements.namedItem("login_username").value = "xxxxxx";
f.elements.namedItem("login_password").value = "yyyyyyy";
f.elements.namedItem("login").value = "%E2%F5%EE%E4";
f.submit();
问题是实际上只发送了两个值,所以Post请求是login_username=xxxxxxx&login_password=yyyyyyy
insread of login_username=xxxxxxx&login_password=yyyyyyy&login=%E2%F5%EE%E4
因此缺少 login=%E2%F5%EE%E4
。
这是对 UserJS 的某种保护吗?
我该如何解决这个问题?
Is it some kind of protection against UserJS?
没有
提交表单时,点击提交按钮为成功控件。成功的控件的名称和值包含在表单数据中。
您不是通过单击提交按钮来提交表单。您正在调用表单对象的 submit
方法。因此,提交按钮不成功,其数据未包含在表单中。
How can I solve this problem?
在隐藏输入中复制提交按钮的名称和值。
login
不是一个字段,它是一个按钮。你不填写它 - 你点击它。也不需要 submit
- 点击即可。
f.elements.namedItem("login").click()
这是来自站点 rutracker.org:
的登录表单<form id="top-login-form" action="http://login.rutracker.org/forum/login.php" method="post" style="display: inline;">
<input id="top-login-uname" type="text" placeholder="имя" accesskey="l" tabindex="1" name="login_username">
<input id="top-login-pwd" type="password" placeholder="пароль" tabindex="2" name="login_password">
<input id="top-login-btn" type="submit" tabindex="3" value="вход" name="login">
</form>
这是自动登录的 Greasemonkey 脚本:
// ==UserScript==
// @include http://rutracker.org/*
// @grant none
// ==/UserScript==
var f = document.getElementById("top-login-form");
f.elements.namedItem("login_username").value = "xxxxxx";
f.elements.namedItem("login_password").value = "yyyyyyy";
f.elements.namedItem("login").value = "%E2%F5%EE%E4";
f.submit();
问题是实际上只发送了两个值,所以Post请求是login_username=xxxxxxx&login_password=yyyyyyy
insread of login_username=xxxxxxx&login_password=yyyyyyy&login=%E2%F5%EE%E4
因此缺少 login=%E2%F5%EE%E4
。
这是对 UserJS 的某种保护吗?
我该如何解决这个问题?
Is it some kind of protection against UserJS?
没有
提交表单时,点击提交按钮为成功控件。成功的控件的名称和值包含在表单数据中。
您不是通过单击提交按钮来提交表单。您正在调用表单对象的 submit
方法。因此,提交按钮不成功,其数据未包含在表单中。
How can I solve this problem?
在隐藏输入中复制提交按钮的名称和值。
login
不是一个字段,它是一个按钮。你不填写它 - 你点击它。也不需要 submit
- 点击即可。
f.elements.namedItem("login").click()