
5分钟搞懂boss直聘怎么招人:附完整示例
看了一堆教程还是不会写项目?别急,今天用 boss直聘怎么招人 这个场景,给你一套能直接跑的 完整示例。
项目目标:从手动到自动的跨越
很多开发者卡在“想法”和“落地”之间。比如你想做一个招聘助手,核心需求就两个:批量打招呼 和 消息自动回复。但手动操作太累,效率低。
我们搭建一个 Python 脚本,模拟真人行为,实现:自动筛选简历:根据关键词(如“Java”、“3年经验”)过滤。
批量打招呼:向符合条件的候选人发送预设消息。
数据记录:将操作结果存入 Excel,方便后续跟进。注意:所有操作必须遵守平台规则,避免封号。本示例仅用于学习自动化逻辑,实际使用请谨慎。目录结构:清晰的文件组织
项目结构如下,简单明了,便于维护:
recruitment_bot/
├── config.py # 配置文件(账号、关键词、消息模板)
├── main.py # 主程序入口
├── browser_utils.py # 浏览器自动化工具函数
├── message_templates.py # 消息模板库
├── data_processor.py # 数据处理与Excel导出
└── requirements.txt # 依赖库关键文件说明:config.py:集中管理敏感信息(如账号密码)和业务参数(如打招呼频率)。
browser_utils.py:封装 Selenium 操作,实现页面定位、点击、输入等基础功能。
data_processor.py:负责将候选人信息结构化,并写入 Excel。核心代码实现:逐行讲解关键逻辑
1. 配置文件(config.py)
# config.py
ACCOUNT = {username: your_boss_account, # 替换为实际账号password: your_password # 建议通过环境变量加载,避免硬编码
}KEYWORDS = [Java, 后端, 3年经验] # 筛选简历的关键词
MESSAGE_TEMPLATE = 您好,我对您的简历很感兴趣,方便聊聊吗? # 打招呼消息
INTERVAL_SECONDS = 5 # 每次操作间隔时间(秒),模拟真人
MAX_CANDIDATES = 20 # 每次最多处理20人2. 浏览器自动化(browser_utils.py)
# browser_utils.py
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from config import ACCOUNT, INTERVAL_SECONDSdef init_driver():初始化浏览器驱动options = webdriver.ChromeOptions()options.add_argument(--start-maximized)options.add_argument(--disable-blink-features=AutomationControlled) # 隐藏自动化特征driver = webdriver.Chrome(options=options)driver.set_page_load_timeout(30)return driverdef login(driver):登录boss直聘driver.get(https://login.zhipin.com/)time.sleep(2)# 输入账号username_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, input-account)))username_input.send_keys(ACCOUNT[username])# 输入密码password_input = driver.find_element(By.ID, input-password)password_input.send_keys(ACCOUNT[password])# 点击登录按钮login_button = driver.find_element(By.CSS_SELECTOR, button[data-dp-btn='login'])login_button.click()print(登录成功,等待跳转...)time.sleep(5) # 等待页面完全加载def search_candidates(driver, keywords):根据关键词搜索候选人driver.get(https://www.zhipin.com/web/chat/index)time.sleep(3)candidates = []for keyword in keywords:# 切换搜索框,输入关键词search_box = driver.find_element(By.CSS_SELECTOR, input[placeholder*='搜索'])search_box.clear()search_box.send_keys(keyword)search_box.send_keys(\n) # 模拟回车time.sleep(2)# 获取候选人列表candidate_cards = driver.find_elements(By.CSS_SELECTOR, .geek-card)for card in candidate_cards[:10]: # 每次只取前10个,避免过载try:name = card.find_element(By.CSS_SELECTOR, .geek-name).texttitle = card.find_element(By.CSS_SELECTOR, .geek-job).textcandidates.append({name: name, title: title, keyword: keyword})except:continuetime.sleep(INTERVAL_SECONDS) # 间隔操作,降低风险return candidates3. 消息发送与数据处理(main.py + data_processor.py)
# data_processor.py
import pandas as pd
from datetime import datetimedef save_to_excel(candidates, filename=recruitment_log.xlsx):将候选人数据保存到Exceldf = pd.DataFrame(candidates)df[timestamp] = datetime.now().strftime(%Y-%m-%d %H:%M:%S)df.to_excel(filename, index=False)print(f数据已保存至 {filename})# main.py
import time
from browser_utils import init_driver, login, search_candidates
from data_processor import save_to_excel
from config import MESSAGE_TEMPLATE, MAX_CANDIDATES, INTERVAL_SECONDS
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdef send_message(driver, candidate):向单个候选人发送消息try:# 点击候选人卡片,进入聊天窗口driver.find_element(By.XPATH, f//*[text()='{candidate['name']}']).click()time.sleep(1)# 定位输入框并发送消息chat_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, .chat-input)))chat_input.send_keys(MESSAGE_TEMPLATE)chat_input.send_keys(\n)print(f已向 {candidate['name']} 发送消息)time.sleep(INTERVAL_SECONDS)except Exception as e:print(f发送失败: {e})def main():driver = init_driver()try:login(driver)candidates = search_candidates(driver, [Java, 后端])print(f共找到 {len(candidates)} 位候选人)# 限制每次处理数量for candidate in candidates[:MAX_CANDIDATES]:send_message(driver, candidate)save_to_excel(candidates)finally:driver.quit()if __name__ == __main__:main()运行与测试:确保代码稳定可用
1. 环境准备
# 安装依赖
pip install -r requirements.txtrequirements.txt 内容:
selenium==4.15.0
pandas==2.1.4
webdriver-manager==4.0.12. 本地测试步骤手动登录验证:先手动运行 init_driver() 和 login(),确认账号能正常登录。
小规模测试:将 MAX_CANDIDATES 改为 3,观察是否成功发送消息。
检查日志:查看控制台输出,确认“发送成功”和“数据已保存”信息。避坑提示:IP 封禁:建议使用代理 IP,避免同一 IP 频繁操作。
验证码:若触发滑块验证码,需人工干预或使用打码平台(需额外集成)。
页面结构变化:Boss 直聘可能更新前端代码,需定期更新 CSS 选择器。优化扩展:提升效率与安全性
1. 增加重试机制
import randomdef safe_send_message(driver, candidate, retries=3):带重试机制的消息发送for i in range(retries):try:send_message(driver, candidate)return Trueexcept:if i retries - 1:wait_time = random.uniform(2, 5)print(f第{i+1}次失败,{wait_time:.1f}秒后重试...)time.sleep(wait_time)return False2. 数据去重
def deduplicate(candidates):根据姓名去重,避免重复打招呼seen = set()unique_candidates = []for c in candidates:if c[name] not in seen:seen.add(c[name])unique_candidates.append(c)return unique_candidates3. 日志记录
import logginglogging.basicConfig(level=logging.INFO,format=%(asctime)s - %(levelname)s - %(message)s,handlers=[logging.FileHandler(bot.log),logging.StreamHandler()]
)在关键步骤添加 logging.info(...),便于排查问题。
小结:从示例到实战的最后一公里
这个 boss直聘怎么招人 的 完整示例 涵盖了从登录、搜索、消息发送到数据记录的全流程。核心在于:模拟真人行为 和 合理控制频率。
关键要点回顾:配置文件分离:敏感信息与业务逻辑解耦,便于维护。
异常处理:每次操作都要考虑失败情况,增加重试和日志。
频率控制:INTERVAL_SECONDS 是关键参数,建议设置在 5-10 秒。
数据持久化:Excel 或数据库记录操作结果,方便后续跟进。下一步建议:将脚本部署到云服务器,使用定时任务(如 Crontab)定期运行。
集成通知功能(如企业微信、钉钉),当有新候选人回复时推送提醒。
学习 Playwright 替代 Selenium,性能更优,支持多浏览器。技术栈没有银弹,关键在于 小步快跑,持续迭代。从这个小项目出发,你可以扩展出更多自动化场景,如简历筛选、面试安排等。
还有什么不懂的?评论区留言挨个回