Metadata-Version: 2.4
Name: HydroOJ
Version: 0.0.1
Summary: A Python SDK for interacting with HydroOJ via Selenium
Author-email: YANGRENRUIYRR <yangrenruiyrr@yeah.net>
Keywords: HydroOJ,selenium,online judge
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: selenium

# HydroOJ

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

## 安装方法

### PyPI在线安装

```bash
pip install HydroOJ
```

## 依赖列表

```
selenium
```

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

## 快速使用示例

```python
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 初始化参数

```python
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
