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.2.tar.gz (5.2 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.2-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hydrooj-0.0.2.tar.gz
  • Upload date:
  • Size: 5.2 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.2.tar.gz
Algorithm Hash digest
SHA256 3653ef411c5995e8a5a3bf8cba56602b700700e20abe647216ceaf49f26bd4d7
MD5 ea77177c5d0fe36ae76f78bfe4e04bdb
BLAKE2b-256 e5256e1d8feac6c3beeba07ae2e5848c5136c64ddd1323d9d96e9fb98b87e9a7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hydrooj-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 5.5 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8fd8dcba4f4bbd6e5109dd076cd32113badbe3f77f98213e53e9a273f2cdb58a
MD5 07e4c447072d37e70a0f3df46c871259
BLAKE2b-256 5273ba1230084178287310222ef8cef007e1c93bf2490ad45fd25251ce65c6ad

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