feat: add ghostery adblocker & update deps
Woah, two years :)
This commit is contained in:
@@ -1,59 +1,62 @@
|
||||
import { devices, type BrowserContext, type Locator } from "patchright";
|
||||
import logger from "../logger.js";
|
||||
import * as twitch from "../website/twitch.js";
|
||||
import * as constants from "../constants.js";
|
||||
|
||||
async function spawn(context: BrowserContext, targetUrl: string, changeViewport: boolean = false, spawnId: string = "unknown") {
|
||||
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();
|
||||
if (changeViewport) {
|
||||
logger.debug(`[${spawnId}] Changing viewport size...`);
|
||||
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) {
|
||||
logger.error(`[${spawnId}] Error while navigating to proxy website: ${e}`);
|
||||
await page.close();
|
||||
throw e;
|
||||
}
|
||||
let targetInput: Locator | null = null;
|
||||
const allInput = await page.locator("input").all();
|
||||
for (const input of allInput) {
|
||||
const placeholder = await input.getAttribute("placeholder");
|
||||
if (placeholder?.includes("URL")) {
|
||||
targetInput = input;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!targetInput) {
|
||||
logger.error(`[${spawnId}] Failed to find input field for URL input`);
|
||||
await page.close();
|
||||
throw new Error(`Failed to find input field for URL input`);
|
||||
}
|
||||
await targetInput.fill(targetUrl);
|
||||
await targetInput.press("Enter");
|
||||
logger.info(`[${spawnId}] Navigating to ${targetUrl}`);
|
||||
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, using Twitch mode...`);
|
||||
await twitch.keepAlive(page, spawnId);
|
||||
} else {
|
||||
logger.warn(`[${spawnId}] Unsupported URL: ${targetUrl}`);
|
||||
logger.warn(`[${spawnId}] Will try to keep alive, but no guarantees`);
|
||||
while (true) {
|
||||
await page.waitForTimeout(5 * 60 * 1000); // 5 minutes
|
||||
await page.reload();
|
||||
logger.debug(`[${spawnId}] Reloaded page`);
|
||||
}
|
||||
}
|
||||
await page.close();
|
||||
logger.info(`[${spawnId}] Proxy with the server ${server} closed`);
|
||||
}
|
||||
|
||||
export { spawn };
|
||||
import { devices, type BrowserContext, type Locator } from "patchright";
|
||||
import logger from "../logger.js";
|
||||
import * as twitch from "../website/twitch.js";
|
||||
import * as constants from "../constants.js";
|
||||
import type { PlaywrightBlocker } from "@ghostery/adblocker-playwright";
|
||||
|
||||
async function spawn(context: BrowserContext, blocker: PlaywrightBlocker, targetUrl: string, changeViewport: boolean = false, spawnId: string = "unknown") {
|
||||
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();
|
||||
logger.debug(`[${spawnId}] New page created, enabling adblocker...`);
|
||||
await blocker.enableBlockingInPage(page as any); // As any because technically patchright Page != playwright Page :D
|
||||
if (changeViewport) {
|
||||
logger.debug(`[${spawnId}] Changing viewport size...`);
|
||||
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) {
|
||||
logger.error(`[${spawnId}] Error while navigating to proxy website: ${e}`);
|
||||
await page.close();
|
||||
throw e;
|
||||
}
|
||||
let targetInput: Locator | null = null;
|
||||
const allInput = await page.locator("input").all();
|
||||
for (const input of allInput) {
|
||||
const placeholder = await input.getAttribute("placeholder");
|
||||
if (placeholder?.includes("URL")) {
|
||||
targetInput = input;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!targetInput) {
|
||||
logger.error(`[${spawnId}] Failed to find input field for URL input`);
|
||||
await page.close();
|
||||
throw new Error(`Failed to find input field for URL input`);
|
||||
}
|
||||
await targetInput.fill(targetUrl);
|
||||
await targetInput.press("Enter");
|
||||
logger.info(`[${spawnId}] Navigating to ${targetUrl}`);
|
||||
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, using Twitch mode...`);
|
||||
await twitch.keepAlive(page, spawnId);
|
||||
} else {
|
||||
logger.warn(`[${spawnId}] Unsupported URL: ${targetUrl}`);
|
||||
logger.warn(`[${spawnId}] Will try to keep alive, but no guarantees`);
|
||||
while (true) {
|
||||
await page.waitForTimeout(5 * 60 * 1000); // 5 minutes
|
||||
await page.reload();
|
||||
logger.debug(`[${spawnId}] Reloaded page`);
|
||||
}
|
||||
}
|
||||
await page.close();
|
||||
logger.info(`[${spawnId}] Proxy with the server ${server} closed`);
|
||||
}
|
||||
|
||||
export { spawn };
|
||||
|
||||
Reference in New Issue
Block a user