From cb427a9fa440f41319dfd1f30edd0046a4bd0b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Th=E1=BA=BF=20H=C6=B0ng?= Date: Sun, 13 Apr 2025 00:31:57 +0700 Subject: [PATCH] feat: random device resolution & accept cookies --- src/proxy/reflect4.ts | 9 +++++++-- src/website/twitch.ts | 10 +++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/proxy/reflect4.ts b/src/proxy/reflect4.ts index ea9a9ef..f838892 100644 --- a/src/proxy/reflect4.ts +++ b/src/proxy/reflect4.ts @@ -1,4 +1,4 @@ -import { type BrowserContext, type Locator } from "patchright"; +import { devices, type BrowserContext, type Locator } from "patchright"; import logger from "../logger"; import * as twitch from "../website/twitch"; import * as constants from "../constants"; @@ -7,7 +7,10 @@ async function spawn(context: BrowserContext, targetUrl: string, spawnId: string const server = constants.REFLECT4_SERVERS[Math.floor(Math.random() * constants.REFLECT4_SERVERS.length)]; logger.debug(`[${spawnId}] Using reflect4 server: ${server}`); const page = await context.newPage(); - await page.setViewportSize({width: 640, height: 360}); + const deviceName = Object.keys(devices)[Math.floor(Math.random() * Object.keys(devices).length)]; + const device = devices[deviceName]; + logger.debug(`[${spawnId}] Using device: ${deviceName}`); + await page.setViewportSize(device.viewport); try { await page.goto(server); } catch (e) { @@ -33,6 +36,8 @@ async function spawn(context: BrowserContext, targetUrl: string, spawnId: string await page.waitForTimeout(15000); // Wait for 15 second to let the page load // Keep-alive the page open for 5 minutes then refresh if (targetUrl.startsWith("https://www.twitch.tv/")) { + logger.info(`[${spawnId}] Twitch URL detected, initializing...`); + await twitch.init(page, spawnId); await twitch.keepAlive(page, spawnId); } else { logger.warn(`[${spawnId}] Unsupported URL: ${targetUrl}`); diff --git a/src/website/twitch.ts b/src/website/twitch.ts index c4c0cb6..05071e4 100644 --- a/src/website/twitch.ts +++ b/src/website/twitch.ts @@ -1,6 +1,14 @@ import type { Page } from "patchright"; import logger from "../logger"; +async function init(page: Page, spawnId: string = "unknown") { + const consentButton = page.locator("button[data-a-target='consent-banner-accept']"); + if ((await consentButton.all()).length > 0) { + logger.debug(`[${spawnId}] Consent button found, clicking it...`); + await consentButton.click(); + } +} + async function keepAlive(page: Page, spawnId: string = "unknown") { try { let waitTime = 0; @@ -25,4 +33,4 @@ async function keepAlive(page: Page, spawnId: string = "unknown") { } } -export { keepAlive }; +export { init, keepAlive };