首先这是一个python脚本,需要python环境,其次软件用到了Chrome内核需要Chrome浏览器,第一次需要先进行登录(网页自行登录),登录好之后可以打开脚本pycharm或者直接文本文档,修改需要搜索的标签即可,开始执行脚本就可一键打招呼(目前打招呼已被注释课打开),后续还会增加根据岗位jd判断匹配度决定是否投递,也在注释部分
from random import random
import loguru
from DrissionPage import Chromium, ChromiumOptions
# loguru配置
loguru.logger.add("log/boss.log", rotation="1 MB", encoding="utf-8", backtrace=True, diagnose=True)
class Boss:
def __init__(self):
self.co1 = ChromiumOptions().set_paths(local_port=9111, user_data_path=r'D:\code_py\boss_auto\data')
self.url = 'https://www.zhipin.com/'
# 随机1-3秒
self.random_int = random() * 3 + 1
self.xpath_tag_list = "xpath://ul[@class='job-keyword-list']/li"
self.job_detail_xpath = "xpath://div[@class='job-sec-text']"
self.job_title_xpath = "xpath://div[@class='name']/h1"
self.job_bonus_xpath = "xpath://div[@class='job-tags']/span"
self.job_salary_xpath = "xpath://div[@class='name']/span[@class='salary']"
self.job_city_xpath = "xpath://div[@class='info-primary']/p/a"
self.job_year_xpath = "xpath://div[@class='info-primary']/p/span[1]"
self.job_degree_xpath = "xpath://div[@class='info-primary']/p/span[2]"
self.start_chat_xpath = "xpath://div[@class='btn-container']/div/a"
self.chat_close_xpath = "xpath://div[@class='dialog-title']/a/i"
self.chat_input_xpath = "xpath://div[@class='edit-area']/textarea"
self.chat_send_xpath = "xpath://div[@class='edit-area']/div"
self.next_page_xpath = "xpath://a/i[@class='ui-icon-arrow-right']"
def get_tab(self):
tab_new = Chromium(addr_or_opts=self.co1).get_tab()
loguru.logger.info('打开boss直聘')
tab_new.get(self.url)
tab_new.wait(self.random_int)
return tab_new
def get_latest_tab(self):
tab_new = Chromium(addr_or_opts=self.co1).latest_tab
loguru.logger.info('切换最新窗口')
tab_new.wait(self.random_int)
exit(0)
return tab_new
def judge_similar(self,tags_in, job_list_in, job_title_in, job_bonus_in, job_salary_in, job_city_in, job_year_in, job_degree_in):
# 1.标签匹配
rate = 100
return rate
def get_search(self, tab_search, keyword):
loguru.logger.info('搜索关键词:{}'.format(keyword))
tab_search.ele('@class=ipt-search').input(keyword) # 输入搜索内容
tab_search.wait(self.random_int)
tab_search.ele('@ka=search_box_index').click() # 点击搜索按钮
tab_search.wait(self.random_int)
loguru.logger.info('获取搜索结果')
for i in range(1,10):
job_list = tab1.eles('@class=job-card-wrapper')
if len(job_list) == 0:
loguru.logger.info('未找到相关职位,网站更新了?')
exit(-1)
for job in job_list:
job.click()
tab_latest = self.get_latest_tab()
tags_in = self.get_tags(tab_latest)
job_list_in = self.get_job_detail(tab_latest)
job_title_in = self.get_job_title(tab_latest)
job_bonus_in = self.get_job_bonus(tab_latest)
job_salary_in = self.get_job_salary(tab_latest)
job_city_in = self.get_job_city(tab_latest)
job_year_in = self.get_job_year(tab_latest)
job_degree_in = self.get_job_degree(tab_latest)
# self.judge_similar(tags_in, job_list_in, job_title_in, job_bonus_in, job_salary_in, job_city_in, job_year_in, job_degree_in)
# self.get_start_chat(tab_latest)
# self.chat_input(tab_latest)
# self.chat_send(tab_latest)
# self.chat_close(tab_latest)
tab_latest.close()
loguru.logger.info('第{}页'.format(i))
tab_search.ele(self.next_page_xpath).click()
loguru.logger.info('搜索完成10页')
def get_tags(self,tab_latest):
tags = tab_latest.eles(self.xpath_tag_list)
tag_list = [tag.text for tag in tags]
if tag_list:
loguru.logger.info('职位标签:{}'.format(tag_list))
return tag_list
else:
loguru.logger.warning('该职位没有标签,HR真懒啊')
return None
def get_job_detail(self,tab_latest):
job_detail = tab_latest.ele(self.job_detail_xpath).text
if job_detail:
loguru.logger.info('职位详情:{}'.format(job_detail))
return job_detail
else:
loguru.logger.warning('该职位没有详情???那还投个毛')
return None
def get_job_title(self,tab_latest):
job_title = tab_latest.ele(self.job_title_xpath).text
if job_title:
loguru.logger.info('职位名称:{}'.format(job_title))
return job_title
else:
loguru.logger.warning('该职位没有名称???那应该不可能吧')
return None
def get_job_bonus(self,tab_latest):
job_bonuss = tab_latest.eles(self.job_bonus_xpath)
job_bonus = [job_bonus1.text for job_bonus1 in job_bonuss]
if job_bonus:
loguru.logger.info('职位福利:{}'.format(job_bonus))
return job_bonus
else:
loguru.logger.warning('该职位没有福利???不太行啊')
return None
def get_job_salary(self,tab_latest):
job_salary = tab_latest.ele(self.job_salary_xpath).text
if job_salary:
loguru.logger.info('职位薪资:{}'.format(job_salary))
return job_salary
else:
loguru.logger.warning('该职位没有薪资???')
return None
def get_job_city(self,tab_latest):
job_city = tab_latest.ele(self.job_city_xpath).text
if job_city:
loguru.logger.info('职位城市:{}'.format(job_city))
return job_city
else:
loguru.logger.warning('该职位没有城市???')
return None
def get_job_year(self,tab_latest):
job_year = tab_latest.ele(self.job_year_xpath).text
if job_year:
loguru.logger.info('职位年限:{}'.format(job_year))
return job_year
else:
loguru.logger.warning('该职位没有年限???')
return None
def get_job_degree(self,tab_latest):
job_degree = tab_latest.ele(self.job_degree_xpath).text
if job_degree:
loguru.logger.info('职位学历:{}'.format(job_degree))
return job_degree
else:
loguru.logger.warning('该职位没有学历要求???')
return None
def get_start_chat(self,tab_latest):
start_chat = tab_latest.ele(self.start_chat_xpath).wait(self.random_int)
if start_chat:
loguru.logger.info('开始聊天')
start_chat.click()
else:
loguru.logger.warning('该职位没有开始聊天按钮???')
def chat_close(self,tab_latest):
chat_close = tab_latest.ele(self.chat_close_xpath).wait(self.random_int)
if chat_close:
loguru.logger.info('关闭聊天')
chat_close.click()
else:
loguru.logger.warning('该职位没有关闭聊天按钮???')
def chat_input(self,tab_latest):
chat_input = tab_latest.ele(self.chat_input_xpath).wait(self.random_int)
if chat_input:
loguru.logger.info('输入聊天内容')
chat_input.input('你好,我对岗位很感兴趣,我想问可以发一份简历吗?')
else:
loguru.logger.warning('该职位没有聊天输入框???')
def chat_send(self,tab_latest):
chat_send = tab_latest.ele(self.chat_send_xpath)
if chat_send:
loguru.logger.info('发送聊天内容')
chat_send.click()
else:
loguru.logger.warning('该职位没有发送聊天按钮???')
if __name__ == '__main__':
boss = Boss()
tab1 = boss.get_tab()
boss.get_search(tab1, 'Python')