読者です 読者をやめる 読者になる 読者になる

A little bit of everything

情報系大学院生の備忘録

UserScriptで自動ログオン

うちの大学にはWi-Fi アクセスポイントが張り巡らされていて、キャンパス内ならどこでもWi-Fi に繋ぐことができる。難点は、ブラウザから追加ログオンが必要なこと。PC が一瞬スリープ状態になっただけでも、ネットワークのコネクションが切れて再度追加ログオンをしなければならない。

非常に面倒なので、自動ログオンのスクリプトを書いて、ブラウザで勝手にログオンしてくれるようにする。 今回書くのはjsのUserScript(拡張子がuser.js)。

今回はGoogle Chrome拡張機能としてUserScriptを動かす。(このときはChromeのバージョン 38.0.2125.101でやりました)

こんなコードを書いた。

// ==UserScript==
// @name        autoAgwlan
// @namespace   #####
// @description This script provides auto login to agwlan w/ Google Chrome. This shall be installed through the Google Chrome's Extensions.
// @include     https://agwlan.aim.aoyama.ac.jp/*
// @exclude     https://agwlan.aim.aoyama.ac.jp/login.html
// ==/UserScript==

//user's name and password here
username = '########';
password = '########';

function apendScript(script){
    var element = document.createElement('script');
    element.id = 'autoAgwlan';
    element.innerHTML = script;
    if(document.getElementById('autoAgwlan') == null){
        var objBody = document.getElementsByTagName("body").item(0);
        objBody.appendChild(element); 
    }
}
apendScript(
    'document.forms[0].elements[3].value = ' + username + ';'+
    'document.forms[0].elements[4].value = '  + password + ';'+
    'submitAction();'
);
// ==UserScript==
// @name autoAgwlan
// @namespace http://rcl.it.aoyama.ac.jp/yuuki/
// @description This script provides auto login to agwlan w/ Google Chrome. This shall be installed through the Google Chrome's Extensions.
// @include https://agwlan.aim.aoyama.ac.jp/*
// @exclude https://agwlan.aim.aoyama.ac.jp/login.html
// ==/UserScript==
の部分は実は単なるコメントではない。

@name : このスクリプトの名前
@namespace : 名前空間。一般的には作成者のURL
@description : スクリプトの説明
@include : このスクリプトを実行するページ
@exclude : このスクリプトを実行しないページ

Chromeだと@includeに該当するページに飛ぶと、なぜか2回ページがロードされるので、2回スクリプトが実行されてしまう。それがちょっと面倒なので、直接追加ログオンページのhtmlにスクリプトを埋め込むようなスクリプトにした。なんか動作がウイルスみたいだけど、これが一番うまくいった。