@joohw/boss-cli 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +25 -25
- package/README.md +34 -19
- package/dist/browser/agent_operating_indicator.d.ts +9 -0
- package/dist/browser/agent_operating_indicator.d.ts.map +1 -0
- package/dist/browser/agent_operating_indicator.js +92 -0
- package/dist/browser/agent_operating_indicator.js.map +1 -0
- package/dist/browser/c_resume_capture.d.ts +11 -0
- package/dist/browser/c_resume_capture.d.ts.map +1 -0
- package/dist/browser/c_resume_capture.js +76 -0
- package/dist/browser/c_resume_capture.js.map +1 -0
- package/dist/browser/chat.d.ts +3 -3
- package/dist/browser/chat.d.ts.map +1 -1
- package/dist/browser/chat.js +43 -5
- package/dist/browser/chat.js.map +1 -1
- package/dist/browser/human_delay.d.ts +5 -0
- package/dist/browser/human_delay.d.ts.map +1 -1
- package/dist/browser/human_delay.js +5 -0
- package/dist/browser/human_delay.js.map +1 -1
- package/dist/browser/index.d.ts +2 -2
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +2 -2
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/viewport_temp.d.ts +15 -0
- package/dist/browser/viewport_temp.d.ts.map +1 -0
- package/dist/browser/viewport_temp.js +78 -0
- package/dist/browser/viewport_temp.js.map +1 -0
- package/dist/cli/banner.d.ts +1 -1
- package/dist/cli/banner.d.ts.map +1 -1
- package/dist/cli/banner.js +8 -39
- package/dist/cli/banner.js.map +1 -1
- package/dist/cli/cliRouter.d.ts.map +1 -1
- package/dist/cli/cliRouter.js +40 -11
- package/dist/cli/cliRouter.js.map +1 -1
- package/dist/common/auth.d.ts +38 -0
- package/dist/common/auth.d.ts.map +1 -0
- package/dist/common/auth.js +150 -0
- package/dist/common/auth.js.map +1 -0
- package/dist/common/boss_paywall_popup.d.ts +17 -0
- package/dist/common/boss_paywall_popup.d.ts.map +1 -0
- package/dist/common/boss_paywall_popup.js +132 -0
- package/dist/common/boss_paywall_popup.js.map +1 -0
- package/dist/common/boss_session_page.d.ts +11 -0
- package/dist/common/boss_session_page.d.ts.map +1 -0
- package/dist/common/boss_session_page.js +155 -0
- package/dist/common/boss_session_page.js.map +1 -0
- package/dist/common/boss_sidebar_nav.d.ts +6 -0
- package/dist/common/boss_sidebar_nav.d.ts.map +1 -0
- package/dist/common/boss_sidebar_nav.js +37 -0
- package/dist/common/boss_sidebar_nav.js.map +1 -0
- package/dist/common/c_resume_capture.d.ts +18 -0
- package/dist/common/c_resume_capture.d.ts.map +1 -0
- package/dist/common/c_resume_capture.js +125 -0
- package/dist/common/c_resume_capture.js.map +1 -0
- package/dist/toolset/action.d.ts +1 -1
- package/dist/toolset/action.d.ts.map +1 -1
- package/dist/toolset/action.js +193 -152
- package/dist/toolset/action.js.map +1 -1
- package/dist/toolset/c_resume_capture.d.ts +11 -0
- package/dist/toolset/c_resume_capture.d.ts.map +1 -0
- package/dist/toolset/c_resume_capture.js +76 -0
- package/dist/toolset/c_resume_capture.js.map +1 -0
- package/dist/toolset/chat.d.ts.map +1 -1
- package/dist/toolset/chat.js +6 -4
- package/dist/toolset/chat.js.map +1 -1
- package/dist/toolset/deep-search.d.ts +31 -0
- package/dist/toolset/deep-search.d.ts.map +1 -0
- package/dist/toolset/deep-search.js +1057 -0
- package/dist/toolset/deep-search.js.map +1 -0
- package/dist/toolset/greet.d.ts.map +1 -1
- package/dist/toolset/greet.js +32 -10
- package/dist/toolset/greet.js.map +1 -1
- package/dist/toolset/index.d.ts +13 -1
- package/dist/toolset/index.d.ts.map +1 -1
- package/dist/toolset/index.js +13 -6
- package/dist/toolset/index.js.map +1 -1
- package/dist/toolset/jd.d.ts.map +1 -1
- package/dist/toolset/jd.js +6 -35
- package/dist/toolset/jd.js.map +1 -1
- package/dist/toolset/list.d.ts +6 -0
- package/dist/toolset/list.d.ts.map +1 -1
- package/dist/toolset/list.js +38 -60
- package/dist/toolset/list.js.map +1 -1
- package/dist/toolset/login.d.ts.map +1 -1
- package/dist/toolset/login.js +2 -5
- package/dist/toolset/login.js.map +1 -1
- package/dist/toolset/preview.d.ts +6 -0
- package/dist/toolset/preview.d.ts.map +1 -0
- package/dist/toolset/preview.js +103 -0
- package/dist/toolset/preview.js.map +1 -0
- package/dist/toolset/recommend.d.ts +13 -0
- package/dist/toolset/recommend.d.ts.map +1 -1
- package/dist/toolset/recommend.js +104 -46
- package/dist/toolset/recommend.js.map +1 -1
- package/dist/toolset/search.d.ts +23 -1
- package/dist/toolset/search.d.ts.map +1 -1
- package/dist/toolset/search.js +556 -48
- package/dist/toolset/search.js.map +1 -1
- package/dist/toolset/send.d.ts.map +1 -1
- package/dist/toolset/send.js +4 -2
- package/dist/toolset/send.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 在线简历预览:须在「推荐」页或「深度搜索 aiform」页且列表已加载;不自动跳转,否则报错。
|
|
3
|
+
*/
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { ONLINE_RESUME_IFRAME_APPEAR_MS, ONLINE_RESUME_IFRAME_SETTLE_MS, ONLINE_RESUME_IFRAME_WAIT_MAX_MS, sleepRandom, snapshotBossPageViewport, } from '../browser/index.js';
|
|
6
|
+
import { createWaitManualLoginRequiredText } from '../common/auth.js';
|
|
7
|
+
import { withBossSessionPage } from '../common/boss_session_page.js';
|
|
8
|
+
import { closeBossPaywallPopupIfPresent, describeBossPaywallPopupIfPresent, waitForCResumeIframeOrPaywall, } from '../common/boss_paywall_popup.js';
|
|
9
|
+
import { captureCResumeIframeToFile, closeCResumePanel, safeResumeScreenshotFileBase, } from '../common/c_resume_capture.js';
|
|
10
|
+
import { ensureAppDataLayout, RESUME_SCREENSHOTS_DIR } from '../config.js';
|
|
11
|
+
import { isResumeOcrEnabled, ocrResumePngToTextFile } from '../ocr/index.js';
|
|
12
|
+
import { ensureInDeepSearchPage, isBossChatAiFormUrl, openDeepSearchResumePreview, readAiFormSelectedJobLabel, selectAiFormJob, } from './deep-search.js';
|
|
13
|
+
import { assertRecommendPageReadyForPreview, isBossChatRecommendUrl, openRecommendResumePreview, selectRecommendJob, } from './recommend.js';
|
|
14
|
+
export async function runPreview(options) {
|
|
15
|
+
const target = options.candidateTarget.trim();
|
|
16
|
+
if (!target) {
|
|
17
|
+
throw new Error('请提供候选人姓名或列表序号。');
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
return await withBossSessionPage(async (page) => {
|
|
21
|
+
const kw = (options.jobKeyword ?? '').trim();
|
|
22
|
+
const url = page.url();
|
|
23
|
+
let jobLine;
|
|
24
|
+
let savedOriginal;
|
|
25
|
+
let opened;
|
|
26
|
+
if (isBossChatAiFormUrl(url)) {
|
|
27
|
+
await ensureInDeepSearchPage(page);
|
|
28
|
+
if (kw) {
|
|
29
|
+
const label = await selectAiFormJob(page, kw);
|
|
30
|
+
await ensureInDeepSearchPage(page);
|
|
31
|
+
jobLine = `当前岗位:${label}`;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const label = await readAiFormSelectedJobLabel(page);
|
|
35
|
+
jobLine = `当前岗位:${label}`;
|
|
36
|
+
}
|
|
37
|
+
savedOriginal = await snapshotBossPageViewport(page);
|
|
38
|
+
opened = await openDeepSearchResumePreview(page, target);
|
|
39
|
+
}
|
|
40
|
+
else if (isBossChatRecommendUrl(url)) {
|
|
41
|
+
const frame = await assertRecommendPageReadyForPreview(page);
|
|
42
|
+
const selectedJob = await selectRecommendJob(frame, kw);
|
|
43
|
+
jobLine = selectedJob ? `当前岗位:${selectedJob}` : '当前岗位:默认';
|
|
44
|
+
savedOriginal = await snapshotBossPageViewport(page);
|
|
45
|
+
opened = await openRecommendResumePreview(frame, target);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
throw new Error('当前不在推荐列表页或搜索结果页,无法预览候选人。');
|
|
49
|
+
}
|
|
50
|
+
if (!opened) {
|
|
51
|
+
throw new Error('未在列表中找到该候选人,或点击未能打开简历预览。');
|
|
52
|
+
}
|
|
53
|
+
await sleepRandom(ONLINE_RESUME_IFRAME_APPEAR_MS.min, ONLINE_RESUME_IFRAME_APPEAR_MS.max);
|
|
54
|
+
const outcome = await waitForCResumeIframeOrPaywall(page, ONLINE_RESUME_IFRAME_WAIT_MAX_MS);
|
|
55
|
+
if (outcome !== 'iframe') {
|
|
56
|
+
const paywall = await describeBossPaywallPopupIfPresent(page);
|
|
57
|
+
await closeBossPaywallPopupIfPresent(page);
|
|
58
|
+
if (paywall) {
|
|
59
|
+
throw new Error(paywall);
|
|
60
|
+
}
|
|
61
|
+
throw new Error('点击后未出现在线简历 iframe(c-resume)。');
|
|
62
|
+
}
|
|
63
|
+
await sleepRandom(ONLINE_RESUME_IFRAME_SETTLE_MS.min, ONLINE_RESUME_IFRAME_SETTLE_MS.max);
|
|
64
|
+
ensureAppDataLayout();
|
|
65
|
+
const fileName = `preview-${safeResumeScreenshotFileBase(target)}-${Date.now()}.png`;
|
|
66
|
+
const absPath = join(RESUME_SCREENSHOTS_DIR, fileName);
|
|
67
|
+
const ok = await captureCResumeIframeToFile(page, savedOriginal, absPath);
|
|
68
|
+
if (!ok) {
|
|
69
|
+
await closeCResumePanel(page);
|
|
70
|
+
throw new Error('在线简历 iframe 截图失败。');
|
|
71
|
+
}
|
|
72
|
+
const disclaimer = '说明:平台对在线简历的每日可查看次数有限,请按需使用、谨慎查看。';
|
|
73
|
+
if (!isResumeOcrEnabled()) {
|
|
74
|
+
return [jobLine, `简历预览截图:${absPath}`, '', disclaimer].join('\n');
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const ocr = await ocrResumePngToTextFile(absPath);
|
|
78
|
+
return [
|
|
79
|
+
jobLine,
|
|
80
|
+
`简历预览截图:${absPath}`,
|
|
81
|
+
'',
|
|
82
|
+
'在线简历 OCR 正文:',
|
|
83
|
+
'',
|
|
84
|
+
ocr.text,
|
|
85
|
+
'',
|
|
86
|
+
disclaimer,
|
|
87
|
+
].join('\n');
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
91
|
+
throw new Error(`简历预览截图已保存,但 OCR 失败:${msg}`);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
97
|
+
if (e instanceof Error && e.message.includes('浏览器会话尚未初始化')) {
|
|
98
|
+
throw new Error(createWaitManualLoginRequiredText('简历预览截图'));
|
|
99
|
+
}
|
|
100
|
+
throw new Error(`简历预览失败:${message}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/toolset/preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,13 +10,26 @@ export type RecommendCandidate = {
|
|
|
10
10
|
highlights: string[];
|
|
11
11
|
canGreet: boolean;
|
|
12
12
|
hasHistoryChat: boolean;
|
|
13
|
+
/** 卡片为灰色「已看过」样式(如 `.candidate-card-wrap.has-viewed` / `.card-inner.has-viewed`) */
|
|
14
|
+
hasViewed: boolean;
|
|
13
15
|
};
|
|
16
|
+
export declare function isBossChatRecommendUrl(url: string): boolean;
|
|
17
|
+
export declare function selectRecommendJob(frame: Frame, keyword: string): Promise<string>;
|
|
14
18
|
export declare function ensureInRecommendPage(page: Page): Promise<Frame>;
|
|
19
|
+
/**
|
|
20
|
+
* 供 `preview` 使用:不导航;若当前主页面不在推荐页或未就绪推荐 iframe,直接抛错。
|
|
21
|
+
*/
|
|
22
|
+
export declare function assertRecommendPageReadyForPreview(page: Page): Promise<Frame>;
|
|
15
23
|
export declare function readRecommendList(frame: Frame): Promise<RecommendCandidate[]>;
|
|
16
24
|
export declare function renderRecommendList(candidates: RecommendCandidate[]): string;
|
|
17
25
|
export declare function clickGreet(frame: Frame, target: string): Promise<{
|
|
18
26
|
message: string;
|
|
19
27
|
}>;
|
|
20
28
|
export declare function markGreetProduced(before: RecommendCandidate[], after: RecommendCandidate[]): void;
|
|
29
|
+
/**
|
|
30
|
+
* 在推荐 iframe 内根据姓名或序号打开在线简历预览:点击候选人卡片主体 `.card-inner`(与侧栏「打招呼」分离)。
|
|
31
|
+
* 父页随后出现 `c-resume` iframe(如 `source=recommend`)。旧版仅有「在线简历」链接时仍尝试点击链接。
|
|
32
|
+
*/
|
|
33
|
+
export declare function openRecommendResumePreview(frame: Frame, target: string): Promise<boolean>;
|
|
21
34
|
export declare function runRecommend(jobKeyword?: string): Promise<string>;
|
|
22
35
|
//# sourceMappingURL=recommend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/toolset/recommend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/toolset/recommend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AASlD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,mFAAmF;IACnF,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAWF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAW3D;AAyCD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDvF;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAWtE;AAED;;GAEG;AACH,wBAAsB,kCAAkC,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAOnF;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAmEnF;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAkD5E;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA0E9B;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,kBAAkB,EAAE,EAC5B,KAAK,EAAE,kBAAkB,EAAE,GAC1B,IAAI,CAON;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqD/F;AAED,wBAAsB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBvE"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sleepRandom } from '../browser/index.js';
|
|
2
|
+
import { createWaitManualLoginRequiredText } from '../common/auth.js';
|
|
3
|
+
import { withBossSessionPage } from '../common/boss_session_page.js';
|
|
4
|
+
import { clickBossSidebarMenuToPath } from '../common/boss_sidebar_nav.js';
|
|
2
5
|
const BOSS_CHAT_RECOMMEND_URL = 'https://www.zhipin.com/web/chat/recommend';
|
|
3
6
|
const RECOMMEND_SETTLE_MS = { min: 1400, max: 2400 };
|
|
4
7
|
/** 会话内记录:通过 greet 新出现的推荐卡片(以 geekId 识别) */
|
|
5
8
|
const sessionGreetProducedGeekIds = new Set();
|
|
6
|
-
|
|
9
|
+
/**
|
|
10
|
+
* 推荐列表里「一张候选人卡片」的根节点(新版 `.candidate-card-wrap` 与旧版 `.card-item` / `.geek-card` 并存)。
|
|
11
|
+
* 在线简历预览:点击卡片主体 `.card-inner`,而非「在线简历」链接或「打招呼」。
|
|
12
|
+
*/
|
|
13
|
+
const RECOMMEND_CARD_ROOT_SELECTOR = '.candidate-card-wrap, .card-list .card-item, .geek-list .geek-card';
|
|
14
|
+
export function isBossChatRecommendUrl(url) {
|
|
7
15
|
try {
|
|
8
16
|
const u = new URL(url);
|
|
9
17
|
if (!u.hostname.includes('zhipin.com')) {
|
|
@@ -16,38 +24,6 @@ function isBossChatRecommendUrl(url) {
|
|
|
16
24
|
return false;
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
|
-
async function clickSidebarMenuToPath(page, menuLabel, targetPath) {
|
|
20
|
-
const labelLiteral = JSON.stringify(menuLabel);
|
|
21
|
-
const pathLiteral = JSON.stringify(targetPath);
|
|
22
|
-
const clicked = (await page.evaluate(`(() => {
|
|
23
|
-
const label = ${labelLiteral};
|
|
24
|
-
const path = ${pathLiteral};
|
|
25
|
-
const norm = (v) => (v ?? "").replace(/\\s+/g, "");
|
|
26
|
-
const links = Array.from(document.querySelectorAll(".menu-list a"));
|
|
27
|
-
const target = links.find((a) => {
|
|
28
|
-
const href = a.getAttribute("href") ?? "";
|
|
29
|
-
if (href.includes(path)) return true;
|
|
30
|
-
const text = norm(a.querySelector(".menu-item-content span")?.textContent ?? a.textContent);
|
|
31
|
-
return text.includes(label);
|
|
32
|
-
});
|
|
33
|
-
if (!(target instanceof HTMLElement)) return false;
|
|
34
|
-
target.scrollIntoView({ block: "center", inline: "nearest" });
|
|
35
|
-
target.click();
|
|
36
|
-
return true;
|
|
37
|
-
})()`));
|
|
38
|
-
if (!clicked) {
|
|
39
|
-
throw new Error(`未找到侧边栏菜单“${menuLabel}”,无法跳转到 ${targetPath}。`);
|
|
40
|
-
}
|
|
41
|
-
await page.waitForFunction(`(() => {
|
|
42
|
-
const path = ${pathLiteral};
|
|
43
|
-
try {
|
|
44
|
-
const p = window.location.pathname.replace(/\\/+$/g, "") || "/";
|
|
45
|
-
return p === path;
|
|
46
|
-
} catch {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
})()`, { timeout: 15_000 });
|
|
50
|
-
}
|
|
51
27
|
async function getRecommendFrame(page) {
|
|
52
28
|
await page.waitForSelector('iframe[name="recommendFrame"]', { timeout: 15_000 });
|
|
53
29
|
const frameByName = page.frames().find((f) => f.name() === 'recommendFrame') ?? null;
|
|
@@ -69,6 +45,8 @@ async function getRecommendFrame(page) {
|
|
|
69
45
|
}
|
|
70
46
|
async function ensureRecommendFrameReady(frame) {
|
|
71
47
|
await frame.waitForFunction(`(() => {
|
|
48
|
+
const sel = ${JSON.stringify(RECOMMEND_CARD_ROOT_SELECTOR)};
|
|
49
|
+
if (document.querySelector(sel)) return true;
|
|
72
50
|
const root = document.querySelector(".card-list, .geek-list-wrap .geek-list");
|
|
73
51
|
return !!root;
|
|
74
52
|
})()`, { timeout: 15_000 });
|
|
@@ -79,7 +57,7 @@ async function readCurrentRecommendJobLabel(frame) {
|
|
|
79
57
|
return norm(document.querySelector(".job-selecter-wrap .ui-dropmenu-label")?.textContent);
|
|
80
58
|
})()`));
|
|
81
59
|
}
|
|
82
|
-
async function selectRecommendJob(frame, keyword) {
|
|
60
|
+
export async function selectRecommendJob(frame, keyword) {
|
|
83
61
|
const kw = keyword.trim();
|
|
84
62
|
if (!kw) {
|
|
85
63
|
return readCurrentRecommendJobLabel(frame);
|
|
@@ -135,7 +113,7 @@ async function selectRecommendJob(frame, keyword) {
|
|
|
135
113
|
}
|
|
136
114
|
export async function ensureInRecommendPage(page) {
|
|
137
115
|
if (!isBossChatRecommendUrl(page.url())) {
|
|
138
|
-
await
|
|
116
|
+
await clickBossSidebarMenuToPath(page, '推荐', '/web/chat/recommend');
|
|
139
117
|
await sleepRandom(RECOMMEND_SETTLE_MS.min, RECOMMEND_SETTLE_MS.max);
|
|
140
118
|
}
|
|
141
119
|
if (!isBossChatRecommendUrl(page.url())) {
|
|
@@ -145,14 +123,31 @@ export async function ensureInRecommendPage(page) {
|
|
|
145
123
|
await ensureRecommendFrameReady(frame);
|
|
146
124
|
return frame;
|
|
147
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* 供 `preview` 使用:不导航;若当前主页面不在推荐页或未就绪推荐 iframe,直接抛错。
|
|
128
|
+
*/
|
|
129
|
+
export async function assertRecommendPageReadyForPreview(page) {
|
|
130
|
+
if (!isBossChatRecommendUrl(page.url())) {
|
|
131
|
+
throw new Error('当前不在推荐列表页或搜索结果页,无法预览候选人。');
|
|
132
|
+
}
|
|
133
|
+
const frame = await getRecommendFrame(page);
|
|
134
|
+
await ensureRecommendFrameReady(frame);
|
|
135
|
+
return frame;
|
|
136
|
+
}
|
|
148
137
|
export async function readRecommendList(frame) {
|
|
149
138
|
return (await frame.evaluate(`(() => {
|
|
150
139
|
const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
);
|
|
140
|
+
const cardSel = ${JSON.stringify(RECOMMEND_CARD_ROOT_SELECTOR)};
|
|
141
|
+
const cards = Array.from(document.querySelectorAll(cardSel));
|
|
154
142
|
return cards.map((item) => {
|
|
155
143
|
const inner = item.querySelector(".card-inner") || item;
|
|
144
|
+
const wrap = item.matches(".candidate-card-wrap")
|
|
145
|
+
? item
|
|
146
|
+
: item.querySelector(".candidate-card-wrap");
|
|
147
|
+
const hasViewed = Boolean(
|
|
148
|
+
(wrap && wrap.classList.contains("has-viewed")) ||
|
|
149
|
+
(inner && inner.classList.contains("has-viewed")),
|
|
150
|
+
);
|
|
156
151
|
const geekId =
|
|
157
152
|
inner?.getAttribute("data-geekid") ??
|
|
158
153
|
inner?.getAttribute("data-geek") ??
|
|
@@ -170,9 +165,13 @@ export async function readRecommendList(frame) {
|
|
|
170
165
|
norm(item.querySelector(".expect-wrap .join-text-wrap")?.textContent);
|
|
171
166
|
const experience = norm(item.querySelector(".experience-wrap .join-text-wrap")?.textContent);
|
|
172
167
|
const advantage = norm(item.querySelector(".geek-desc .content")?.textContent);
|
|
173
|
-
const
|
|
168
|
+
const highlightLabels = [
|
|
169
|
+
...Array.from(item.querySelectorAll(".operate .labels .label")),
|
|
170
|
+
...Array.from(item.querySelectorAll(".tags-wrap .tag-item")),
|
|
171
|
+
]
|
|
174
172
|
.map((el) => norm(el.textContent))
|
|
175
173
|
.filter(Boolean);
|
|
174
|
+
const highlights = [...new Set(highlightLabels)];
|
|
176
175
|
const greetBtn = item.querySelector(".button-chat-wrap .btn.btn-greet");
|
|
177
176
|
const btnCls = greetBtn?.className ?? "";
|
|
178
177
|
const disabled =
|
|
@@ -198,6 +197,7 @@ export async function readRecommendList(frame) {
|
|
|
198
197
|
highlights,
|
|
199
198
|
canGreet: !disabled,
|
|
200
199
|
hasHistoryChat,
|
|
200
|
+
hasViewed,
|
|
201
201
|
};
|
|
202
202
|
}).filter((x) => x.name);
|
|
203
203
|
})()`));
|
|
@@ -231,12 +231,13 @@ export function renderRecommendList(candidates) {
|
|
|
231
231
|
m.baseInfo ? `信息:${m.baseInfo}` : '',
|
|
232
232
|
m.expect ? `期望:${m.expect}` : '',
|
|
233
233
|
m.experience ? `经历:${m.experience}` : '',
|
|
234
|
-
m.hasHistoryChat ? '
|
|
234
|
+
m.hasHistoryChat ? '同事沟通过' : '',
|
|
235
235
|
m.canGreet ? '可打招呼' : '已打招呼',
|
|
236
236
|
]
|
|
237
237
|
.filter(Boolean)
|
|
238
238
|
.join('|');
|
|
239
|
-
|
|
239
|
+
const nameWithViewed = m.hasViewed ? `${m.name} | 看过` : m.name;
|
|
240
|
+
lines.push(` - ${idx + 1}. ${nameWithViewed}|${fields}`);
|
|
240
241
|
lines.push(` 优势: ${advantageText}`);
|
|
241
242
|
});
|
|
242
243
|
return lines;
|
|
@@ -254,9 +255,8 @@ export async function clickGreet(frame, target) {
|
|
|
254
255
|
const result = (await frame.evaluate(`(() => {
|
|
255
256
|
const raw = ${targetLiteral};
|
|
256
257
|
const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
|
|
257
|
-
const
|
|
258
|
-
|
|
259
|
-
);
|
|
258
|
+
const cardSel = ${JSON.stringify(RECOMMEND_CARD_ROOT_SELECTOR)};
|
|
259
|
+
const cards = Array.from(document.querySelectorAll(cardSel));
|
|
260
260
|
if (cards.length === 0) {
|
|
261
261
|
return { kind: "empty" };
|
|
262
262
|
}
|
|
@@ -325,9 +325,67 @@ export function markGreetProduced(before, after) {
|
|
|
325
325
|
}
|
|
326
326
|
});
|
|
327
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* 在推荐 iframe 内根据姓名或序号打开在线简历预览:点击候选人卡片主体 `.card-inner`(与侧栏「打招呼」分离)。
|
|
330
|
+
* 父页随后出现 `c-resume` iframe(如 `source=recommend`)。旧版仅有「在线简历」链接时仍尝试点击链接。
|
|
331
|
+
*/
|
|
332
|
+
export async function openRecommendResumePreview(frame, target) {
|
|
333
|
+
const raw = target.trim();
|
|
334
|
+
const targetLiteral = JSON.stringify(raw);
|
|
335
|
+
return (await frame.evaluate(`(() => {
|
|
336
|
+
const raw = ${targetLiteral};
|
|
337
|
+
const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
|
|
338
|
+
const cardSel = ${JSON.stringify(RECOMMEND_CARD_ROOT_SELECTOR)};
|
|
339
|
+
const cards = Array.from(document.querySelectorAll(cardSel));
|
|
340
|
+
if (cards.length === 0) return false;
|
|
341
|
+
const idxNum = Number.parseInt(raw, 10);
|
|
342
|
+
let targetCard = null;
|
|
343
|
+
if (Number.isFinite(idxNum) && idxNum >= 1 && idxNum <= cards.length) {
|
|
344
|
+
targetCard = cards[idxNum - 1];
|
|
345
|
+
} else {
|
|
346
|
+
targetCard = cards.find((item) => {
|
|
347
|
+
const name =
|
|
348
|
+
norm(item.querySelector(".name-wrap .name")?.textContent) ||
|
|
349
|
+
norm(item.querySelector(".name")?.textContent);
|
|
350
|
+
return name === raw || name.includes(raw);
|
|
351
|
+
}) ?? null;
|
|
352
|
+
}
|
|
353
|
+
if (!targetCard) return false;
|
|
354
|
+
|
|
355
|
+
function tryOpen(el) {
|
|
356
|
+
if (!(el instanceof HTMLElement)) return false;
|
|
357
|
+
if (el.classList.contains("disabled")) return false;
|
|
358
|
+
const st = window.getComputedStyle(el);
|
|
359
|
+
if (st.pointerEvents === "none" || Number(st.opacity) < 0.3) return false;
|
|
360
|
+
el.scrollIntoView({ block: "center", inline: "nearest" });
|
|
361
|
+
el.click();
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
const inner = targetCard.querySelector(".card-inner");
|
|
366
|
+
if (inner instanceof HTMLElement) {
|
|
367
|
+
inner.scrollIntoView({ block: "center", inline: "nearest" });
|
|
368
|
+
inner.click();
|
|
369
|
+
return true;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
const resumeOnline = targetCard.querySelector("a.resume-btn-online");
|
|
373
|
+
if (tryOpen(resumeOnline)) return true;
|
|
374
|
+
const hrefResume = targetCard.querySelector('a[href*="c-resume"], a[href*="frame/c-resume"]');
|
|
375
|
+
if (tryOpen(hrefResume)) return true;
|
|
376
|
+
|
|
377
|
+
const links = Array.from(targetCard.querySelectorAll("a, button, .btn")).filter((node) => {
|
|
378
|
+
const t = norm(node.textContent);
|
|
379
|
+
return /在线简历|查看简历|简历预览|预览/.test(t);
|
|
380
|
+
});
|
|
381
|
+
if (links.length > 0 && tryOpen(links[0])) return true;
|
|
382
|
+
|
|
383
|
+
return false;
|
|
384
|
+
})()`));
|
|
385
|
+
}
|
|
328
386
|
export async function runRecommend(jobKeyword) {
|
|
329
387
|
try {
|
|
330
|
-
return await
|
|
388
|
+
return await withBossSessionPage(async (page) => {
|
|
331
389
|
const frame = await ensureInRecommendPage(page);
|
|
332
390
|
const selectedJob = await selectRecommendJob(frame, (jobKeyword ?? '').trim());
|
|
333
391
|
const candidates = await readRecommendList(frame);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../src/toolset/recommend.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../src/toolset/recommend.ts"],"names":[],"mappings":"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"}
|
package/dist/toolset/search.d.ts
CHANGED
|
@@ -1,2 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Page } from 'puppeteer-core';
|
|
2
|
+
export type DeepSearchGeekItem = {
|
|
3
|
+
name: string;
|
|
4
|
+
meta: string;
|
|
5
|
+
work: string;
|
|
6
|
+
edu: string;
|
|
7
|
+
reason: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function isBossChatAiFormUrl(url: string): boolean;
|
|
10
|
+
export declare function ensureInDeepSearchPage(page: Page): Promise<void>;
|
|
11
|
+
export declare function readDeepSearchGeekList(page: Page): Promise<DeepSearchGeekItem[]>;
|
|
12
|
+
export declare function renderGeekListSection(title: string, items: DeepSearchGeekItem[]): string;
|
|
13
|
+
export declare function clickGreetDeepSearch(page: Page, target: string): Promise<{
|
|
14
|
+
message: string;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function runBossSearchSet(opts: {
|
|
17
|
+
jobKeyword?: string;
|
|
18
|
+
coreRequirements?: string[];
|
|
19
|
+
bonusRequirements?: string[];
|
|
20
|
+
}): Promise<string>;
|
|
21
|
+
export declare function runBossSearch(opts?: {
|
|
22
|
+
jobKeyword?: string;
|
|
23
|
+
}): Promise<string>;
|
|
2
24
|
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/toolset/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/toolset/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAkB3C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWxD;AAkBD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtE;AAkYD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA4BtF;AAsBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAoBxF;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAuFnG;AAgED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAgDlB;AAED,wBAAsB,aAAa,CAAC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCvF"}
|