7

我有很多我在工作中编写的 GreaseMonkey 脚本,它们会自动将我登录到我们这里的内部站点。除了我们的时间表应用程序使用 HTTP 身份验证之外,我已经设法为这些站点中的几乎每个站点编写了一个脚本。

有没有办法可以使用 GreaseMonkey 自动登录这个网站?

编辑:我知道浏览器中的存储密码功能,但我的脚本更进一步,通过检查我是否在加载时(通过遍历 HTML)登录到站点,然后将帖子提交到登录页面。这消除了必须加载网站、进入登录页面、输入我的凭据,然后点击提交的步骤

4

4 回答 4

6

可以通过设置“Authorization”HTTP 标头使用 HTTP 身份验证登录,此标头的值设置为字符串“基本用户名:密码”,但字符串的“用户名:密码”部分使用 Base 64 编码.

http://frontier.userland.com/stories/storyReader$2159

一些研究发现 GreaseMonkey 内置了一个函数,您可以在其中向名为 GM_xmlhttpRequest 的服务器发送 GET / POST 请求

http://diveintogreasemonkey.org/api/gm_xmlhttprequest.html

所以把它们放在一起(并且还让这个 JavaScript 代码将字符串转换为 base64 我得到以下

http://www.webtoolkit.info/javascript-base64.html

var loggedInText = document.getElementById('metanav').firstChild.firstChild.innerHTML;
if (loggedInText != "logged in as jklp") {
    var username = 'jklp';
    var password = 'jklpPass';
    var base64string = Base64.encode(username + ":" + password);

    GM_xmlhttpRequest({
        method: 'GET',
        url: 'http://foo.com/trac/login',
        headers: {
            'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey/0.3',
            'Accept': 'application/atom+xml,application/xml,text/xml',
            'Authorization':'Basic ' + base64string,
        }
    });
}

因此,当我现在访问该站点时,它会遍历 DOM,如果我没有登录,它会自动让我登录。

于 2008-09-11T03:18:58.447 回答
3

每个请求都会发送 HTTP 身份验证信息,而不仅仅是登录。浏览器会在您第一次登录后缓存会话的登录信息。因此,通过尝试检查您是否已经登录,您并没有真正保存任何东西。

您也可以完全忘记greasemonkey,只需在网址上登录,如下所示:

http://username:password@host/

当然,将其保存在书签中可能会带来安全风险,但不会比将密码保存在浏览器中更严重。

于 2008-09-08T13:46:14.157 回答
1

为什么不使用 Firefox(我假设您使用的是 Firefox)来使用密码管理器记住您的凭据?

我找到了这个链接:HTTP Authentication with HTML Forms。看起来您可以使用 javascript 进行 HTTP 身份验证。不过,当您第一次导航到 URL 时,我认为您不会有 Greasemonkey 中断。您可能必须设置某种启动点,您可以使用它让greasemonkey 自动重定向+登录。例如,您可以让本地页面在查询字符串中获取目标 URL,让 Greasemonkey 自动执行身份验证 + 重定向。唯一的问题是您必须将站点书签与您用作入口点的书签的启动页面包装在一起。

于 2008-09-08T05:05:01.523 回答
0

http://username:password@host/ ” 在 IE 上不工作,FireFox 工作正常。

于 2010-01-15T08:11:20.200 回答