From e495b298b74e43b20242d153bf55825764982584 Mon Sep 17 00:00:00 2001 From: Oscar Date: Thu, 25 Jun 2026 13:11:47 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20refactor(src/hh/scraper.ts):=20?= =?UTF-8?q?=D1=83=D0=BF=D1=80=D0=BE=D1=89=D0=B0=D0=B5=D1=82=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D1=83=20OTP,=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D1=86=D0=B8=D0=BA=D0=BB=20=D0=B8=20=D1=83=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D1=88=D0=B0=D0=B5=D1=82=20=D1=87=D0=B8=D1=82=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=D0=BE=D1=81=D1=82=D1=8C=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hh/scraper.ts | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/src/hh/scraper.ts b/src/hh/scraper.ts index 549c217..b5d5d1a 100644 --- a/src/hh/scraper.ts +++ b/src/hh/scraper.ts @@ -7,7 +7,7 @@ import prisma from '@prisma' import { createLogger } from '@/logger' import { createMessage } from '@/openai' import { loadSession, newStealthContext, randomDelay, randomScroll, withBrowser } from './browser.js' -import { createStatusReporter, escapeHtml } from './ui.js' +import { escapeHtml } from './ui.js' const log = createLogger('scraper') @@ -55,26 +55,34 @@ function waitForOtp(chatId: number): Promise { async function handleOtpFlow(page: Page, context: BrowserContext, chatId: number, initialMessage: string): Promise { await page.click('[data-qa="applicant-login-input-otp"]') - let message = initialMessage - while (true) { - await bot.sendMessage(chatId, message) - const otp = await waitForOtp(chatId) + const message = initialMessage - await page.fill('[data-qa="applicant-login-input-otp"] input', otp) + await bot.sendMessage(chatId, message) + const otp = await waitForOtp(chatId) - const outcome = await Promise.race([ - page.waitForSelector('[data-qa="profileAndResumes-button"]', { timeout: 15000 }).then(() => 'success' as const), - page.waitForSelector('[data-qa="magritte-pincode-input-field"][aria-invalid="true"]', { timeout: 8000 }).then(() => 'error' as const), - ]).catch(() => 'timeout' as const) + await page.fill('[data-qa="applicant-login-input-otp"] input', otp) - if (outcome === 'success') - break - if (outcome === 'error') { - message = '❌ Неверный код. Введи код ещё раз:' - continue - } - throw new Error('OTP verification timed out') - } + // while (true) { + // await bot.sendMessage(chatId, message) + // const otp = await waitForOtp(chatId) + // + // await page.fill('[data-qa="applicant-login-input-otp"] input', otp) + // + // const outcome = await Promise.race([ + // page.waitForSelector('[data-qa="profileAndResumes-button"]', { timeout: 15000 }).then(() => 'success' as const), + // page.waitForSelector('[data-qa="magritte-pincode-input-field"][aria-invalid="true"]', { timeout: 8000 }).then(() => 'error' as const), + // ]).catch(() => 'timeout' as const) + // + // if (outcome === 'success') + // break + // if (outcome === 'error') { + // message = '❌ Неверный код. Введи код ещё раз:' + // continue + // } + // throw new Error('OTP verification timed out') + // } + + await page.waitForLoadState('networkidle') const cookies = await context.cookies() await prisma.user.upsert({