0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[JavaScript] 電子教材の学習時間を稼いでみた

0
Last updated at Posted at 2026-10-19

はじめに

私の通ってる大学では電子教材を使った英語の科目があり、それが非常に面倒くさいのです。幸いなことに答えが出回ってるので教材を速く終わらせることはできるのですが、あまりに学習時間が短いと不正学習扱いされ、単位が降りなくなります(裏で学習時間を記録されてる)。そういうわけでパソコンのブラウザで電子教材を開いて放置して学習時間を稼ぐ必要があるのですが、運営側はそういう人たちのことを見抜いて、webページがアイドル状態だったら学習時間のカウントをやめるという対策をしているのです。かといって放置するときに時々マウスを動かしたりするのもだるいので、私はその問題をプログラムで解決することにしました。真面目にやれという意見は受け付けません!また、どの電子教材でも使えるわけではないので、その点はご了承ください。

アイドル状態の判定法

まず前提として、電子教材のタブを開いて、Chromeをアクティブにしないと学習時間は加算されません。しかし、そうして放置したとしても5分後くらいにアイドル状態判定がなされ、学習時間がカウントされなくなるので私は以下のことを調べました。

  • マウスの動きを監視してアイドル状態の判定をしているのか
  • マウスのクリックの動きを監視してるのか

その結果、マウスの動きは無関係で、クリックの動きのみを元にアイドル状態の判定をしてることがわかりました。
ということで、私はJavaScriptで何秒かおきにサイトにマウスのクリックイベントを発火させればアイドル状態の判定がなされないのではないかと考えました。

ソースコード

先ほどの名案を試しに実行してみました。JavaScriptで何秒かおきにサイトにマウスのクリックイベントを発火するプログラムです。

(async () => {
    let i = 0;
    while (true) {
        document.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true, view: window }));
        i++;

        if (i % 5 === 0) {
            const waitTime = 120000 + 30000 * Math.random();
            await new Promise(resolve => setTimeout(resolve, waitTime));
            i = 0;
        }

        const intervalTime = 5000 * Math.random();
        await new Promise(resolve => setTimeout(resolve, intervalTime));
    }
})();

5分以上放置したらアイドル状態判定を喰らうので、マウスクリックの時間間隔は5分よりも短くしています。
これを実行してみたところ、私がパソコンを全く操作しなくても学習時間が加算されました!

実行方法

  1. 電子教材を開く
  2. ブラウザの上部のURL欄に、javascript:{改行を削除した上記のソースコード}を記述
  3. Enterを押して実行

ブックマークして使うと楽かもしれません。

まとめ

サイトのアイドリング判定が緩かったおかげで、本当にパソコンを放置するだけで電子教材の学習時間を稼ぐことができました。
ただし、サイトによってはプログラムによるマウスクリック入力などを判別して処理してる可能性もあるので、そのときはWin32APIを用いてOSのマウスクリックイベントを直接呼び出すしかないかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?