菜单

Administrator
发布于 2025-01-27 / 105 阅读
0
0

BOSS直聘自动打招呼脚本

首先这是一个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')


评论