なんかログインできないんだけど??
久しぶりにAtCoder
に取り組もうかと思い、atcoder-tools
でディレクトリを作ろうとしたら...
$ atcoder-tools gen abc212
2025-04-11 13:37:59,363 INFO: Going to load /Users/user/.atcodertools.toml as config
2025-04-11 13:37:59,363 INFO: Loaded session from /Users/user/.local/share/atcoder-tools/cookie.txt
AtCoder username: user
AtCoder password:
2025-04-11 13:38:04,965 ERROR: Failed to login (maybe due to wrong username/password combination?)
おかしい、何度試してもログインできない、絶対に入力は正しい。
どうやらAtCoderにreCaptcha認証が導入され、自動ログインが機能しなくなったようです。atcoder-tools
としての記事こそ出てきませんでしたが、acc
,oj
を対象として同様の問題に対処しているこちらの記事を発見しました。ログイン可能なCookieをatcoder-tools
に渡せば今まで通りログインできるようです。この情報を元に対処します。
今回自動でCookieを更新するツールも作成しました。ただし、Cookie(ログイン情報)を取得するものになりますので、使用は自己責任でお願いします。記事でも後半の紹介に留めます。(Cookieを自動で読み取らず、手入力とするモードもあります)
手動でCookieを更新する
1. cookieファイルを開く
atcoder-tools
のcookieが保存されているパスは以下のようにして確認できます。
(実際にatcoder-tools
のソースにある処理を探してきました)
from atcodertools.fileutils.artifacts_cache import get_cache_file_path
print(get_cache_file_path('cookie.txt'))
>>>/Users/user/.local/share/atcoder-tools/cookie.txt
atcoder-toolsを用いて一度もログインしたことがない場合、このファイルはまだ存在しません。その場合は作成してください。
2. デフォルトのCookieを貼り付ける
先ほどのcookieファイルを、以下の内容で上書きしてください。
atcoder-tools
はデフォルトでREVEL_SESSION="";
の値のみ保存するようですが、これだけではログインできない場合があります。
#LWP-Cookies-2.0
Set-Cookie3: REVEL_FLASH=""; path="/"; domain="atcoder.jp"; path_spec; secure; discard; HttpOnly=None; version=0
Set-Cookie3: REVEL_SESSION=""; path="/"; domain="atcoder.jp"; path_spec; secure; expires="2025-10-06 10:09:30Z"; HttpOnly=None; version=0
3. expires="2025-10-06 10:09:30Z";
の値を上書きする
おおよそ入力時点の半年後の日時を記入しておけば問題ないはずです。一応100年後でもログインできました。
4. REVEL_SESSION の値をAtCoderのCookieからコピーする
こちらの記事に従えばコピーできます。
5. REVEL_SESSION="";
の値を上書きする
先ほどコピーした値を書き込み、ファイルを保存します。
これでログインできるようになっているはずです。
ツールを利用する
私が作成したツールを使う方法です。詳細はREADME
に記載しているので、この記事では以下の条件で紹介します。
-
Chrome
またはFirefox
を使っている - AtCoderに一つのプロフィールでしかログインしていない
ちなみにLinuxとWindowsについては動作確認できていないのでご了承ください...ChatGPTを信じましょう。
1. インストール
pip install git+https://github.com/FukumotoIkuma/atcoder-tools_login
2. 実行
次のコマンドで実行できます。使っているブラウザによって、オプションを切り替えます。
atl chrome
atl firefox
3.キーチェーンパスワードの入力
デフォルトでは、ログインパスワードと同じです。合計2回入力する必要があります。
このパスワードを入力しない限りCookieを読み取られることはないのでご安心ください。
パスワードを入力したくない場合、オプションをつけずに実行し、該当Cookieを手入力することも可能です。
最後に
コマンドラインからログインできるようにしたくて、随分と余計な開発をしてしまったように思います。多分このツールを使うのは年に1,2回です。
参照