Skip to content

feat: collection-only Zhilian and 51job support - #62

Merged
powerycy merged 30 commits into
mainfrom
codex/multiplatform-safe-integration
Aug 25, 2026
Merged

powerycy merged 30 commits into
mainfrom
codex/multiplatform-safe-integration

Conversation

@powerycy

@powerycy powerycy commented Aug 23, 2026 •

Copy link
Copy Markdown
Collaborator

目标

选择性整合贡献 PR 中可用的多平台采集、岗位池体验和账号安全能力。智联与 51job 仅开放只读采集、本地评分和招呼语生成;岗位池提供安全的原平台链接,用户完成投递后可手动标记已发送,不扩大自动发送范围。

Closes #47
Closes #52

已纳入

多平台与安全边界

  • BOSS / 智联 / 51job 统一串行采集、独立关键词/城市/最大页数/排序和来源身份;三个平台都不再设置目标新增数量
  • PR Add collection account-safety guardrails #66 的搜索页、详情页、平台页面总量仅统计 BOSS;智联和 51job 不占用这些页面额度。单日新增数量限制已从三个平台全部删除
  • BOSS 达到上限时只跳过 BOSS,串行队列仍继续智联/51job;验证码、账号拦截等实际风险仍立即安全停机
  • BOSS 采集到自动投递的冷却只在本轮确实采集 BOSS 后启用
  • 智联与 51job 不进入自动发送、简历发送或消息监测;岗位池提供原平台链接和手动已发送记录
  • 所有 BOSS 投递继续要求人工确认,并受发送时间窗口、随机休息和每日额度约束
  • 发送结果含糊时不记成功;系统通知不作为 HR 回复
  • 自动回复和自动跟进继续默认关闭;不绕过验证码、不保存 Cookie、不读取外部工具凭证

#55 十三个提交的处理

  • 已吸收:学历/招聘类型、未知学历、评分字段、个人配置、一键评分
  • 已吸收:岗位池分页、排序、城市、投递入口和队列状态
  • 已吸收:招呼语偏好、发送延期原因、额度快捷入口、配置即时刷新、每日额度展示
  • 重试能力:主线已有更明确的发送失败队列和逐条/批量重新发送,保留该安全等价实现
  • 投递入口按 PR 意图吸收,但增加人工确认、平台和状态服务端校验

暂未完整纳入

验证

  • 当前整合分支:387 passed,16 subtests passed;删除旧字段后的配置专项回归 21 passed
  • PR Add collection account-safety guardrails #66 原始合并提交隔离测试:321 passed,11 subtests passed,前端构建通过
  • 新增范围隔离测试:旧配置中的目标新增/单日新增字段会被忽略并在保存时清除;外部平台页面不消耗 BOSS 页面额度;BOSS 页面到限后仍继续外部平台采集
  • TypeScript 检查与 Vite production build 通过
  • 正式历史数据库复制件:1534 条升级前后不变,完整性 ok
  • 本人智联账号真实采集:3 条,失败 0
  • 51job 公开页真实采集:3 条,失败 0
  • 51job 登录态最小复测触发验证/限流后自动停止,新增和发送均为 0
  • GitHub CI:Python 3.11 / 3.12 均通过

来源与署名

所有选择性整合提交均保留原作者或 Co-authored-by;PR #66 通过合并主线提交保留完整历史。

保持 Draft,等待 CI 与用户本地真实环境验收。

zhenian-666 and others added 13 commits August 23, 2026 14:30
新增自包含的 51job(前程无忧)采集模块 jobs_51job.py,含:
- 分簇节奏(BurstPacer)防风控:簇内快 + 簇间长停
- 薪资严格过滤(中文万/千/年薪解析)
- 排除词 / JD排除词 / 屏蔽公司
- 风控检测(静默降级三信号 + L0-L3 风险等级)+ 风控日志
- 断点续采(关键词级 checkpoint,默认自动续采)

配套改动:
- db.py:jobs 表加 source 字段(boss/51job 区分)+ collect_progress 表
- jobs.py(BOSS):source 字段 + 断点续采 + db 路径跟随 _base_dir

⚠️ 声明:本模块仅个人本地测试通过,未经过充分生产验证。
使用者在真实环境(尤其国内 IP)运行采集,可能触发 51job 风控,
由此导致的账号限流、封禁等后果由使用者自行承担,本仓库维护者不负责。

详见:src/bosshunter/scraper/jobs_51job模块说明.md
shuaigechz-cloud and others added 8 commits August 23, 2026 18:36
Selectively adapted from PR #55: structured education and campus/social fields, filters, scoring context, exports, and greeting preference.

Co-authored-by: XinPeng76 <xinpeng@bupt.edu.cn>
Selectively adapted from PR #61 so invalid Markdown bytes cannot enter the local resume store.

Co-authored-by: 蔡志鹏 <caizhipeng318@gmail.com>
Selectively adapted from PRs #55, #64, and #65.

Co-authored-by: XinPeng76 <xinpeng@bupt.edu.cn>
Adapted from PR #65 with server-side platform and status guards.

Co-authored-by: XinPeng76 <xinpeng@bupt.edu.cn>
@powerycy

Copy link
Copy Markdown
Collaborator Author

已合并 PR #66 的账号安全能力,并按本次多平台边界做了范围修正:新增唯一岗位、搜索页、详情页和页面访问总量都只统计 BOSS 直聘;智联与 51job 不消耗这些额度。BOSS 达到额度后仅跳过 BOSS,外部平台采集继续;验证码/拦截等真实风险仍会安全停机。采用了单页签复用、列表预筛、连续失败阈值、跨重启风险锁和 BOSS 采集到投递冷却。整合分支离线回归 390 passed、16 subtests,前端构建通过。

@powerycy

Copy link
Copy Markdown
Collaborator Author

按最新安全判断完成修正:采集结果数量不是页面访问风险,因此 BOSS、智联、51job 已全部移除“目标新增”和“单日新增不超过 100”。界面与配置页只保留最大页数、排序等采集设置;旧 config.yaml 中残留的 target_count、default_target_count、daily_new_jobs_limit 会在读取时忽略、保存时清除。PR #66 的页面访问守卫、单页签复用、预筛、连续失败停止、风险锁和冷却仍保留,其中搜索页/详情页/全局页面额度只作用于 BOSS。最新提交 73cc992;全量回归 387 passed、16 subtests,配置专项 21 passed,前端生产构建通过。

@powerycy

Copy link
Copy Markdown
Collaborator Author

补充 51job 北京采集支持:加入官方城市编码 010000,城市目录现为北京、上海;同时修复原列表解析将详情链接固定拼成上海路径的问题,改为读取每张岗位卡片的真实 51job 详情链接,避免北京岗位打开错误地址。未知城市仍拒绝猜测编码。提交 8f63546,相关采集/编排/API 回归 76 passed。

@powerycy

Copy link
Copy Markdown
Collaborator Author

本轮补充验证与采用结论:\n\n- BOSS 采集等待整体放慢为原来的 1.5 倍(常规节流 3–7.5 秒,页面加载/滚动/详情等待同步放慢)。\n- BOSS 采集工作标签页改为后台打开,不再主动抢占前台窗口或移动系统鼠标。\n- 检测到 captcha / rate limit / blocked / 登录失效后,本轮立即停止,并设置随机 5–10 分钟冷却;冷却结束后由用户重新开始,不做自动绕过或自动续跑。\n- PR #27 中的浏览器鼠标事件用于发送流程点击真实控件,现有功能路径继续保留;没有把伪造/随机鼠标轨迹加入采集流程。\n- 上述冷却和延迟可在面板“BOSS 直聘采集安全”中调整,且只作用于 BOSS 采集。\n\n验证:\n- Python 全量测试:390 passed,另含 16 subtests passed。\n- 前端生产构建通过。\n- diff check 与配置 schema 校验通过。

@powerycy

Copy link
Copy Markdown
Collaborator Author

修正 BOSS 风险检测误报(用户反馈此前账号正常但采集频繁显示 blocked):\n\n- 确认当前 BOSS 登录/聊天页正常;此前两次停止都发生在“增长”列表加载阶段,旧规则会把页面正文中任意孤立的“403”判为拦截。\n- 正文孤立的 403/风险词不再触发;正常岗位列表或详情存在时忽略正文风险词。\n- 仅明确验证控件、验证/拦截 URL、拦截标题,或没有正常岗位内容的标准错误页作为强证据。\n- 风险信号必须在同一页面连续两次确认;只出现一次的瞬时信号继续执行。\n- blocked 文案明确为“当前采集页请求拦截,不代表账号封禁”,风险记录增加 evidence code,方便后续判断。\n- 连续页面失败只结束 BOSS 当前轮,不写账号风险锁,其他平台可继续。\n- 旧版默认 24 小时风险锁已取消;全局兜底改为 10 分钟,BOSS 采集仍按 5–10 分钟随机。\n\n验证:392 passed,另含 16 subtests;前端生产构建通过。

@powerycy

Copy link
Copy Markdown
Collaborator Author

新增配置页实时页数提醒:\n\n- BOSS 理论列表页 = 关键词数 × 城市数 × 每组合最大页数。\n- 在“搜索设置”和“BOSS 单日搜索页上限”两处实时显示计算结果。\n- 超过每日上限时显示黄色醒目提示,并说明执行到上限后会停止 BOSS 当前轮;未超过时显示绿色说明。\n- 智联和 51job 没有每日累计页数硬上限,仍保留各自每组合 max_pages。\n\n前端 TypeScript 与生产构建通过。用户本地每日 BOSS 搜索页上限已设为 60。

@powerycy
powerycy marked this pull request as ready for review August 25, 2026 09:49
@powerycy
powerycy merged commit 92065b8 into main Aug 25, 2026
2 checks passed
@powerycy

Copy link
Copy Markdown
Collaborator Author

最终验收状态:#62 已合并到 main。用户本地真实环境验收通过;最终回归 401 项、16 个子测试通过,GitHub CI 的 Python 3.11 / 3.12 均通过。首页的平台边界、本轮功能说明、贡献饼图和贡献表已在 #74 更新。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[网站行为]获取JD时,会写入JD来源 [Bug] 端口报错连接不上

5 participants