mirror of
https://github.com/hempyhemp/hh-auto-reply.git
synced 2026-06-08 18:04:57 +00:00
🎉 feat(browser): Добавлена функция создания нового скрытого контекста для браузера.
All checks were successful
Deploy / deploy (push) Successful in 47s
All checks were successful
Deploy / deploy (push) Successful in 47s
This commit is contained in:
@@ -17,16 +17,30 @@ export async function randomScroll(page: Page): Promise<void> {
|
|||||||
|
|
||||||
export async function getBrowser(): Promise<Browser> {
|
export async function getBrowser(): Promise<Browser> {
|
||||||
return chromium.launch({
|
return chromium.launch({
|
||||||
headless: !!(process.env?.debug ?? true),
|
headless: !process.env.debug,
|
||||||
args: [
|
args: [
|
||||||
'--no-sandbox',
|
'--no-sandbox',
|
||||||
'--disable-setuid-sandbox',
|
'--disable-setuid-sandbox',
|
||||||
'--disable-dev-shm-usage',
|
'--disable-dev-shm-usage',
|
||||||
'--disable-gpu',
|
'--disable-gpu',
|
||||||
|
'--disable-blink-features=AutomationControlled',
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function newStealthContext(browser: Browser) {
|
||||||
|
const context = await browser.newContext({
|
||||||
|
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
|
||||||
|
viewport: { width: 1280, height: 800 },
|
||||||
|
locale: 'ru-RU',
|
||||||
|
timezoneId: 'Europe/Moscow',
|
||||||
|
})
|
||||||
|
await context.addInitScript(() => {
|
||||||
|
Object.defineProperty(navigator, 'webdriver', { get: () => false })
|
||||||
|
})
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
|
||||||
export async function loadSession(page: Page, telegramId: bigint | number): Promise<boolean> {
|
export async function loadSession(page: Page, telegramId: bigint | number): Promise<boolean> {
|
||||||
const user = await prisma.user.findUnique({ where: { telegramId } })
|
const user = await prisma.user.findUnique({ where: { telegramId } })
|
||||||
if (!user?.session)
|
if (!user?.session)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import type { StatusReporter } from './ui.js'
|
|||||||
import bot from '@bot'
|
import bot from '@bot'
|
||||||
import prisma from '@prisma'
|
import prisma from '@prisma'
|
||||||
import { createMessage } from '@/openai'
|
import { createMessage } from '@/openai'
|
||||||
import { getBrowser, loadSession, randomDelay, randomScroll } from './browser.js'
|
import { getBrowser, loadSession, newStealthContext, randomDelay, randomScroll } from './browser.js'
|
||||||
import { escapeHtml } from './ui.js'
|
import { escapeHtml } from './ui.js'
|
||||||
|
|
||||||
function waitForOtp(chatId: number): Promise<string> {
|
function waitForOtp(chatId: number): Promise<string> {
|
||||||
@@ -62,7 +62,7 @@ export async function login(email: string, chatId: number): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const context = await browser.newContext()
|
const context = await newStealthContext(browser)
|
||||||
const page = await context.newPage()
|
const page = await context.newPage()
|
||||||
|
|
||||||
await page.goto('https://hh.ru/account/login', { waitUntil: 'domcontentloaded' })
|
await page.goto('https://hh.ru/account/login', { waitUntil: 'domcontentloaded' })
|
||||||
@@ -110,7 +110,7 @@ export async function login(email: string, chatId: number): Promise<void> {
|
|||||||
|
|
||||||
export async function checkIsAuth(telegramId: bigint | number) {
|
export async function checkIsAuth(telegramId: bigint | number) {
|
||||||
const browser = await getBrowser()
|
const browser = await getBrowser()
|
||||||
const context = await browser.newContext()
|
const context = await newStealthContext(browser)
|
||||||
const page = await context.newPage()
|
const page = await context.newPage()
|
||||||
await loadSession(page, telegramId)
|
await loadSession(page, telegramId)
|
||||||
await page.goto('https://hh.ru/search/vacancy', { waitUntil: 'domcontentloaded' })
|
await page.goto('https://hh.ru/search/vacancy', { waitUntil: 'domcontentloaded' })
|
||||||
@@ -127,7 +127,7 @@ export async function checkIsAuth(telegramId: bigint | number) {
|
|||||||
|
|
||||||
export async function listResumes(chatId: number): Promise<ResumeListItem[]> {
|
export async function listResumes(chatId: number): Promise<ResumeListItem[]> {
|
||||||
const browser = await getBrowser()
|
const browser = await getBrowser()
|
||||||
const context = await browser.newContext()
|
const context = await newStealthContext(browser)
|
||||||
const page = await context.newPage()
|
const page = await context.newPage()
|
||||||
await loadSession(page, chatId)
|
await loadSession(page, chatId)
|
||||||
|
|
||||||
@@ -218,7 +218,7 @@ export async function applyToJobs(
|
|||||||
{ chatId, reporter }: { chatId: number, reporter: StatusReporter },
|
{ chatId, reporter }: { chatId: number, reporter: StatusReporter },
|
||||||
): Promise<ApplyResult> {
|
): Promise<ApplyResult> {
|
||||||
const browser = await getBrowser()
|
const browser = await getBrowser()
|
||||||
const context = await browser.newContext()
|
const context = await newStealthContext(browser)
|
||||||
const page = await context.newPage()
|
const page = await context.newPage()
|
||||||
const results: ApplyResult = { applied: [], skipped: [], errors: [] }
|
const results: ApplyResult = { applied: [], skipped: [], errors: [] }
|
||||||
const { status, keep, clear } = reporter
|
const { status, keep, clear } = reporter
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { registerHHCommands, triggerHHStart } from './hh/bot-commands.js'
|
|||||||
process.on('unhandledRejection', (reason) => {
|
process.on('unhandledRejection', (reason) => {
|
||||||
console.error('[unhandledRejection]', reason)
|
console.error('[unhandledRejection]', reason)
|
||||||
})
|
})
|
||||||
// console.log('hi')
|
// console.log('hi') //PWDEBUG=1
|
||||||
registerHHCommands()
|
registerHHCommands()
|
||||||
|
|
||||||
bot.onText(/\/start/, async (msg) => {
|
bot.onText(/\/start/, async (msg) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user