Skip to content

[Bug] 已结束比赛的直接题目提交回退功能失效 #1017

Description

@boomzero

检查项

  • 我已确认该问题在当前版本中仍然存在。
  • 我已搜索现有 Issues,未发现相同的开放问题。

问题描述

#287 / #671 实现的“比赛结束后自动向原题提交”功能现在已失效。

这里的问题不是普通提交按钮,也不是 QuickSubmit CLI 本身,而是 XMOJ.user.js 提交页代码中借用 QuickSubmit 逻辑实现的回退路径:

  1. 在比赛提交页先以 cid + pidsubmit.php 提交;
  2. 如果返回内容包含 没有这个比赛!,则请求对应的 contest.php?cid=...
  3. #problemset > tbody 中取得该比赛题目对应的真实 PID;
  4. 再以 id=<真实 PID> 直接提交。

当前从已结束比赛的提交页提交时,这条回退路径不再成功,最终仍然显示提交失败,且没有向原题创建提交记录。

复现步骤

  1. 打开一个已经结束的比赛中的题目提交页:/submitpage.php?cid=<cid>&pid=<pid>
  2. 输入任意非空代码并点击“提交”。
  3. 观察提交结果。

期望行为

比赛提交已经不可用时,脚本应当像 #287 设计的那样解析真实题号,并自动改为向原题直接提交。

实际行为

脚本未能完成向原题的回退提交,页面显示“提交失败!请关闭脚本后重试!”,且没有新的提交记录。

相关代码

当前逻辑位于 XMOJ.user.js 的提交页 PassCheck 处理器中(约 4200–4291 行),QuickSubmit 来源说明在约 4219 行。

建议检查:

  • XMOJ 当前失败响应是否仍然包含精确字符串 没有这个比赛!
  • 失败响应现在是否通过重定向返回,导致回退分支根本不会执行;
  • #problemset > tbody 的当前结构是否仍与 rows[i].children[1].textContent.substring(2, 6) 的解析假设一致;
  • 直接重试成功后,外层处理是否仍会继续执行并覆盖为“提交失败”状态。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions