6
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?

atcoder-guiつくった

6
Last updated at Posted at 2025-12-07

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

背景

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

できること

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

image.png

↑ 画面イメージ

このツールだけで一通りの操作ができることを目指していますが、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 にお世話になっています。きゅうりさんありがとう!

6
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
6
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?