From 21119e346bafba05b37bed6e15fe715420ad741f Mon Sep 17 00:00:00 2001 From: bossgeekgo Date: Fri, 9 Feb 2024 17:41:13 +0800 Subject: [PATCH] detect no job after last page load - restart browser after this happen --- main/index.mjs | 99 ++++++++++++++++++++++++++++---------------------- 1 file changed, 56 insertions(+), 43 deletions(-) diff --git a/main/index.mjs b/main/index.mjs index 947d801..ab24f6f 100644 --- a/main/index.mjs +++ b/main/index.mjs @@ -75,7 +75,7 @@ async function mainLoop () { ); await sleepWithRandomDelay(2000) - const { targetJobElProxy, targetJobIndex } = await new Promise(async (resolve) => { + const { targetJobElProxy, targetJobIndex } = await new Promise(async (resolve, reject) => { // job list const recommendJobListElProxy = await page.$('.job-list-container .rec-job-list') @@ -85,7 +85,9 @@ async function mainLoop () { ` ) let targetJobIndex = jobListData.findIndex(it => [...expectCompanySet].find(name => it.brandName.includes(name))) - while (targetJobIndex < 0) { + let hasReachLastPage = false + + while (targetJobIndex < 0 && !hasReachLastPage) { // fetch new const recommendJobListElBBox = await recommendJobListElProxy.boundingBox() const windowInnerHeight = await page.evaluate('window.innerHeight') @@ -101,6 +103,12 @@ async function mainLoop () { await page.mouse.wheel({deltaY: increase}); await sleep(1) } + hasReachLastPage = await page.evaluate(` + !(document.querySelector('.job-recommend-main')?.__vue__?.hasMore) + `) + if (hasReachLastPage) { + console.log(`Arrive the terminal of the job list.`) + } await sleep(3000) jobListData = await page.evaluate( @@ -111,6 +119,12 @@ async function mainLoop () { targetJobIndex = targetJobIndex = jobListData.findIndex(it => [...expectCompanySet].find(name => it.brandName.includes(name))) } + if (targetJobIndex < 0 && hasReachLastPage) { + // has reach last page and not find target job + reject(new Error('CANNOT_FIND_EXCEPT_JOB')) + return + } + const recommendJobItemList = await recommendJobListElProxy.$$('ul.rec-job-list > li') resolve( { @@ -144,53 +158,52 @@ async function mainLoop () { } ); await sleepWithRandomDelay(2000) - } + const jobData = await page.evaluate('document.querySelector(".job-detail-box").__vue__.data') + + const startChatButtonInnerHTML = await page.evaluate('document.querySelector(".job-detail-box .op-btn.op-btn-chat")?.innerHTML.trim()') + if (startChatButtonInnerHTML === '立即沟通') { + const startChatButtonProxy = await page.$('.job-detail-box .op-btn.op-btn-chat') + await startChatButtonProxy.click() - const jobData = await page.evaluate('document.querySelector(".job-detail-box").__vue__.data') - - const startChatButtonInnerHTML = await page.evaluate('document.querySelector(".job-detail-box .op-btn.op-btn-chat")?.innerHTML.trim()') - if (startChatButtonInnerHTML === '立即沟通') { - const startChatButtonProxy = await page.$('.job-detail-box .op-btn.op-btn-chat') - await startChatButtonProxy.click() - - const addFriendResponse = await page.waitForResponse( - response => { - if ( - response.url().startsWith('https://www.zhipin.com/wapi/zpgeek/friend/add.json') && response.url().includes(`jobId=${jobData.jobInfo.encryptId}`) - ) { - return true + const addFriendResponse = await page.waitForResponse( + response => { + if ( + response.url().startsWith('https://www.zhipin.com/wapi/zpgeek/friend/add.json') && response.url().includes(`jobId=${jobData.jobInfo.encryptId}`) + ) { + return true + } + return false } - return false - } - ); - try { - const res = await addFriendResponse.json() - - if (res.code !== 0) { - console.err(res) - break - } - } catch(err) { - // console.warn(err) - } finally { - //#region TODO: temporary work with legacy logic - await sleep(500) - const continueChatButtonProxy = await page.$('.greet-boss-dialog .greet-boss-footer .sure-btn') + ); + try { + const res = await addFriendResponse.json() + + if (res.code !== 0) { + console.err(res) + break + } + } catch(err) { + // console.warn(err) + } finally { + //#region TODO: temporary work with legacy logic + await sleep(500) + const continueChatButtonProxy = await page.$('.greet-boss-dialog .greet-boss-footer .sure-btn') - await continueChatButtonProxy.click() - //#endregion - await sleepWithRandomDelay(2500) - if (page.url().startsWith('https://www.zhipin.com/web/geek/chat')) { - await sleepWithRandomDelay(3000) + await continueChatButtonProxy.click() + //#endregion + await sleepWithRandomDelay(2500) + if (page.url().startsWith('https://www.zhipin.com/web/geek/chat')) { + await sleepWithRandomDelay(3000) - await Promise.all([ - page.waitForNavigation(), - page.goBack(), - ]) - await sleepWithRandomDelay(1000) + await Promise.all([ + page.waitForNavigation(), + page.goBack(), + ]) + await sleepWithRandomDelay(1000) + } } + } else { } - } else { } }