From 9ee0ebe2d273c9d39d5636cd3ba77527c3c6e4fa Mon Sep 17 00:00:00 2001 From: Oscar Date: Wed, 27 May 2026 12:06:16 +0300 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20=D0=98=D0=97=D0=9C=D0=95?= =?UTF-8?q?=D0=9D=D0=95=D0=9D=D0=98=D0=95(src/hh/scraper.ts):=20=D0=94?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20randomScroll,=20randomScroll?= =?UTF-8?q?=20=D0=B8=20=D0=B2=D0=B2=D0=BE=D0=B4=20=D1=80=D0=B5=D0=B7=D1=8E?= =?UTF-8?q?=D0=BC=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hh/scraper.ts | 61 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/src/hh/scraper.ts b/src/hh/scraper.ts index e7d2d39..9d5ac29 100644 --- a/src/hh/scraper.ts +++ b/src/hh/scraper.ts @@ -4,7 +4,7 @@ import type { StatusReporter } from './ui.js' import bot from '@bot' import prisma from '@prisma' import { createMessage } from '../openai' -import { getBrowser, loadSession, randomDelay } from './browser.js' +import { getBrowser, loadSession, randomDelay, randomScroll } from './browser.js' function waitForOtp(chatId: number): Promise { return new Promise((resolve) => { @@ -209,23 +209,50 @@ export async function applyToJobs( const letter = await createMessage(resume.data, description, user!.prompt) await keep(`✅ ${vacancy.title}\n\n${letter}`) - // const applyBtn = await page.$('[data-qa="vacancy-response-link-top"]') - // if (!applyBtn) { - // results.skipped.push(vacancy.title) - // continue - // } - // - // await randomScroll(page) - // - // await applyBtn.click() - // await page.waitForTimeout(randomDelay()) - // - // const submitBtn = await page.$('[data-qa="vacancy-response-popup-submit"]') - // if (submitBtn) { - // await submitBtn.click() - // await page.waitForTimeout(randomDelay()) - // } + const applyBtn = await page.$('[data-qa="vacancy-response-link-top"]') + if (!applyBtn) { + results.skipped.push(vacancy) + continue + } + await randomScroll(page) + + await applyBtn.click() + await page.waitForTimeout(randomDelay()) + + // Выбор реюзме + const currentResume = await page.$('[data-qa="resume-title"]') + console.log(currentResume?.textContent()) + await page.pause() + + const addLetter = await page.$('[data-qa="add-cover-letter"]') + + if (addLetter) { + await page.pause() + await addLetter?.hover() + await addLetter?.click() + } + + if (letter) { + const letterInput = await page.$('[data-qa="vacancy-response-popup-form-letter-input"]') + + await letterInput?.click() + await letterInput?.fill(letter) + await page.pause() + } + + const submitBtn = await page.$('[data-qa="vacancy-response-submit-popup"]')// vacancy-response-popup-submit + if (submitBtn) { + await submitBtn.click() + await page.waitForTimeout(randomDelay()) + } + else { + const errMsg = 'Not found submit button' + console.log(errMsg) + results.errors.push({ ...ref, message: errMsg }) + } + + await page.pause() results.applied.push(ref) } catch (err) {