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

clock-up-blog

go-mi-tech

原始的なブラウザ型ボット

ボット JavaScript AdventCalendar

ボット・クローラー Advent Calendar 2016 1日目の記事です。

既存サイトで JavaScript を実行することにより動作を自動化してみます。

実験場

恐縮ながらちょっとばかり 2ch のスレッドをお借りすることにします

Chrome Developer Tools による JavaScript 実行

Chrome初級ネット雑談スレ Part2 を開いた状態で Developer Tools を開き、スクリプトを実行してみます。

投稿フォームへの入力

$('input[name="FROM"]').val("ななし");
$('input[name="mail"]').val("sage");
$('textarea').val("🍣HEY!");

これ↑を実行するとこんな↓感じに投稿フォーム内に値が入ります。

f:id:kobake:20161130230123p:plain

投稿実行

$('input[type="submit"]').click();

これ↑で「書き込む」ボタンが押されたことになり、こんな↓感じに投稿が実行されます。

f:id:kobake:20161130230535p:plain

時限投稿

もう少し応用を効かせてみましょう。
指定の時間になったら発言を投稿するスクリプトを組んでみます。

// 2016/12/01 00:00:00 に投稿を行うことにする
var timing = new Date(Date.parse('2016/12/01 00:00:00'));
function onTimer(){
    var t = new Date();
    if(t.getTime() >= timing.getTime()){
        // 時間が来たので投稿実行
        $('input[name="FROM"]').val("ななし");
        $('input[name="mail"]').val("sage");
        $('textarea').val("🍣12月をお知らせします");
        $('input[type="submit"]').click();
    }
    else{
        setTimeout(onTimer, 1000);
    }
}
setTimeout(onTimer, 1000);

これを実行した後そのまま放置しておけば 2016/12/01 00:00:00 になった瞬間に投稿が実行されます。

最初はこういうシンプルなので良いと思う

とりあえず今回はここまで。

ボット作りにおいて、こういった JavaScript 実行による処理の自動化の原理はとてもシンプルなので、初学者にはこういうのがちょうど良いのではと思っています。

OAuth とか理解したり設定したりする必要ないし、ブラウザを見ながら挙動を目で確認できるし、WEBAPI が無いサイトにも適用できるし、人間の操作をなぞるように組むスクリプトはなかなか直観的で原始的なおもしろさがあります。

$('input[name="FROM"]') みたいなキーワードはどこから見つけてくるの?という問いには「要素の検証」「jQuery」「セレクタ」あたりのキーワードでググるといいよ、というくらいの言及にとどめておきます。ちょっとここは掘り下げるとキリがないので。

おしまい

この手の操作に慣れておくといろんな場面で応用が効いて諸々捗ります。

任意サイトに任意 JavaScript を埋め込む Chrome 拡張として Custom JavaScript for websites というものがあり、これと組み合わせるとさらに強力です。けっこう危ないツールでもあるのですが便利なツールです。ご利用は自己責任の範囲にて。

});