From 9fbdd2be8a2e5cbcedffa8bab3481c2af34c7d42 Mon Sep 17 00:00:00 2001 From: LightZirconite Date: Tue, 4 Nov 2025 22:45:56 +0100 Subject: [PATCH] feat: Fix DNS 404 --- src/browser/Browser.ts | 20 ++++++++++++++------ src/functions/Login.ts | 17 ++++++++++++++--- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/browser/Browser.ts b/src/browser/Browser.ts index 47f9233..fc18715 100644 --- a/src/browser/Browser.ts +++ b/src/browser/Browser.ts @@ -41,8 +41,7 @@ class Browser { this.bot.log(this.bot.isMobile, 'BROWSER', `Launching ${engineName} (headless=${headless})`) const proxyConfig = this.buildPlaywrightProxy(proxy) - // Detect Raspberry Pi / ARM Linux for specific browser args - const isRaspberryPi = process.platform === 'linux' && process.arch === 'arm64' + const isLinux = process.platform === 'linux' const baseArgs = [ '--no-sandbox', @@ -53,20 +52,29 @@ class Browser { '--ignore-ssl-errors' ] - // Add Raspberry Pi specific args to fix DNS/network issues - const raspberryPiArgs = isRaspberryPi ? [ + // Linux-specific args to fix DNS resolution & chrome-error://chromewebdata/ issues + // These fixes apply to ALL Linux distributions (Ubuntu, Debian, Raspberry Pi OS, etc.) + // Fixes navigation interrupted errors caused by DNS timeouts & network service issues + const linuxNetworkFixArgs = isLinux ? [ '--disable-features=NetworkService', '--disable-features=VizDisplayCompositor', + '--enable-features=NetworkServiceInProcess', '--disable-dev-shm-usage', '--disable-software-rasterizer', '--disable-gpu', - '--disable-features=IsolateOrigins,site-per-process' + '--disable-features=IsolateOrigins,site-per-process', + '--disable-site-isolation-trials', + '--dns-prefetch-disable', + '--no-zygote', + '--single-process', + '--disable-blink-features=AutomationControlled' ] : [] browser = await playwright.chromium.launch({ headless, ...(proxyConfig && { proxy: proxyConfig }), - args: [...baseArgs, ...raspberryPiArgs] + args: [...baseArgs, ...linuxNetworkFixArgs], + timeout: isLinux ? 120000 : 60000 }) } catch (e: unknown) { const msg = (e instanceof Error ? e.message : String(e)) diff --git a/src/functions/Login.ts b/src/functions/Login.ts index 9dd04c5..4a9d65d 100644 --- a/src/functions/Login.ts +++ b/src/functions/Login.ts @@ -102,7 +102,14 @@ export class Login { return } - await page.goto('https://www.bing.com/rewards/dashboard', { waitUntil: 'domcontentloaded' }) + // Use longer timeout on Linux due to DNS resolution issues + const isLinux = process.platform === 'linux' + const navigationTimeout = isLinux ? 45000 : 30000 + + await page.goto('https://www.bing.com/rewards/dashboard', { + waitUntil: 'domcontentloaded', + timeout: navigationTimeout + }) await this.disableFido(page) const [, , portalCheck] = await Promise.allSettled([ @@ -151,7 +158,9 @@ export class Login { url.searchParams.set('access_type', 'offline_access') url.searchParams.set('login_hint', email) - await page.goto(url.href, { waitUntil: 'domcontentloaded' }) + const isLinux = process.platform === 'linux' + const navigationTimeout = isLinux ? 45000 : 30000 + await page.goto(url.href, { waitUntil: 'domcontentloaded', timeout: navigationTimeout }) const start = Date.now() this.bot.log(this.bot.isMobile, 'LOGIN-APP', 'Authorizing mobile scope...') let code = '' @@ -243,7 +252,9 @@ export class Login { private async tryReuseExistingSession(page: Page): Promise { const homeUrl = 'https://rewards.bing.com/' try { - await page.goto(homeUrl) + const isLinux = process.platform === 'linux' + const navigationTimeout = isLinux ? 45000 : 30000 + await page.goto(homeUrl, { timeout: navigationTimeout }) await page.waitForLoadState('domcontentloaded').catch(logError('LOGIN', 'DOMContentLoaded timeout', this.bot.isMobile)) await this.bot.browser.utils.reloadBadPage(page) await this.bot.utils.wait(250)