5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

これは 競プロ Advent Calendar 2025 の7日目の記事です。

背景

2025/4にAtCoderにCAPTCHA認証が導入され、atcoder-tools などのCLIツールの利用が困難になりました。
これの対策として、ブラウザを開いて人間の入力も併用することで制限を回避するツール atcoder-gui を作ってみました。

できること

Playwright でブラウザを開きつつ、コンソールでも操作ができます。ログインや提出の確定はブラウザで行い、そのほかのツールの操作などはコンソールで行います。

image.png

↑ 画面イメージ

主に 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 にお世話になっています。きゅうりさんありがとう!

5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?