// ==UserScript==
// @name Boss-自动打招呼_3
// @namespace http://tampermonkey.net/
// @version 0.4
// @description 1.boss直聘 自动打招呼 2.拉勾 自动投递简历 3.猎聘 自动打招呼
// @author imcuttle
// @license MIT
// @match https://www.zhipin.com/*
// @grant none
// ==/UserScript==
(function () {
"use strict";
// 拉勾平台列表 __NEXT_DATA__.props.pageProps.initData.content.positionResult.result
// 猎聘平台 document.querySelector('.chat-btn-box .ant-btn').click()
var retryCheck = function (
checkFun,
interval,
nextFun,
times,
delay,
startTime
) {
if (!times) times = 1;
else times += 1;
if (!delay) delay = 0;
if (!startTime) startTime = new Date().getTime();
setTimeout(function () {
if (checkFun(times)) {
if (delay) {
var detal = delay - (new Date().getTime() - startTime);
if (detal > 0) setTimeout(nextFun, detal);
else nextFun();
} else nextFun();
} else retryCheck(checkFun, interval, nextFun, times, delay, startTime);
}, interval);
};
var t;
function killTime() {
clearTimeout(t)
}
let checking = false;
var bossHandle = function (e) {
let el = document.querySelector(".tools-btn");
console.log('checking', checking)
let closeHandle = () => {
el.innerText = "自动打招呼";
el.style.background = "#67C23A";
checking = false;
killTime();
}
let openHandle = () => {
checking = true;
el.style.background = "#E6A23C";
var getLst = () => {
const lstTmp = document.querySelectorAll(".recommend-card-list .candidate-card-wrap");
const validList = Array.from(lstTmp).filter(item => {
const joinText = item.querySelector('.col-2 .row.row-flex .content')?.textContent
const baseInfo = item.querySelector('.col-2 .row.base-info.join-text-wrap')?.textContent
const workBg = item.querySelector('.col-3 .timeline-wrap')?.textContent
const tmps = baseInfo && baseInfo.match(/(\d+)岁/)
if (baseInfo && baseInfo.includes('应届生')) {
return false
}
if (!tmps || !tmps[1] || Number(tmps[1]) > 32) {
return false
}
if (!joinText || !joinText?.includes('前端')) {
return false
}
if (!workBg || !['阿里', '腾讯', '百度', 'Facebook',
'Google', 'Amazon', '亚马逊', '微软',
'唯品会', '盒马', '京东', '快手', '滴滴',
'小米', '网易', '猿辅导', '学而思', '字节',
'虾皮', 'Shopee', '360', '蓝湖', '高德',
// '',
'嘀嘀', '美团', '三快'].some(k => new RegExp(k, 'i').test(workBg))) {
return false
}
console.log({
joinText,
baseInfo,
workBg,
})
return true
})
return {
validList,
list: lstTmp
}
}
let ct = 1;
let successedCount = 0;
let current = getLst();
const delay = (ms) => new Promise(res => setTimeout(res, ms))
async function callFn() {
let dom
const goNext = async () => {
if (!checking) {
return
}
let prevLen = current.list.length
document.scrollingElement.scrollTo(0, Number.MAX_SAFE_INTEGER)
await delay(2000);
const tmp = getLst();
if (tmp.list.length <= prevLen) {
alert('到底了!')
closeHandle()
} else {
current = tmp
if (ct >= tmp.validList.length) {
await goNext()
} else {
dom = current.validList[ct-1]
}
}
}
do {
if (!checking) {
return
}
dom = current.validList[ct-1]
el.innerText = "停止打招呼(" + ct + "/" + (current.validList.length) + ")";
if (!dom) {
await goNext()
}
if (!checking) {
return
}
const hiBtn = dom.querySelector(".btn.btn-greet");
if (!hiBtn) {
ct++;
continue
}
hiBtn.click();
await delay(1000);
ct++;
} while (dom);
closeHandle();
}
callFn();
}
if (checking) {
closeHandle();
} else {
openHandle();
}
};
((_) => {
console.log('jobs tools start ============================================');
let el = document.createElement("button");
el.setAttribute(
"style",
"width:140px;height:30px;border:0;color:#fff;background-color:#67C23A;cursor:pointer;outline: none;position: fixed; top: 0; left: 0;z-index:99999;"
);
el.setAttribute(
"class",
"tools-btn"
)
el.innerText = "自动打招呼";
if (window.location.host === "www.zhipin.com") {
if (
window.location.href.startsWith(
"https://www.zhipin.com/"
)
) {
retryCheck(
(_) => {
let lst = document.querySelectorAll(".recommend-card-list > li .card-inner");
return lst && lst.length > 0;
},
100,
(_) => {
document.querySelector("body").appendChild(el);
// closeHandle()
el.addEventListener(
"click",
bossHandle,
false
);
}
);
}
}
}) ()
})();