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 candidates
3. 消息发送与数据处理(main.py + data_processor.py)
# data_processor.py
import pandas as pd
from datetime import datetimedef save_to_excel(candidates, filename="recruitment_log.xlsx"):"""将候选人数据保存到Excel"""df = 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.txt
requirements.txt 内容:
selenium==4.15.0
pandas==2.1.4
webdriver-manager==4.0.1
2. 本地测试步骤
- 手动登录验证:先手动运行
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 False
2. 数据去重
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_candidates
3. 日志记录
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,性能更优,支持多浏览器。
技术栈没有银弹,关键在于 小步快跑,持续迭代。从这个小项目出发,你可以扩展出更多自动化场景,如简历筛选、面试安排等。
还有什么不懂的?评论区留言挨个回