Skip to content

fix: リジャッジ権限のあるコンテストの提出がクロールされない問題を修正 (#1518, #1520)#1534

Closed
kenkoooo wants to merge 1 commit into
mainfrom
fix/submissions-parser-rejudge-column
Closed

fix: リジャッジ権限のあるコンテストの提出がクロールされない問題を修正 (#1518, #1520)#1534
kenkoooo wants to merge 1 commit into
mainfrom
fix/submissions-parser-rejudge-column

Conversation

@kenkoooo

Copy link
Copy Markdown
Owner

原因

abc308 / abc358 / abc410(CodeQUEEN 予選と合同開催された回)への AC が AtCoder Problems に反映されない、という報告(#1518 / #1520)を調査した。本番(AWS ECS/CloudWatch)のログとクローラ視点での実ページ取得により、パーサのバグであることが判明した。

これらのコンテストはクローラのアカウントがリジャッジ権限を持っているため、提出一覧の各行の先頭にリジャッジ用チェックボックス列が1つ追加され、以降の列がすべて右に1つずれる:

通常コンテスト (abc307) 該当コンテスト (abc308 等)
列数 10 11
先頭列 <time>(提出日時) <input type="checkbox" form="rejudge-form">

parse_submissions_htmltd:first-child timetd:nth-child(N)位置依存で各列を取得していたため、ずれた行で <time> 等が None となり全行スキップ → 提出0件としてパースしていた(? のパースエラーではなく continue のため、リトライもエラーログも出ず "No more submissions" になる)。

その結果、これらのコンテストの提出は一切 DB に取り込まれず(page1 を数分おきに巡回しているにもかかわらず常に0件判定)、AC が反映されなかった。「2026-01以降」なのは新クローラ移行時期と一致する。

変更

  • parse_submissions_html:
    • 行先頭のチェックボックス列の有無を検出してオフセットを吸収
    • 提出詳細リンクは位置ではなくクラス a.submission-details-link で特定
    • 列は td のオフセット相対で取得(通常コンテストは offset=0 で従来どおり)
  • 回帰テスト追加:abc308 の提出一覧(管理者ビュー=チェックボックス列あり)のスナップショットを tests/assets/submissions_rejudge.html として追加し、20件正しくパースできることを検証。秘密情報が混ざらないよう提出テーブル部分のみ抽出。

確認

  • cargo test -p crawler --test test_parser … 8 tests pass(通常レイアウトの既存テスト + 新規 rejudge レイアウトテスト)
  • cargo clippy -p crawler --all-targets -- -D warnings … pass

※ 別PR #1531(404即スキップ)とは独立。あちらはクロール高速化、本PRが #1518/#1520 の実際の修正。

Closes #1518
Closes #1520

🤖 Generated with Claude Code

クローラのアカウントがリジャッジ権限を持つコンテスト(例: CodeQUEEN
予選と合同開催された abc308/abc358/abc410)では、提出一覧の各行の先頭に
リジャッジ用チェックボックス列が1つ追加され、以降の列が右に1つずれる。

parse_submissions_html は td:first-child / td:nth-child(N) と位置依存で
列を取得していたため、ずれた行で <time> 等が見つからず全行スキップし、
提出0件としてパースしていた。結果、これらのコンテストの提出が一切
取り込まれず、AC が AtCoder Problems に反映されなかった。

先頭のチェックボックス列の有無でオフセットを判定して吸収し、提出詳細
リンクはクラス(a.submission-details-link)で特定する方式に変更。通常
コンテスト(チェックボックス列なし)の挙動は不変。

実際に abc308 の提出一覧(管理者ビュー)を取得したスナップショットを
回帰テスト用フィクスチャとして追加。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kenkoooo

Copy link
Copy Markdown
Owner Author

クローラを使うアカウントをリジャッジ権限のないものに切り替えることで対応するため、本PR(パーサ修正)はクローズします。権限のないアカウントなら提出一覧が通常の10列レイアウトで返り、チェックボックス列によるズレ自体が発生しないため、コード側の対応は不要と判断しました。原因調査の記録として #1518 / #1520 にコメントを残します。

@kenkoooo kenkoooo closed this Jun 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AC submissions for ABC308 D/E not reflected on AtCoder Problems ACが反映されないです。

1 participant