0
0

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-toolsをreCaptchaに対応しログインできるようにする

Posted at

なんかログインできないんだけど??

久しぶりに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回です。

参照

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?