Skip to main content

A Python SDK for interacting with HydroOJ via Selenium

Project description

HydroOJ

基于Selenium开发的HydroOJ自动化操作库,支持账号登录、题目/比赛管理、附件上传等自动化操作。

安装方法

PyPI在线安装

pip install HydroOJ

依赖列表

selenium

支持浏览器:Edge、Chrome、Firefox、Ie、Safari、WebKitGTK

快速使用示例

from HydroOJ import HydroOJ, LoginFailedError

# 初始化客户端
client = HydroOJ(
    url="https://hydro.ac/",
    webdriver_id="Chrome",
    headless=True
)

# 登录账号
try:
    client.Login("用户名", "密码")
    print("登录成功")
except LoginFailedError:
    print("登录失败,账号或密码错误")

# 获取第一页题目列表
print(client.ViewProblemList(page=1))

# 查看题目内容
client.ViewProblem("1001")

# 释放浏览器资源
client.Quit()

API 说明

HydroOJ 初始化参数

HydroOJ(
    url="https://hydro.ac/",
    webdriver_id="Edge",
    webdriver_path=None,
    headless=True,
    disable_blink=True
)
  • url:HydroOJ站点地址
  • webdriver_id:浏览器标识,支持 Edge / Chrome / Firefox / Ie / Safari / WebKitGTK
  • webdriver_path:浏览器驱动本地路径,留空自动寻找
  • headless:是否启用无头模式,不弹出浏览器窗口
  • disable_blink:关闭自动化检测特征,避免站点拦截

全部可用方法

  1. Login(username, password) 登录站点,登录失败抛出 LoginFailedError
  2. Logined() 检测当前登录状态,返回布尔值
  3. ViewProblemList(page=1) 获取指定页码的题目列表文本,无数据抛出 ProblemListNotFoundError
  4. ViewProblem(problem_id) 打开并打印指定ID题目详情,题目不存在抛出 ProblemNotFoundError
  5. CreateProblem(pid, title, content, tag=[], difficulty=None, hidden=False) 创建新题目,创建失败抛出 CreateProblemFailedError
  6. ViewContestList(page=1) 获取指定页码比赛列表,无数据抛出 ContestListNotFoundError
  7. ViewContest(contest_id) 打开并打印指定ID比赛详情,比赛不存在抛出 ContestNotFoundError
  8. UploadFileToProblem(problem_id, file_name, file_content) 为指定题目上传文本附件,上传失败抛出 UploadFileFailedError
  9. GotoPage(url) 浏览器跳转至任意链接
  10. RunJavaScript(script) 在当前页面执行JS脚本,返回执行结果
  11. Quit() 关闭浏览器,释放进程资源

内置异常类

  • LoginFailedError:登录校验失败
  • ProblemNotFoundError:目标题目不存在
  • CreateProblemFailedError:新建题目操作异常
  • ProblemListNotFoundError:题目列表加载失败
  • ContestListNotFoundError:比赛列表加载失败
  • ContestNotFoundError:目标比赛不存在
  • UploadFileFailedError:题目附件上传失败

使用注意事项

  1. 高频批量操作建议添加 time.sleep() 降低访问频率,触发网站风控
  2. 程序结束必须调用 Quit(),否则浏览器后台进程残留占用内存
  3. 仅适配原版HydroOJ前端页面,二次修改部署的OJ可能存在元素定位失效问题

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hydrooj-0.0.1.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hydrooj-0.0.1-py3-none-any.whl (5.0 kB view details)

Uploaded Python 3

File details

Details for the file hydrooj-0.0.1.tar.gz.

File metadata

  • Download URL: hydrooj-0.0.1.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for hydrooj-0.0.1.tar.gz
Algorithm Hash digest
SHA256 f0ed6f05c5bff5062354ddc4f5751ec926db27100440b8c9c27854b3e39843b7
MD5 85f0e805e41ebfee038b9721738089f8
BLAKE2b-256 fb4535c7f785381d8e491240ddc7b7fa62bd07a0cd1d859b4159968787ebb6ff

See more details on using hashes here.

File details

Details for the file hydrooj-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: hydrooj-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 5.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for hydrooj-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ee6f84ce8f2f4ffc5934e041b195888f4594a8c58774fa2bccd9ca74d128b7a5
MD5 0f5f126742706fc38c6c56319cfecfce
BLAKE2b-256 e9c1d35e76c0e61e0181b151a42be5284ba811397e8f685db39e41f0345295c3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page