From fed1d6ee98b07f77980b3a8776b9e60a7c3f8ff2 Mon Sep 17 00:00:00 2001 From: geekgeekrun Date: Fri, 4 Oct 2024 16:07:18 +0800 Subject: [PATCH] =?UTF-8?q?WIP:=20finish=20the=20filter=20logic=20of=20'?= =?UTF-8?q?=E8=96=AA=E8=B5=84=E5=BE=85=E9=81=87',=20'=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E7=BB=8F=E9=AA=8C',=20'=E5=AD=A6=E5=8E=86=E8=A6=81=E6=B1=82',?= =?UTF-8?q?=20'=E5=85=AC=E5=8F=B8=E8=A7=84=E6=A8=A1'=20TODO:=20the=20filte?= =?UTF-8?q?r=20logic=20of=20'=E5=85=AC=E5=8F=B8=E8=A1=8C=E4=B8=9A'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../geek-auto-start-chat-with-boss/index.mjs | 72 ++++++++++++++++--- 1 file changed, 64 insertions(+), 8 deletions(-) diff --git a/packages/geek-auto-start-chat-with-boss/index.mjs b/packages/geek-auto-start-chat-with-boss/index.mjs index d821982..effcf0d 100644 --- a/packages/geek-auto-start-chat-with-boss/index.mjs +++ b/packages/geek-auto-start-chat-with-boss/index.mjs @@ -13,6 +13,14 @@ import { setDomainLocalStorage } from '@geekgeekrun/utils/puppeteer/local-storag import { readConfigFile, writeStorageFile, ensureConfigFileExist, readStorageFile, ensureStorageFileExist } from './runtime-file-utils.mjs' import { calculateTotalCombinations, combineFiltersWithConstraintsGenerator } from './combineCalculator.mjs' +import { default as jobFilterConditions } from './internal-config/job-filter-conditions-20241002.json' +const jobFilterConditionsMapByCode = {} +Object.values(jobFilterConditions).forEach(arr => { + arr.forEach(option => { + jobFilterConditionsMapByCode[option.code] = option + }) +}) + ensureConfigFileExist() ensureStorageFileExist() @@ -154,6 +162,13 @@ async function setFilterCondition (selectedFilters) { const optionKaPrefixes = ['sel-job-rec-salary-', 'sel-job-rec-exp-', 'sel-job-rec-degree-', 'sel-job-rec-scale-'] const conditionArr = [salaryList, experienceList, degreeList, scaleList] + console.log('current filter condition----') + for (let i = 0; i < placeholderTexts.length; i++) { + const text = placeholderTexts[i] + const condition = conditionArr[i] + console.log(`${text}:`, condition.length === 0 ? '不限' : condition.map(code => jobFilterConditionsMapByCode[code]?.name ?? code).join(',') ) + } + console.log('----------------------------') for(let i = 0; i < placeholderTexts.length; i++) { const placeholderText = placeholderTexts[i] const filterDropdownProxy = await (async () => { @@ -168,8 +183,9 @@ async function setFilterCondition (selectedFilters) { continue } + const currentFilterConditions = conditionArr[i]; const filterDropdownCssList = await filterDropdownProxy.evaluate(el => Array.from(el.classList)); - if (!filterDropdownCssList.includes('is-select') && !conditionArr[i].length) { + if (!filterDropdownCssList.includes('is-select') && !currentFilterConditions.length) { continue } else { const filterDropdownElBBox = await filterDropdownProxy.boundingBox() @@ -180,14 +196,54 @@ async function setFilterCondition (selectedFilters) { await sleepWithRandomDelay(500) const optionKaPrefix = optionKaPrefixes[i] - for(let j = 0; j < conditionArr[i].length; j++) { - const optionValue = conditionArr[i][j] - await sleepWithRandomDelay(500) - const optionElProxy = await page.$(`li[ka="${optionKaPrefix}${optionValue}"]`) - if (!optionElProxy) { - continue; + if (!currentFilterConditions.length) { + // select 不限 immediately + const buxianOptionElProxy = await page.$(`.job-recommend-main .recommend-search-more .condition-filter-select .filter-select-dropdown li[ka="${optionKaPrefix}${0}"]`) + await buxianOptionElProxy.click() + } else { + //#region uncheck options perviously checked but not existed in current filter. + const activeOptionElAtCurrentFilterProxyList = await page.$$(`.job-recommend-main .recommend-search-more .condition-filter-select .filter-select-dropdown li.active[ka^="${optionKaPrefix}"]`) + const activeOptionValues = (await Promise.all( + activeOptionElAtCurrentFilterProxyList.map(elProxy => { + return elProxy.evaluate((el) => { + return el.getAttribute('ka') + }) + }) + )).map(it => it.replace(optionKaPrefix, '')).map(Number) + if (placeholderText !== '薪资待遇') { + for(let i = 0; i < activeOptionValues.length; i++) { + const activeValue = activeOptionValues[i] + const activeOptionElProxy = activeOptionElAtCurrentFilterProxyList[i] + if (!currentFilterConditions.includes(activeValue)) { + await activeOptionElProxy.click() + } + } } - await optionElProxy.click() + //#endregion + //#region only click the one which we need check, don't change already checked. + const conditionToCheck = currentFilterConditions.filter(it => { + return !activeOptionValues.includes(it) + }) + for(let j = 0; j < conditionToCheck.length; j++) { + const optionValue = conditionToCheck[j] + await sleepWithRandomDelay(500) + const optionElProxy = await page.$(`.job-recommend-main .recommend-search-more .condition-filter-select .filter-select-dropdown li[ka="${optionKaPrefix}${optionValue}"]`) + if (!optionElProxy) { + continue; + } + await optionElProxy.click() + } + //#endregion + //#region move out dropdown entry to make dropdown hidden + const navBarLogoElProxy = await page.$(`[ka="header-home-logo"]`) + if (navBarLogoElProxy) { + const navBarLogoElBBox = await navBarLogoElProxy.boundingBox() + await page.mouse.move( + navBarLogoElBBox.x + navBarLogoElBBox.width / 2, + navBarLogoElBBox.y + navBarLogoElBBox.height / 2, + ) + } + //#endregion } await sleepWithRandomDelay(500) }