これは 競プロ Advent Calendar 2025 の7日目の記事です。
背景
2025/4にAtCoderにCAPTCHA認証が導入され、atcoder-tools などのCLIツールの利用が困難になりました。
これの対策として、ブラウザを開いて人間の入力も併用することで制限を回避するツール atcoder-gui を作ってみました。
できること
Playwright でブラウザを開きつつ、コンソールでも操作ができます。ログインや提出の確定はブラウザで行い、そのほかのツールの操作などはコンソールで行います。
↑ 画面イメージ
このツールだけで一通りの操作ができることを目指していますが、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など) が記録されています
コマンド
gen
コンテスト情報を取得し、ひな形のコードを生成するコマンドです。atcoder-toolsのgenコマンドとほぼ同じです。
command> gen abc123
引数としてコンテストID (例: abc123) を指定します。以下の動作を行います。
- コンテストIDのディレクトリを作成し、カレントディレクトリとする
- ※ 設定で
createContestDirectory=falseのときは作成しません
- ※ 設定で
- コンテスト情報を取得し
metadata.jsonに保存する - 各問題のページから、入出力情報を解析し、テンプレートからコードのひな型を生成する
- 入力ファイル in_?.txt と出力ファイル out_?.txt を取得して保存する
a
英字1文字 (a, b, c, ...) のコマンドは問題文を開くコマンドです。大文字小文字は区別しません。
gen コマンドにより取得したメタ情報 (metadata.json) が存在するとき、そのディレクトリに移動し、問題文のURLを開きます。
ディレクトリ A にて b と指定すると ../B に移動します。
new
atcoder-cli の new コマンドを呼び出します。
command> new abc123
上の例では acc new abc123 を実行します。
カレントディレクトリにコンテストIDのディレクトリが存在する場合には、カレントディレクトリをそこに移動し、コンテストのページを開きます。
test
カレントディレクトリにあるテストケースに対してテストします。
プログラムを実行して入力として in_?.txt を与え、out_?.txt と一致するかどうか判定します。複数の正解がある問題の場合は、一致しないこともあります。
submit
テストを行い、提出します。
gen コマンドで生成したメタ情報 (metadata.json) が存在するときはそれを利用します。
atcoder-cli の contest.acc.json があるときはそれを利用して提出しますが、ファイル名の指定が必要です。
ブラウザにソースコードが貼り付けられるので、ブラウザ上で提出ボタンをクリックして提出してください。
複数の正解がありえるため、テストが失敗している場合でも貼り付けします。
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 にお世話になっています。きゅうりさんありがとう!
