Block a user
ylhp-boss-hr (1.51)
Published 2026-03-31 15:17:40 +08:00 by LiQiuYu
Installation
pip install --index-url --extra-index-url https://pypi.org/simple ylhp-boss-hrAbout this package
BOSS直聘招聘端 SDK - 支持简历获取、解密和智能沟通
ylhp-boss-hr
一个面向 BOSS 直聘招聘端的 Python SDK,用于获取职位列表、候选人推荐列表、简历详情,并解密返回的加密简历内容。
当前仓库以源码方式提供,适合在内部工具、自动化脚本或数据处理流程中集成使用。
Features
- 基于
wt2Cookie 访问 BOSS 直聘招聘端接口 - 获取已沟通过职位列表
- 拉取指定职位下的候选人推荐列表
- 获取候选人简历详情
- 通过内置 Node.js 脚本解密简历正文
- 提供
pydantic数据模型,便于类型化处理接口响应 - 请求代理工具:内置限流、重试、日志等中间件,支持灵活扩展
Install
Requirements
- Python 3.12+
- Node.js 18+(用于解密简历内容)
Using uv
uv sync
Using pip
由于项目采用 src 布局,建议在虚拟环境中以可编辑模式安装:
pip install -e .
如果需要运行简历解密逻辑,还需要安装 Node 侧依赖:
cd src/boss/encrypty
npm install
Quick Start
from boss import Boss
wt_token = "your_wt2_cookie"
client = Boss(wt=wt_token)
# 1. 获取职位列表
jobs = client.job_id()
first_job = jobs[0]
# 2. 获取该职位下的推荐候选人
geeks = client.geek_info(jobid=first_job.encryptJobId, page=1)
first_geek = geeks[0]
# 3. 获取候选人详情
detail = client.get_detail(first_geek)
# 4. 解密简历正文
resume_text = client.get_detail_text(detail)
print(resume_text)
# 5. 发起招呼
client.chat_start(first_geek)
Authentication
SDK 当前通过 wt2 Cookie 进行身份认证:
from boss import Boss
client = Boss(wt="your_wt2_cookie")
请自行确保该 Cookie 来源合法、有效,并且具备对应招聘端页面的访问权限。
API
Boss(wt: str, **kwargs)
创建 SDK 客户端。
参数:
wt: BOSS 直聘登录态中的wt2Cookie 值enable_proxy: 是否启用请求代理(默认True)rate_limit: 限流配置,如{"max_requests": 10, "per_seconds": 60}retry: 重试配置,如{"max_retries": 3, "backoff_factor": 0.5}middleware_factory: 自定义中间件工厂函数
job_id() -> list[JobInfoModel]
获取当前账号已沟通过的职位列表。
返回字段示例:
encryptJobIddescriptionjobIdjobNamesalaryDescaddress
geek_info(jobid, page) -> list[GeekModel]
获取指定职位的候选人推荐列表。
参数:
jobid: 职位加密 ID,通常来自JobInfoModel.encryptJobIdpage: 页码,从1开始
get_detail(geek_info) -> DetailModel
获取候选人简历详情对象。
参数:
geek_info:geek_info()返回的单个GeekModel
get_detail_text(detail) -> str
将 DetailModel.encryptGeekDetailInfo 交给内置 Node.js 脚本进行解密,返回简历纯文本内容。
参数:
detail:get_detail()返回的DetailModel
注意:
- 该方法依赖本地
node可执行程序 - 需要先安装
src/boss/encrypty/package.json中声明的依赖
chat_start(geek_info) -> None
向候选人发起沟通。
参数:
geek_info:GeekModel
说明:
- 当前实现主要通过打印输出表示结果
- 如果触发平台当日主动沟通上限,会直接返回
Data Models
项目使用 pydantic 定义了主要响应模型,位于:
src/boss/schema/job.py
核心模型包括:
JobInfoModelGeekModelGeekCardModelDetailModel
这使得你可以直接通过属性访问接口字段,而不是处理原始字典。
Project Structure
.
├── src/
│ └── boss/
│ ├── __init__.py
│ ├── base.py # 账号基础功能(集成请求代理)
│ ├── boss.py # SDK 主入口
│ ├── resume.py # 简历/候选人功能
│ ├── schema/ # Pydantic 数据模型
│ │ ├── job.py
│ │ └── boss.py
│ ├── http_proxy/ # 请求代理工具
│ │ ├── __init__.py
│ │ ├── middleware.py # 中间件基类
│ │ ├── proxy.py # RequestProxy 主类
│ │ └── middlewares/ # 内置中间件
│ │ ├── rate_limit.py
│ │ ├── retry.py
│ │ └── logging.py
│ └── encrypty/
│ ├── encrypt_detail.js
│ ├── package.json
│ └── *.wasm
├── tests/
│ └── boss/
│ └── test_resume.py
├── pyproject.toml
└── README.md
HTTP Proxy(请求代理工具)
SDK 内置了可扩展的请求代理工具,支持限流、重试、日志等中间件。
基础用法
默认启用限流和重试:
from boss import Boss
client = Boss(wt="your_wt2_cookie")
# 自动启用:每秒最多 10 请求,失败自动重试 3 次
自定义配置
# 自定义限流和重试参数
client = Boss(
wt="your_wt2_cookie",
rate_limit={"max_requests": 5, "per_seconds": 1}, # 每秒 5 请求
retry={"max_retries": 5, "backoff_factor": 1.0}, # 重试 5 次
)
自定义中间件
from boss import Boss
from boss.http_proxy import RateLimitMiddleware, LoggingMiddleware
def my_middlewares():
return [
RateLimitMiddleware(max_requests=20, per_seconds=60),
LoggingMiddleware(log_headers=True),
]
client = Boss(wt="your_wt2_cookie", middleware_factory=my_middlewares)
禁用代理
client = Boss(wt="your_wt2_cookie", enable_proxy=False)
支持的中间件
| 中间件 | 功能 |
|---|---|
RateLimitMiddleware |
限流(固定窗口/令牌桶算法) |
SlidingWindowRateLimitMiddleware |
滑动窗口限流 |
AdaptiveRateLimitMiddleware |
自适应限流(根据响应自动调整) |
RetryMiddleware |
重试(支持多种退避策略) |
CircuitBreakerMiddleware |
熔断器 |
LoggingMiddleware |
请求/响应日志 |
TimingMiddleware |
性能计时 |
MetricsMiddleware |
指标收集 |
扩展自定义中间件
from boss.http_proxy.middleware import BaseMiddleware, RequestContext, ResponseContext
class MyMiddleware(BaseMiddleware):
def process_request(self, context: RequestContext) -> RequestContext:
# 请求前处理
context.kwargs["headers"]["X-Custom"] = "value"
return context
def process_response(self, context: ResponseContext) -> ResponseContext:
# 响应后处理
return context
Development
Run tests
当前测试更接近真实接口联调测试,而不是纯离线单元测试。测试依赖:
- 有效的
wt2Cookie - 可访问 BOSS 直聘接口的网络环境
- 已安装 Node.js 依赖
运行方式:
pytest
Limitations
- 该项目当前聚焦招聘端简历获取与沟通流程,不是完整的 BOSS 直聘 API 封装
- 请求头和接口参数中包含明显的平台耦合字段,接口变更后可能失效
get_detail_text()依赖本地 Node.js 运行环境chat_start()当前返回值不稳定,主要通过打印结果反馈状态- 仓库中的测试用例目前写法依赖真实凭证,不适合作为公共 CI 测试直接运行
- 请求代理工具目前为同步实现,异步支持待后续添加
Disclaimer
本项目仅用于学习和研究 SDK 封装方式。
使用者应自行确认:
- 已获得目标平台的合法访问权限
- 使用行为符合目标平台服务条款、适用法律法规和组织内部规范
- 不将本项目用于未授权的数据采集、批量骚扰或其他违规用途
License
仓库当前未声明开源许可证。
如果你计划公开分发或对外协作,建议补充明确的 LICENSE 文件。
Requirements
Requires Python: >=3.12
Details
Assets (2)
Versions (40)
View all
ylhp_boss_hr-1.51.tar.gz
87 KiB
1.51
2026-03-31
1.50
2026-03-31
1.49
2026-03-31
1.48
2026-03-30
1.48.dev0+g674c430ae.d20260330
2026-03-30