栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

BOSS直聘自动化投递

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BOSS直聘自动化投递

前言

Boss直聘是一个口碑还不错的招聘网站,并且网站非常适合自动化海投。本文主要基于Selenium框架进行自动化海投。

参数定义

自动化脚本主要包含两个参数,job_list为自动化投递关键词列表,base_url为自动化投递基础url。

其中base_url可以指定投递城市,例如100010000代表全国,101020100代表上海。

job_list = [
    '机器学习 实习',
]
driver = webdriver.Chrome()
base_url = 'https://www.zhipin.com/job_detail/?query={}&scity=101020100&industry=&position='

如何获得城市编码?

  1. 选择城市
  2. 地址栏查看编码
登陆思路

由于账户密码登录Boss直聘设置了验证码机制,因此为了简化登录流程,采用了二维码登录方式,通过二维码登录可以避免输入验证码。

二维码登陆完成之后,需要向控制台输入任意字符,通知自动化脚本继续运行。

def login():
    driver.get('https://sao.zhipin.com/')
    print('页面加载完成,请手动验证后输入任意字符')
    input()
扫描所有页面

自动化脚本根据是否存在下一页按钮判断扫描是否完成,如果存在可点击的下一页按钮,则通过点击下一页按钮的形式进行下一页的扫描。

def run():
    login()
    for job in job_list:
 url = base_url.format(job)
 items = []
 first_page = True
 while True:
     driver.get(url)
     try:
  # 用于等待下一页的按钮出现后再进行点击
  WebDriverWait(driver=driver, timeout=5).until(
      EC.presence_of_element_located((By.XPATH, '//div[@class="page"]/a[last()]')))
     except:
  # 有可能不存在下一页按钮
  pass
     # 页面加载完毕后 解析页面
     items.extend(parse_list_page(driver, first_page))
     first_page = False
     try:
  next_bt = driver.find_element_by_xpath('//div[@class="page"]/a[last()]')
  # 判断是否到了最后一页
  if "disabled" in next_bt.get_attribute('class'):
      break
  else:
      url = next_bt.get_attribute('href')
     except:
  # 有可能不存在下一页按钮
  break
 for item in items:
     request_detail_page(item.link)
页面解析

BOSS直聘的招聘信息列表分为两种投递状态:继续沟通和立即沟通。

如果按钮文字是继续沟通,则代表该岗位已经投递过,会在控制台输出岗位信息。

如果按钮文字是立即沟通,则代表该岗位没有被投递过,自动化脚本会在内存中记录岗位投递地址,以便后续投递操作。

def parse_list_page(driver, first_page):
    if first_page:
 links: ElementList = WebDriverWait(driver=driver, timeout=10).until(
     EC.presence_of_all_elements_located((By.XPATH, '//*[@id="main"]/div/div[3]/ul/li')))
    else:
 links: ElementList = WebDriverWait(driver=driver, timeout=10).until(
     EC.presence_of_all_elements_located((By.XPATH, '//*[@id="main"]/div/div[2]/ul/li')))
    items = []
    for temp in links:
 link = temp.find_element_by_xpath('./div/div[1]/h3/a')
 job = link.find_element_by_class_name('job-title').text
 company = temp.find_element_by_class_name('company-text').text
 href = link.get_attribute('href')
 btn = temp.find_element_by_xpath('./div/a')
 if '继续沟通' in btn.get_attribute('innerHTML'):
     print('已投递过', company)
 else:
     item = LagouItem(href, company, job)
     print(item)
     items.append(item)
    return items
自动化投递

扫描完成后,打开每一个岗位链接,点击投递按钮即可。

def request_detail_page(url):
    # 用新窗口打开页面
    url = url
    driver.get(url)
    # 等待页面加载完成
    WebDriverWait(driver, timeout=10).until(
 EC.presence_of_element_located((By.XPATH, '//*[@id="main"]/div[1]/div/div/div[3]/div[1]/a')))
    btn = driver.find_element_by_xpath('//*[@id="main"]/div[1]/div/div/div[3]/div[1]/a')
    if btn.text == '立即沟通':
 print('发现目标,点击投递')
 btn.click()
    elif btn.text == '继续沟通':
 print('已投递过', url)
备注

自动化脚本基本实现了自动化投递,但是Boss直聘每天有投递上限,如果达到投递上限,自动化脚本会抛异常终止。目前自动化脚本尚未针对投递上限情况进行处理。

完整代码

https://gist.github.com/zhenlingcn/0d19581cf68e0f9fe616f58333aca7dc

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号