replace Boss in ui with BOSS

This commit is contained in:
geekgeekrun
2026-02-09 08:14:39 +08:00
parent 6ab40f759a
commit 46c0bcba42
12 changed files with 69 additions and 68 deletions
+17 -17
View File
@@ -2,7 +2,7 @@
**->维护者正在疯狂求职中<-** **->维护者正在疯狂求职中<-**
一款可以帮助你在Boss直聘上**自动批量开聊Boss**的脚本,基于Puppeteer。 一款可以帮助你在BOSS直聘上**自动批量开聊BOSS**的脚本,基于Puppeteer。
与每一位牛人站在一起 与每一位牛人站在一起
@@ -17,7 +17,7 @@
## 程序有哪些功能?运行逻辑是什么?怎样使用? ## 程序有哪些功能?运行逻辑是什么?怎样使用?
### 自动开聊 ### 自动开聊
扩列神器!按照你所设置的求职偏好,自动开聊推荐职位列表中的匹配的Boss。可以帮你开聊推荐列表中的职位、根据设置的求职期望推荐的职位以及根据你设置的关键词通过搜索找到的职位;可以通过拖拽的方式自定义搜索顺序哦~ 扩列神器!按照你所设置的求职偏好,自动开聊推荐职位列表中的匹配的BOSS。可以帮你开聊推荐列表中的职位、根据设置的求职期望推荐的职位以及根据你设置的关键词通过搜索找到的职位;可以通过拖拽的方式自定义搜索顺序哦~
<img width="1309" alt="image" src="https://github.com/user-attachments/assets/fda33e53-347b-453d-a791-5a1dcd506605" /> <img width="1309" alt="image" src="https://github.com/user-attachments/assets/fda33e53-347b-453d-a791-5a1dcd506605" />
@@ -27,10 +27,10 @@
<img width="1680" height="1050" alt="image" src="https://github.com/user-attachments/assets/cbdea071-ec28-49b0-af12-1018aa9579a9" /> <img width="1680" height="1050" alt="image" src="https://github.com/user-attachments/assets/cbdea071-ec28-49b0-af12-1018aa9579a9" />
2. 按照公司名称在列表中查找职位,查找到目标职位后,自动点击这个职位,右侧将会展示职位详情 2. 按照公司名称在列表中查找职位,查找到目标职位后,自动点击这个职位,右侧将会展示职位详情
3. 对工作地、薪资、工作经验、职位名称、职位类型、职位描述、Boss活跃度进行匹配 3. 对工作地、薪资、工作经验、职位名称、职位类型、职位描述、BOSS活跃度进行匹配
- 如果可以匹配,则自动点击开聊按钮 - 如果可以匹配,则自动点击开聊按钮
- 不匹配则根据你设置的标记不合适的策略将职位标记为不合适 - 不匹配则根据你设置的标记不合适的策略将职位标记为不合适
- 首先查看是否命中策略为“在Boss直聘上标记不合适”的配置,如果命中则在Boss直聘上点击相关UI,标记不合适,一段时间内你将不会在Boss上看到这个职位,且将会推荐新职位置换这个职位(对于“推荐列表中的职位”、“通过搜索找到的职位”,此项会回落到“在本地数据库中标记不合适,且7天内再遇到这个职位时直接跳过”) - 首先查看是否命中策略为“在BOSS直聘上标记不合适”的配置,如果命中则在BOSS直聘上点击相关UI,标记不合适,一段时间内你将不会在BOSS上看到这个职位,且将会推荐新职位置换这个职位(对于“推荐列表中的职位”、“通过搜索找到的职位”,此项会回落到“在本地数据库中标记不合适,且7天内再遇到这个职位时直接跳过”)
- 然后查看是否命中策略为“在本地数据库中标记不合适,且7天内再遇到这个职位时直接跳过”的配置,如果命中则仅在本地数据库中记录,且本次运行将无视这个职位 - 然后查看是否命中策略为“在本地数据库中标记不合适,且7天内再遇到这个职位时直接跳过”的配置,如果命中则仅在本地数据库中记录,且本次运行将无视这个职位
- 最后查看是否命中策略为了“仅在本次运行中记录不合适,且本次运行再遇到这个职位时直接跳过”的配置,如果命中则本次运行将无视这个职位,但下次运行可能还会查看这个职位 - 最后查看是否命中策略为了“仅在本次运行中记录不合适,且本次运行再遇到这个职位时直接跳过”的配置,如果命中则本次运行将无视这个职位,但下次运行可能还会查看这个职位
@@ -40,13 +40,13 @@
#### 运行效果 #### 运行效果
> Boss直聘界面已改版,如下是旧版Boss直聘界面 > BOSS直聘界面已改版,如下是旧版BOSS直聘界面
https://github.com/user-attachments/assets/672f1637-dd54-416c-922e-1ecf09b0874a https://github.com/user-attachments/assets/672f1637-dd54-416c-922e-1ecf09b0874a
### 已读不回复聊 ### 已读不回复聊
Boss不明原因已读不回?简历就是投不出去? BOSS不明原因已读不回?简历就是投不出去?
已读不回复聊,有事没事提醒一下已读不回的 Ta,助力把握每次机会 已读不回复聊,有事没事提醒一下已读不回的 Ta,助力把握每次机会
@@ -54,9 +54,9 @@ Boss不明原因已读不回?简历就是投不出去?
#### 匹配逻辑 #### 匹配逻辑
1. 在聊天列表中查找对你消息已读不回的Boss,再发一条消息,多次复聊;同时: 1. 在聊天列表中查找对你消息已读不回的BOSS,再发一条消息,多次复聊;同时:
- 如果设置了“跟进时限”,那么在这个时间之前活跃的聊天将不会被检查 - 如果设置了“跟进时限”,那么在这个时间之前活跃的聊天将不会被检查
- 如果设置了“跟进间隔”,且再次检查时发现Boss已读不回,且距离上次提醒时间间隔小于这个时间,那么聊天将暂时不会跟进,直到下次检查时距离上次提醒时间间隔大于这个时间 - 如果设置了“跟进间隔”,且再次检查时发现BOSS已读不回,且距离上次提醒时间间隔小于这个时间,那么聊天将暂时不会跟进,直到下次检查时距离上次提醒时间间隔大于这个时间
#### 发送内容 #### 发送内容
以下二者之一: 以下二者之一:
@@ -64,8 +64,8 @@ Boss不明原因已读不回?简历就是投不出去?
2. 由大语言模型(根据简历及当前聊天上下文)生成的内容 2. 由大语言模型(根据简历及当前聊天上下文)生成的内容
## 辅助功能介绍 ## 辅助功能介绍
### Boss 登录助手 ### BOSS 登录助手
帮你用十分简单的方式,登录到 Boss 直聘,以进行自动开聊、已读不回提醒,避免和乱七八糟的技术名词(类似:Cookie、登录凭证、JSON……)打交道 帮你用十分简单的方式,登录到 BOSS 直聘,以进行自动开聊、已读不回提醒,避免和乱七八糟的技术名词(类似:Cookie、登录凭证、JSON……)打交道
<img width="1680" alt="image" src="https://github.com/user-attachments/assets/b5d02385-f1c0-4045-b01a-66c5f747fec5" /> <img width="1680" alt="image" src="https://github.com/user-attachments/assets/b5d02385-f1c0-4045-b01a-66c5f747fec5" />
@@ -138,7 +138,7 @@ Boss不明原因已读不回?简历就是投不出去?
在此先谢过了~ 在此先谢过了~
## 为什么要写这个程序? ## 为什么要写这个程序?
根据日常使用求职平台(Boss直聘)的经验,在已经开聊很多职位的情况下,经常会推荐: 根据日常使用求职平台(BOSS直聘)的经验,在已经开聊很多职位的情况下,经常会推荐:
1. 一些长时间不活跃的“僵尸”职位 - 活跃信息默认隐藏,需要点开职位详情才能看到 1. 一些长时间不活跃的“僵尸”职位 - 活跃信息默认隐藏,需要点开职位详情才能看到
2. 牛头不对马嘴,不符合求职期望的职位 2. 牛头不对马嘴,不符合求职期望的职位
@@ -148,15 +148,15 @@ Boss不明原因已读不回?简历就是投不出去?
## 使用必读及免责声明 ## 使用必读及免责声明
如下是使用必读及免责声明,请您务必逐条阅读;本程序首次启动时,您还会再看到一次;若您不接受如下提到的任何内容,请不要使用本程序。 如下是使用必读及免责声明,请您务必逐条阅读;本程序首次启动时,您还会再看到一次;若您不接受如下提到的任何内容,请不要使用本程序。
- 本程序从某种程度上说属于辅助工具,与《<a href="https://about.zhipin.com/agreement/?id=registerprotocol_30" rel="noreferer noopener" target="blank">Boss直聘用户协议</a>》(2023年3月版)相关条款相违背,您在注册Boss直聘时已签署过这一条款;根据该条款`七、用户的平台使用义务`、`八、违约责任` 章节,如果一些非正常用户行为被风控监测到,您需要承受包括不仅限于**账号被强制退出登录**、**账号被限制使用**、**账号被封禁**等对您不利的风险;因此使用本程序即意味着**您愿意接受以上风险**,且如果相关风险发生,您需要自行承担相关后果,**本程序概不负责** 。 - 本程序从某种程度上说属于辅助工具,与《<a href="https://about.zhipin.com/agreement/?id=registerprotocol_30" rel="noreferer noopener" target="blank">BOSS直聘用户协议</a>》(2023年3月版)相关条款相违背,您在注册BOSS直聘时已签署过这一条款;根据该条款`七、用户的平台使用义务`、`八、违约责任` 章节,如果一些非正常用户行为被风控监测到,您需要承受包括不仅限于**账号被强制退出登录**、**账号被限制使用**、**账号被封禁**等对您不利的风险;因此使用本程序即意味着**您愿意接受以上风险**,且如果相关风险发生,您需要自行承担相关后果,**本程序概不负责** 。
- 本程序需要存储您的登录凭据,即Cookie,来模拟您在Boss直聘上开聊Boss的行为;本程序仅会把您的Cookie存储在本地,并在您访问Boss直聘时将其传输到Boss直聘,**不会泄露给第三方**,也不会进行除自动开聊Boss以外的行为;**请勿向他人泄漏您的Cookie**。 - 本程序需要存储您的登录凭据,即Cookie,来模拟您在BOSS直聘上开聊BOSS的行为;本程序仅会把您的Cookie存储在本地,并在您访问BOSS直聘时将其传输到BOSS直聘,**不会泄露给第三方**,也不会进行除自动开聊BOSS以外的行为;**请勿向他人泄漏您的Cookie**。
- 本程序会通过尽可能模仿用户行为来规避相关风险,但并不能保证可以完全规避。建议您使用本程序时**注意节制**,建议当天开聊次数用尽后,隔几天再使用。建议您**注册一个本程序专用的新的Boss直聘账号**进行求职。 - 本程序会通过尽可能模仿用户行为来规避相关风险,但并不能保证可以完全规避。建议您使用本程序时**注意节制**,建议当天开聊次数用尽后,隔几天再使用。建议您**注册一个本程序专用的新的BOSS直聘账号**进行求职。
- 本程序原理是模拟用户在Boss直聘网页上,寻找关键元素并进行点击操作;Boss直聘网站经常**发生改版**,且有可能**包含A/B实验**,这将导致本程序相关脚本失效(典型表现为本程序运行到某一步骤后,浏览器重复“闪退、重新启动”)。如果您在使用过程中遇上程序未按照预期执行的情况,请[点击这里](https://github.com/geekgeekrun/geekgeekrun/issues/new)进行反馈。 - 本程序原理是模拟用户在BOSS直聘网页上,寻找关键元素并进行点击操作;BOSS直聘网站经常**发生改版**,且有可能**包含A/B实验**,这将导致本程序相关脚本失效(典型表现为本程序运行到某一步骤后,浏览器重复“闪退、重新启动”)。如果您在使用过程中遇上程序未按照预期执行的情况,请[点击这里](https://github.com/geekgeekrun/geekgeekrun/issues/new)进行反馈。
- 您所在公司可能会对您的计算机终端或网络进行**监控**,从而**审计**、**跟踪**您的行为;上级/HRBP团队可能会从 IT 团队处获取到监控数据,从而了解团队成员离职倾向。如果您不希望上级/HRBP团队了解到您正在求职,建议您**不要在您所在公司提供的计算机终端或网络上使用本程序**。 - 您所在公司可能会对您的计算机终端或网络进行**监控**,从而**审计**、**跟踪**您的行为;上级/HRBP团队可能会从 IT 团队处获取到监控数据,从而了解团队成员离职倾向。如果您不希望上级/HRBP团队了解到您正在求职,建议您**不要在您所在公司提供的计算机终端或网络上使用本程序**。
- 本程序尊重您的隐私,**不会参与任何钓鱼活动**、**不会上报能够识别出您身份的信息**、**不会向您所在公司及上级/HRBP报告您的求职行为**、**不会向任何猎头公司泄露您的个人信息**。 - 本程序尊重您的隐私,**不会参与任何钓鱼活动**、**不会上报能够识别出您身份的信息**、**不会向您所在公司及上级/HRBP报告您的求职行为**、**不会向任何猎头公司泄露您的个人信息**。
- 本程序**没有内置任何付费功能**,**下载**、**使用**是**免费**的,任何人可以**免费获得**、**免费使用**。**作者没有利用本程序赚到过任何收入**。如果您是从GitHub以外的地方付费后“购买”的本程序,或您被提示“必须付费后才能使用本程序”,那**您大概率被骗了**,或者**您下载到了本程序修改版**。**本程序对此概不负责,请勿找作者商讨退款、售后事宜,相关事宜请咨询卖方**。 - 本程序**没有内置任何付费功能**,**下载**、**使用**是**免费**的,任何人可以**免费获得**、**免费使用**。**作者没有利用本程序赚到过任何收入**。如果您是从GitHub以外的地方付费后“购买”的本程序,或您被提示“必须付费后才能使用本程序”,那**您大概率被骗了**,或者**您下载到了本程序修改版**。**本程序对此概不负责,请勿找作者商讨退款、售后事宜,相关事宜请咨询卖方**。
- 本程序**不对您的求职过程与结果负责**,为您开聊的职位均在Boss直聘上发布,职位信息真实性由Boss直聘负责;请**自行甄别为您开聊的公司**、**认真决定是否参加面试**、**慎重选择Offer**。 - 本程序**不对您的求职过程与结果负责**,为您开聊的职位均在BOSS直聘上发布,职位信息真实性由BOSS直聘负责;请**自行甄别为您开聊的公司**、**认真决定是否参加面试**、**慎重选择Offer**。
- 请在Boss直聘上自行**屏蔽您不期望投递的公司**;如果您不希望您当前公司其它具有招聘账号的员工看到您在Boss直聘上活跃,请**在Boss直聘上屏蔽当前公司及与之关联的公司**。 - 请在BOSS直聘上自行**屏蔽您不期望投递的公司**;如果您不希望您当前公司其它具有招聘账号的员工看到您在BOSS直聘上活跃,请**在BOSS直聘上屏蔽当前公司及与之关联的公司**。
- 本程序经历过了多次测试,理论上来说大部分情况下可以正常运行,但可能也会出现测试用例覆盖不到位,导致程序不按预期运行的情况;如果您有顾虑,建议通过VMware Workstation/Fusion、Oracle VirtualBox、Microsoft Hyper-V等虚拟化技术运行本程序。如果您在使用过程中遇上程序未按照预期执行的情况,请[点击这里](https://github.com/geekgeekrun/geekgeekrun/issues/new)进行反馈。 - 本程序经历过了多次测试,理论上来说大部分情况下可以正常运行,但可能也会出现测试用例覆盖不到位,导致程序不按预期运行的情况;如果您有顾虑,建议通过VMware Workstation/Fusion、Oracle VirtualBox、Microsoft Hyper-V等虚拟化技术运行本程序。如果您在使用过程中遇上程序未按照预期执行的情况,请[点击这里](https://github.com/geekgeekrun/geekgeekrun/issues/new)进行反馈。
## 想联系作者?想反馈使用体验上的问题?想找求职搭子? ## 想联系作者?想反馈使用体验上的问题?想找求职搭子?
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "geekgeekrun-ui", "name": "geekgeekrun-ui",
"version": "0.14.2", "version": "0.14.2",
"description": "Boss 炸弹 - 自动开聊Boss,助力每位打工人求职!", "description": "BOSS 炸弹 - 自动开聊BOSS,助力每位打工人求职!",
"main": "./out/main/index.js", "main": "./out/main/index.js",
"author": "geekgeekrun", "author": "geekgeekrun",
"productName": "GeekGeekRun", "productName": "GeekGeekRun",
@@ -133,7 +133,7 @@ const runAutoChat = async () => {
await dialog.showMessageBox({ await dialog.showMessageBox({
type: `error`, type: `error`,
message: `登录状态无效`, message: `登录状态无效`,
detail: `请重新登录Boss直聘` detail: `请重新登录BOSS直聘`
}) })
process.exit(AUTO_CHAT_ERROR_EXIT_CODE.LOGIN_STATUS_INVALID) process.exit(AUTO_CHAT_ERROR_EXIT_CODE.LOGIN_STATUS_INVALID)
break break
@@ -267,7 +267,7 @@ const mainLoop = async () => {
await dialog.showMessageBox({ await dialog.showMessageBox({
type: `error`, type: `error`,
message: `登录状态无效`, message: `登录状态无效`,
detail: `请重新登录Boss直聘` detail: `请重新登录BOSS直聘`
}) })
sendToDaemon({ sendToDaemon({
type: 'worker-to-gui-message', type: 'worker-to-gui-message',
@@ -319,7 +319,7 @@ const mainLoop = async () => {
await dialog.showMessageBox({ await dialog.showMessageBox({
type: `error`, type: `error`,
message: `登录状态无效`, message: `登录状态无效`,
detail: `请重新登录Boss直聘` detail: `请重新登录BOSS直聘`
}) })
sendToDaemon({ sendToDaemon({
type: 'worker-to-gui-message', type: 'worker-to-gui-message',
@@ -5,7 +5,7 @@
<el-col :span="6"><el-form-item label="公司">{{ jobInfo.companyName }}</el-form-item></el-col> <el-col :span="6"><el-form-item label="公司">{{ jobInfo.companyName }}</el-form-item></el-col>
<el-col :span="6"><el-form-item label="职位名称">{{ jobInfo.jobName }}</el-form-item></el-col> <el-col :span="6"><el-form-item label="职位名称">{{ jobInfo.jobName }}</el-form-item></el-col>
<el-col :span="6"><el-form-item label="职位分类">{{ jobInfo.positionName }}</el-form-item></el-col> <el-col :span="6"><el-form-item label="职位分类">{{ jobInfo.positionName }}</el-form-item></el-col>
<el-col :span="6"><el-form-item label="Boss及其身份">{{ jobInfo.bossName }} {{ jobInfo.bossTitle }}</el-form-item></el-col> <el-col :span="6"><el-form-item label="BOSS及其身份">{{ jobInfo.bossName }} {{ jobInfo.bossTitle }}</el-form-item></el-col>
</el-row> </el-row>
</el-form> </el-form>
<el-divider content-position="left">变更记录</el-divider> <el-divider content-position="left">变更记录</el-divider>
@@ -1,11 +1,11 @@
<template> <template>
<div class="cookie-assistant-page"> <div class="cookie-assistant-page">
<div ml1em mt1em mb1em font-size-16px>Boss 登录助手</div> <div ml1em mt1em mb1em font-size-16px>BOSS登录助手</div>
<el-alert v-if="cookieInvalid" type="warning" :closable="false"> <el-alert v-if="cookieInvalid" type="warning" :closable="false">
由于您是首次使用本程序或者您之前使用的Boss直聘账号登录状态失效因此您需要重新获取登录凭证 由于您是首次使用本程序或者您之前使用的BOSS直聘账号登录状态失效因此您需要重新获取登录凭证
</el-alert> </el-alert>
<div ml1em mt1em line-height-normal> <div ml1em mt1em line-height-normal>
如果您了解如何获取Cookie了解有效的Cookie格式可以直接在下方输入框中进行编辑由于手动编辑较为麻烦建议您打开已登录过Boss直聘的浏览器使用<a 如果您了解如何获取Cookie了解有效的Cookie格式可以直接在下方输入框中进行编辑由于手动编辑较为麻烦建议您打开已登录过BOSS直聘的浏览器使用<a
class="color-blue! decoration-none" class="color-blue! decoration-none"
href="javascript:void(0)" href="javascript:void(0)"
@click.prevent="handleEditThisCookieExtensionStoreLinkClick" @click.prevent="handleEditThisCookieExtensionStoreLinkClick"
@@ -24,14 +24,14 @@
> >
启动浏览器 启动浏览器
</li> </li>
<li>按照正常流程通过 <b>短信验证码/二维码/微信小程序</b> 登录您的Boss直聘账号</li> <li>按照正常流程通过 <b>短信验证码/二维码/微信小程序</b> 登录您的BOSS直聘账号</li>
<li>接下来将自动进行一些页面跳转最终将会停留在首页</li> <li>接下来将自动进行一些页面跳转最终将会停留在首页</li>
<li> <li>
登录后预计5-10秒内具体取决于您的网速您的Cookie将被自动填入下方输入框 登录后预计5-10秒内具体取决于您的网速您的Cookie将被自动填入下方输入框
<details> <details>
<summary color-orange cursor-pointer>我已完成登录但Cookie一直没出现</summary> <summary color-orange cursor-pointer>我已完成登录但Cookie一直没出现</summary>
<div ml-2em max-h-200px of-auto> <div ml-2em max-h-200px of-auto>
如果您确实已经在打开浏览器中看到您已登录了Boss直聘请尝试按照如图所示方式复制Cookie 如果您确实已经在打开浏览器中看到您已登录了BOSS直聘请尝试按照如图所示方式复制Cookie
<figure> <figure>
<figcaption>依次点击浏览器右上角扩展程序图标EditThisCookie图标</figcaption> <figcaption>依次点击浏览器右上角扩展程序图标EditThisCookie图标</figcaption>
<img block max-w-full src="./resources/copy-cookie-step-1.png" /> <img block max-w-full src="./resources/copy-cookie-step-1.png" />
@@ -205,7 +205,7 @@ const handleSubmit = async () => {
fileName: 'boss-cookies.json', fileName: 'boss-cookies.json',
data: formContent.value.collectedCookies data: formContent.value.collectedCookies
}) })
ElMessage.success('Boss直聘 Cookie 保存成功') ElMessage.success('BOSS直聘 Cookie 保存成功')
gtagRenderer('save_cookie_done') gtagRenderer('save_cookie_done')
window.electron.ipcRenderer.send('cookie-saved') window.electron.ipcRenderer.send('cookie-saved')
@@ -22,8 +22,8 @@
gtagRenderer('view_boss_agreement_clicked') gtagRenderer('view_boss_agreement_clicked')
} }
" "
>Boss直聘用户协议</el-link >BOSS直聘用户协议</el-link
>2023年3月版相关条款相违背您在注册Boss直聘时已签署过这一条款根据该条款 >2023年3月版相关条款相违背您在注册BOSS直聘时已签署过这一条款根据该条款
<i>用户的平台使用义务</i><i>违约责任</i> <i>用户的平台使用义务</i><i>违约责任</i>
章节如果一些非正常用户行为被风控监测到您需要承受包括不仅限于<b class="color-red" 章节如果一些非正常用户行为被风控监测到您需要承受包括不仅限于<b class="color-red"
>账号被强制退出登录账号被限制使用账号被封禁</b >账号被强制退出登录账号被限制使用账号被封禁</b
@@ -31,10 +31,10 @@
>且如果相关风险发生<b class="color-red">您需要自行承担相关后果本程序不负责</b> >且如果相关风险发生<b class="color-red">您需要自行承担相关后果本程序不负责</b>
</ElCheckbox> </ElCheckbox>
<ElCheckbox :label="1" :class="[unreadItemsAfterClickSubmit[1] ? 'unread' : '']"> <ElCheckbox :label="1" :class="[unreadItemsAfterClickSubmit[1] ? 'unread' : '']">
本程序需要存储您的登录凭据即Cookie来模拟您在Boss直聘上开聊Boss的行为本程序仅会把您的Cookie存储在本地并在您访问Boss直聘时将其传输到Boss直聘<b 本程序需要存储您的登录凭据即Cookie来模拟您在BOSS直聘上开聊BOSS的行为本程序仅会把您的Cookie存储在本地并在您访问BOSS直聘时将其传输到BOSS直聘<b
class="color-red" class="color-red"
>不会泄露给第三方</b >不会泄露给第三方</b
>也不会进行除自动开聊Boss以外的行为<b class="color-red">请勿向他人泄漏您的Cookie</b >也不会进行除自动开聊BOSS以外的行为<b class="color-red">请勿向他人泄漏您的Cookie</b
> >
</ElCheckbox> </ElCheckbox>
<ElCheckbox :label="2" :class="[unreadItemsAfterClickSubmit[2] ? 'unread' : '']"> <ElCheckbox :label="2" :class="[unreadItemsAfterClickSubmit[2] ? 'unread' : '']">
@@ -42,11 +42,11 @@
class="color-red" class="color-red"
>注意节制</b >注意节制</b
>建议当天开聊次数用尽后隔几天再使用建议您<b class="color-red" >建议当天开聊次数用尽后隔几天再使用建议您<b class="color-red"
>注册一个本程序专用的新的Boss直聘账号</b >注册一个本程序专用的新的BOSS直聘账号</b
>进行求职 >进行求职
</ElCheckbox> </ElCheckbox>
<ElCheckbox :label="3" :class="[unreadItemsAfterClickSubmit[3] ? 'unread' : '']"> <ElCheckbox :label="3" :class="[unreadItemsAfterClickSubmit[3] ? 'unread' : '']">
本程序原理是模拟用户在Boss直聘网页上寻找关键元素并进行点击操作Boss直聘网站经常<b>发生改版</b>且有可能<b>包含A/B实验</b>这将导致本程序相关脚本失效典型表现为本程序运行到某一步骤后<b 本程序原理是模拟用户在BOSS直聘网页上寻找关键元素并进行点击操作BOSS直聘网站经常<b>发生改版</b>且有可能<b>包含A/B实验</b>这将导致本程序相关脚本失效典型表现为本程序运行到某一步骤后<b
class="color-red" class="color-red"
>浏览器重复闪退重新启动</b >浏览器重复闪退重新启动</b
>如果您在使用过程中遇上程序未按照预期执行的情况请点击程序左下角进行反馈 >如果您在使用过程中遇上程序未按照预期执行的情况请点击程序左下角进行反馈
@@ -81,16 +81,16 @@
</ElCheckbox> </ElCheckbox>
<ElCheckbox :label="7" :class="[unreadItemsAfterClickSubmit[7] ? 'unread' : '']"> <ElCheckbox :label="7" :class="[unreadItemsAfterClickSubmit[7] ? 'unread' : '']">
本程序<b class="color-red">不对您的求职过程与结果负责</b 本程序<b class="color-red">不对您的求职过程与结果负责</b
>为您开聊的职位均在Boss直聘上发布职位信息真实性由Boss直聘负责<b >为您开聊的职位均在BOSS直聘上发布职位信息真实性由BOSS直聘负责<b
class="color-red" class="color-red"
>自行甄别为您开聊的公司认真决定是否参加面试慎重选择Offer</b >自行甄别为您开聊的公司认真决定是否参加面试慎重选择Offer</b
> >
</ElCheckbox> </ElCheckbox>
<ElCheckbox :label="8" :class="[unreadItemsAfterClickSubmit[8] ? 'unread' : '']"> <ElCheckbox :label="8" :class="[unreadItemsAfterClickSubmit[8] ? 'unread' : '']">
请在Boss直聘上自行<b class="color-red">屏蔽您不期望投递的公司</b 请在BOSS直聘上自行<b class="color-red">屏蔽您不期望投递的公司</b
>如果您不希望您当前公司其它具有招聘账号的员工看到您在Boss直聘上活跃<b >如果您不希望您当前公司其它具有招聘账号的员工看到您在BOSS直聘上活跃<b
class="color-red" class="color-red"
>在Boss直聘上屏蔽当前公司及与之关联的公司</b >在BOSS直聘上屏蔽当前公司及与之关联的公司</b
> >
</ElCheckbox> </ElCheckbox>
<ElCheckbox :label="9" :class="[unreadItemsAfterClickSubmit[9] ? 'unread' : '']"> <ElCheckbox :label="9" :class="[unreadItemsAfterClickSubmit[9] ? 'unread' : '']">
@@ -20,7 +20,7 @@
> >
<template #content> <template #content>
<div> <div>
本程序运行较长时间后Boss直聘会对账号进行风控导致本程序不能继续执行<br /> 本程序运行较长时间后BOSS直聘会对账号进行风控导致本程序不能继续执行<br />
为此加入摸鱼模式通过此配置主动减慢本程序的运行速度降低潜在的被风控监测到的概率<br /> 为此加入摸鱼模式通过此配置主动减慢本程序的运行速度降低潜在的被风控监测到的概率<br />
你可以自定义开启摸鱼模式的频率 - 默认为操作100次后暂停运行15分钟 你可以自定义开启摸鱼模式的频率 - 默认为操作100次后暂停运行15分钟
</div> </div>
@@ -110,7 +110,7 @@
<div w-full> <div w-full>
<div ref="jobSourceFormItemSectionEl" font-size-16px> <div ref="jobSourceFormItemSectionEl" font-size-16px>
<div> <div>
你想投递Boss直聘上哪些列表里的职位 你想投递BOSS直聘上哪些列表里的职位
<el-tooltip <el-tooltip
effect="light" effect="light"
placement="bottom-start" placement="bottom-start"
@@ -123,7 +123,7 @@
</template> </template>
<el-button type="text" font-size-12px <el-button type="text" font-size-12px
><span><QuestionFilled w-1em h-1em mr2px /></span ><span><QuestionFilled w-1em h-1em mr2px /></span
>下方展示的各条目与Boss直聘界面对应关系是怎样的</el-button >下方展示的各条目与BOSS直聘界面对应关系是怎样的</el-button
> >
</el-tooltip> </el-tooltip>
</div> </div>
@@ -140,7 +140,7 @@
<el-form-item prop="filter" mt18px mb0px w-full> <el-form-item prop="filter" mt18px mb0px w-full>
<div flex-1> <div flex-1>
<div font-size-16px> <div font-size-16px>
你希望Boss直聘为你筛选出什么样的职位 你希望BOSS直聘为你筛选出什么样的职位
<el-tooltip <el-tooltip
effect="light" effect="light"
placement="bottom-start" placement="bottom-start"
@@ -149,7 +149,7 @@
<template #content> <template #content>
<ul m0 line-height-1.5em w-540px pl2em> <ul m0 line-height-1.5em w-540px pl2em>
<li> <li>
这个配置决定了下面列表中会展示哪些职位查找职位时会在Boss直聘页面上自动组合下方设置的筛选条件对应UI<br /> 这个配置决定了下面列表中会展示哪些职位查找职位时会在BOSS直聘页面上自动组合下方设置的筛选条件对应UI<br />
<img h-270px src="../resources/intro-of-job-filter-auto-change.png" /> <img h-270px src="../resources/intro-of-job-filter-auto-change.png" />
</li> </li>
<li color-orange> <li color-orange>
@@ -886,7 +886,7 @@
</div> </div>
<div> <div>
<b>“职位类型正则”填写过程中请注意</b <b>“职位类型正则”填写过程中请注意</b
>,“职位类型”是由Boss直聘预定义好的一系列职位分类,因此<b>请按照这个分类来编写正则</b>。<br /> >,“职位类型”是由BOSS直聘预定义好的一系列职位分类,因此<b>请按照这个分类来编写正则</b>。<br />
这个分类可以在此找到:<br /> 这个分类可以在此找到:<br />
<img w-400px src="../resources/job-type-source-entry.png" /> <img w-400px src="../resources/job-type-source-entry.png" />
</div> </div>
@@ -1651,7 +1651,7 @@ function handleExpectJobFilterTemplateClicked(item) {
const strategyOptionWhenCurrentJobNotMatch = [ const strategyOptionWhenCurrentJobNotMatch = [
{ {
name: '在Boss直聘上标记不合适(推荐,这确保Boss直聘推荐新职位来置换不合适职位)', name: '在BOSS直聘上标记不合适(推荐,这确保BOSS直聘推荐新职位来置换不合适职位)',
value: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS value: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS
}, },
{ {
@@ -214,7 +214,7 @@ function handleViewJobSnapshotButtonClick(record: VMarkAsNotSuitLog) {
} }
const markReasonTopicMap = { const markReasonTopicMap = {
[MarkAsNotSuitReason.BOSS_INACTIVE]: 'Boss不活跃', [MarkAsNotSuitReason.BOSS_INACTIVE]: 'BOSS不活跃',
[MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON]: '手动标记不合适', [MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON]: '手动标记不合适',
[MarkAsNotSuitReason.JOB_NOT_SUIT]: '职位不合适', [MarkAsNotSuitReason.JOB_NOT_SUIT]: '职位不合适',
[MarkAsNotSuitReason.JOB_CITY_NOT_SUIT]: '工作地不合适', [MarkAsNotSuitReason.JOB_CITY_NOT_SUIT]: '工作地不合适',
@@ -233,8 +233,8 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
} }
})() })()
return [ return [
extInfo?.bossActiveTimeDesc && `Boss活跃情况:${extInfo.bossActiveTimeDesc}`, extInfo?.bossActiveTimeDesc && `BOSS活跃情况:${extInfo.bossActiveTimeDesc}`,
extInfo?.chosenReasonInUi?.text && `Boss选项内容:${extInfo.chosenReasonInUi.text}` extInfo?.chosenReasonInUi?.text && `BOSS选项内容:${extInfo.chosenReasonInUi.text}`
] ]
.filter(Boolean) .filter(Boolean)
.join('\n') .join('\n')
@@ -247,7 +247,7 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
return null return null
} }
})() })()
return [extInfo?.chosenReasonInUi?.text && `Boss选项内容:${extInfo.chosenReasonInUi.text}`] return [extInfo?.chosenReasonInUi?.text && `BOSS选项内容:${extInfo.chosenReasonInUi.text}`]
.filter(Boolean) .filter(Boolean)
.join('\n') .join('\n')
} }
@@ -260,7 +260,7 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
return null return null
} }
})() })()
return [extInfo?.chosenReasonInUi?.text && `Boss选项内容:${extInfo.chosenReasonInUi.text}`] return [extInfo?.chosenReasonInUi?.text && `BOSS选项内容:${extInfo.chosenReasonInUi.text}`]
.filter(Boolean) .filter(Boolean)
.join('\n') .join('\n')
} }
@@ -274,7 +274,7 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
})() })()
return [ return [
extInfo?.salaryDesc && `薪资:${extInfo.salaryDesc}`, extInfo?.salaryDesc && `薪资:${extInfo.salaryDesc}`,
extInfo?.chosenReasonInUi?.text && `Boss选项内容:${extInfo.chosenReasonInUi.text}` extInfo?.chosenReasonInUi?.text && `BOSS选项内容:${extInfo.chosenReasonInUi.text}`
] ]
.filter(Boolean) .filter(Boolean)
.join('\n') .join('\n')
@@ -10,11 +10,11 @@
<el-form-item> <el-form-item>
<div> <div>
<el-checkbox v-if="!expectJobTypeRegExpStr?.trim()" :model-value="false" disabled> <el-checkbox v-if="!expectJobTypeRegExpStr?.trim()" :model-value="false" disabled>
发送提醒消息前先按照自动开聊-职位类型正则校验正在与Boss沟通的岗位是否满足期望校验通过后再提醒 发送提醒消息前先按照自动开聊-职位类型正则校验正在与BOSS沟通的岗位是否满足期望校验通过后再提醒
</el-checkbox> </el-checkbox>
<template v-else> <template v-else>
<el-checkbox v-model="formContent.autoReminder.onlyRemindBossWithExpectJobType"> <el-checkbox v-model="formContent.autoReminder.onlyRemindBossWithExpectJobType">
发送提醒消息前先按照自动开聊-职位类型正则校验正在与Boss沟通的岗位是否满足期望校验通过后再提醒 发送提醒消息前先按照自动开聊-职位类型正则校验正在与BOSS沟通的岗位是否满足期望校验通过后再提醒
</el-checkbox> </el-checkbox>
<div ml1.5em color-gray> <div ml1.5em color-gray>
<div>当前职位类型正则{{ expectJobTypeRegExpStr?.trim() }}</div> <div>当前职位类型正则{{ expectJobTypeRegExpStr?.trim() }}</div>
@@ -31,7 +31,7 @@
</template> </template>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item class="mb0" label="跟进话术 - 当发现已读不回的Boss时,将要向Boss发出:"> <el-form-item class="mb0" label="跟进话术 - 当发现已读不回的BOSS时,将要向BOSS发出:">
<el-radio-group v-model="formContent.autoReminder.rechatContentSource"> <el-radio-group v-model="formContent.autoReminder.rechatContentSource">
<div> <div>
<el-tooltip <el-tooltip
@@ -142,7 +142,7 @@
:precision="1" :precision="1"
:step="0.5" :step="0.5"
@blur="handleThrottleIntervalMinutesBlur" @blur="handleThrottleIntervalMinutesBlur"
/>&nbsp;分钟内不多次跟进同一Boss />&nbsp;分钟内不多次跟进同一BOSS
</el-form-item> </el-form-item>
<el-form-item label="跟进时限(天)" prop="rechatLimitDay" mb-0> <el-form-item label="跟进时限(天)" prop="rechatLimitDay" mb-0>
<div> <div>
@@ -174,7 +174,7 @@
请向你不想继续提醒的Boss发送任意消息,发送后立即撤回的这条消息即可。 请向你不想继续提醒的Boss发送任意消息,发送后立即撤回的这条消息即可。
<br /> <br />
<br /> <br />
对于PC端Boss直聘,鼠标移动到要撤回的消息,点按鼠标右键调出菜单,再鼠标左键点击菜单中的“撤回”。如图所示: 对于PC端BOSS直聘,鼠标移动到要撤回的消息,点按鼠标右键调出菜单,再鼠标左键点击菜单中的“撤回”。如图所示:
<br /> <br />
<img block w-full src="./resources/withdraw-message-guide.png" /> <img block w-full src="./resources/withdraw-message-guide.png" />
</li> </li>
@@ -182,7 +182,7 @@
</template> </template>
<el-button type="text" font-size-12px <el-button type="text" font-size-12px
><span><QuestionFilled w-1em h-1em mr2px /></span ><span><QuestionFilled w-1em h-1em mr2px /></span
>我不想持续提醒某个Boss了,如何处理?</el-button >我不想持续提醒某个BOSS了,如何处理?</el-button
> >
</el-tooltip> </el-tooltip>
</el-form-item> </el-form-item>
@@ -12,7 +12,7 @@
> >
<template #content> <template #content>
<div w-480px> <div w-480px>
<div>扩列神器按照你所设置的求职偏好自动开聊推荐职位列表中的匹配的Boss</div> <div>扩列神器按照你所设置的求职偏好自动开聊推荐职位列表中的匹配的BOSS</div>
<br /> <br />
<div>匹配步骤</div> <div>匹配步骤</div>
<ol m0 pl2em> <ol m0 pl2em>
@@ -20,10 +20,10 @@
按照公司名称查找职位查找到目标职位后自动点击这个职位右侧将会展示职位详情 按照公司名称查找职位查找到目标职位后自动点击这个职位右侧将会展示职位详情
</li> </li>
<li> <li>
检查Boss活跃度 检查BOSS活跃度
<ul pl2em> <ul pl2em>
<li> <li>
如果Boss活跃度为本月活跃或更往前的时间则会把职位标记为不合适一段时间内你将不会在Boss上看到这个职位且将会推荐新职位置换这个职位 如果BOSS活跃度为本月活跃或更往前的时间则会把职位标记为不合适一段时间内你将不会在BOSS上看到这个职位且将会推荐新职位置换这个职位
</li> </li>
</ul> </ul>
</li> </li>
@@ -32,7 +32,7 @@
<ul pl2em> <ul pl2em>
<li>如果匹配则自动点击开聊按钮</li> <li>如果匹配则自动点击开聊按钮</li>
<li> <li>
不匹配则标记这个职位为不合适一段时间内你将不会在Boss上看到这个职位且将会推荐新职位置换这个职位 不匹配则标记这个职位为不合适一段时间内你将不会在BOSS上看到这个职位且将会推荐新职位置换这个职位
</li> </li>
</ul> </ul>
</li> </li>
@@ -62,16 +62,16 @@
<template #content> <template #content>
<div w-480px> <div w-480px>
<div> <div>
Boss不明原因已读不回简历就是投不出去<br /> BOSS不明原因已读不回简历就是投不出去<br />
已读不回自动复聊提醒一下已读不回的 Boss助力把握每次机会 已读不回自动复聊提醒一下已读不回的 BOSS助力把握每次机会
</div> </div>
<br /> <br />
<div>匹配逻辑</div> <div>匹配逻辑</div>
<div>在聊天列表中查找对你消息已读不回的Boss再发一条消息多次复聊同时</div> <div>在聊天列表中查找对你消息已读不回的BOSS再发一条消息多次复聊同时</div>
<ul m0 pl2em> <ul m0 pl2em>
<li>如果设置了跟进时限那么在这个时间之前活跃的聊天将不会被检查</li> <li>如果设置了跟进时限那么在这个时间之前活跃的聊天将不会被检查</li>
<li> <li>
如果设置了跟进间隔且再次检查时发现Boss已读不回且距离上次提醒时间间隔小于这个时间那么聊天将暂时不会跟进直到下次检查时距离上次提醒时间间隔大于这个时间 如果设置了跟进间隔且再次检查时发现BOSS已读不回且距离上次提醒时间间隔小于这个时间那么聊天将暂时不会跟进直到下次检查时距离上次提醒时间间隔大于这个时间
</li> </li>
</ul> </ul>
<br /> <br />
@@ -133,7 +133,7 @@
<RouterLink to="./StartChatRecord">开聊记录</RouterLink> <RouterLink to="./StartChatRecord">开聊记录</RouterLink>
<RouterLink to="./MarkAsNotSuitRecord">标记不合适记录</RouterLink> <RouterLink to="./MarkAsNotSuitRecord">标记不合适记录</RouterLink>
<RouterLink to="./JobLibrary">职位库</RouterLink> <RouterLink to="./JobLibrary">职位库</RouterLink>
<RouterLink to="./BossLibrary">Boss</RouterLink> <RouterLink to="./BossLibrary">BOSS</RouterLink>
<RouterLink to="./CompanyLibrary">公司库</RouterLink> <RouterLink to="./CompanyLibrary">公司库</RouterLink>
</div> </div>
<div class="pt-16px pb-16px flex-0 font-size-12px"> <div class="pt-16px pb-16px flex-0 font-size-12px">
@@ -277,6 +277,7 @@ const handleClickConfigLlm = async () => {
height: 2em; height: 2em;
box-sizing: border-box; box-sizing: border-box;
padding-left: 1.5em; padding-left: 1.5em;
font-size: 14px;
&.router-link-active { &.router-link-active {
background-color: #fff; background-color: #fff;
font-weight: 700; font-weight: 700;
+2 -2
View File
@@ -14,7 +14,7 @@ const routes: Array<RouteRecordRaw> = [
path: '/cookieAssistant', path: '/cookieAssistant',
component: () => import('@renderer/page/CookieAssistant/index.vue'), component: () => import('@renderer/page/CookieAssistant/index.vue'),
meta: { meta: {
title: 'Boss 登录助手' title: 'BOSS登录助手'
} }
}, },
{ {
@@ -110,7 +110,7 @@ const routes: Array<RouteRecordRaw> = [
path: 'BossLibrary', path: 'BossLibrary',
component: () => import('@renderer/page/MainLayout/BossLibrary.vue'), component: () => import('@renderer/page/MainLayout/BossLibrary.vue'),
meta: { meta: {
title: 'Boss库' title: 'BOSS库'
} }
}, },
{ {