これは 競プロ Advent Calendar 2025 の7日目の記事です。
背景
2025/4にAtCoderにCAPTCHA認証が導入され、atcoder-tools などのCLIツールの利用が困難になりました。
これの対策として、ブラウザを開いて人間の入力も併用することで制限を回避するツール atcoder-gui を作ってみました。
できること
Playwright でブラウザを開きつつ、コンソールでも操作ができます。ログインや提出の確定はブラウザで行い、そのほかのツールの操作などはコンソールで行います。
↑ 画面イメージ
主に atcoder-tools の使用を想定していますが、atcoder-cli や oj も利用可能です。
※ 他のCLIツールと同様、セッション情報をファイルに記録します。自己責任のもと利用してください
インストール
Node.jsで書かれておりnpm packageとしてインストール可能です。手元の環境ではmacとWindowsで動きましたが、Playwrightに依存しており、動かない環境はあるかもしれません。
$ npm install -g atcoder-gui
ソースコードから動かすときは https://github.com/firewood/atcoder-gui をクローンして pnpm install -> pnpm start です。
設定ファイル
設定ファイルの配置場所は atcoder-gui config-dir で出力可能です。
config.json5 : 各種設定
session.json : セッション情報 (cookieなど) が記録されています
コマンド
a
英字1文字 (a, b, c, ...) のコマンドは問題文を開くコマンドです。
カレントディレクトリまたは親ディレクトリに atcoder-tools の metadata.json や atcoder-cli の contest.acc.json が存在し、かつ、指定した英字1文字のディレクトリが存在する場合、ブラウザで問題文を開き、そのディレクトリに移動します。
ディレクトリ a にいるときに b と指定すると ../b に移動します。
gen
atcoder-tools の gen コマンドを呼び出します。
command> gen abc123
上の例では atcoder-tools gen abc123 を実行します。基本的には atcoder-tools の workspace_dir がカレントディレクトリであることを想定しています。
カレントディレクトリにコンテストIDのディレクトリが存在する場合には、カレントディレクトリをそこに移動し、コンテストのページを開きます。
new
atcoder-cli の new コマンドを呼び出します。
command> new abc123
上の例では acc new abc123 を実行します。
カレントディレクトリにコンテストIDのディレクトリが存在する場合には、カレントディレクトリをそこに移動し、コンテストのページを開きます。
test
テストします。実行するコマンドは設定ファイルの testCommand で指定します。既定値は make test です。
以下のような感じの Makefile がある想定です。
test: a.out
atcoder-tools test --exec ./a.out
a.out: main.cpp
g++ -g -O2 -std=c++23 $< -o $@
submit
提出します。
カレントディレクトリに atcoder-tools の metadata.json があるときはそれを利用して提出します。ファイル名は指定不要です。
親ディレクトリに atcoder-cli の contest.acc.json があるときはそれを利用して提出します。ファイル名の指定が必要です。
ブラウザにソースコードが貼り付けられるので、ブラウザ上で提出ボタンをクリックして提出してください。
並行してテストも行います。(testCommand を実行します)
export
ログインしたセッションを他のツールで利用可能にします。(aclogin の代替)
export atcoder-tools で atcoder-tools の cookie.txt を上書きします。
export atcoder-cli で atcoder-cli の session.json を上書きします。
export oj で online-judge-tools の cookie.jar を上書きします。
なお既存のファイルが見つかった場合のみ上書きします。
※ 他のCLIツールと同様、セッション情報をファイルに記録します。自己責任のもと利用してください
そのほかのコマンド
cd、ls、dirなどを認識します。
謝辞
いつも atcoder-tools にお世話になっています。きゅうりさんありがとう!
