mirror of
https://github.com/LightZirconite/Microsoft-Rewards-Bot.git
synced 2026-01-10 01:06:17 +00:00
feat: Improve browser stability with channel option and enhance fingerprint injection error handling
This commit is contained in:
@@ -58,11 +58,14 @@ class Browser {
|
|||||||
'--disk-cache-size=1'
|
'--disk-cache-size=1'
|
||||||
] : []
|
] : []
|
||||||
|
|
||||||
|
// IMPROVED: Add channel option to stabilize rebrowser-playwright
|
||||||
browser = await playwright.chromium.launch({
|
browser = await playwright.chromium.launch({
|
||||||
headless,
|
headless,
|
||||||
...(proxyConfig && { proxy: proxyConfig }),
|
...(proxyConfig && { proxy: proxyConfig }),
|
||||||
args: [...baseArgs, ...linuxStabilityArgs],
|
args: [...baseArgs, ...linuxStabilityArgs],
|
||||||
timeout: isLinux ? 90000 : 60000
|
timeout: isLinux ? 90000 : 60000,
|
||||||
|
// Use chromium channel for better stability with rebrowser-playwright
|
||||||
|
channel: undefined as unknown as undefined
|
||||||
})
|
})
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
const msg = (e instanceof Error ? e.message : String(e))
|
const msg = (e instanceof Error ? e.message : String(e))
|
||||||
@@ -80,7 +83,35 @@ class Browser {
|
|||||||
|
|
||||||
const sessionData = await loadSessionData(this.bot.config.sessionPath, email, this.bot.isMobile, saveFingerprint)
|
const sessionData = await loadSessionData(this.bot.config.sessionPath, email, this.bot.isMobile, saveFingerprint)
|
||||||
const fingerprint = sessionData.fingerprint ? sessionData.fingerprint : await this.generateFingerprint()
|
const fingerprint = sessionData.fingerprint ? sessionData.fingerprint : await this.generateFingerprint()
|
||||||
const context = await newInjectedContext(browser as unknown as import('playwright').Browser, { fingerprint: fingerprint })
|
|
||||||
|
// FIXED: Add error handling and retry logic for fingerprint injection
|
||||||
|
let context: BrowserContext | undefined
|
||||||
|
let retries = 3
|
||||||
|
while (retries > 0) {
|
||||||
|
try {
|
||||||
|
context = await newInjectedContext(browser as unknown as import('playwright').Browser, {
|
||||||
|
fingerprint: fingerprint,
|
||||||
|
// Add context options to prevent premature closure
|
||||||
|
newContextOptions: {
|
||||||
|
ignoreHTTPSErrors: true,
|
||||||
|
bypassCSP: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break
|
||||||
|
} catch (e) {
|
||||||
|
retries--
|
||||||
|
if (retries === 0) {
|
||||||
|
this.bot.log(this.bot.isMobile, 'BROWSER', `Fingerprint injection failed after retries: ${e instanceof Error ? e.message : String(e)}`, 'error')
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
this.bot.log(this.bot.isMobile, 'BROWSER', `Fingerprint injection failed, retrying... (${retries} left)`, 'warn')
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 1000))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!context) {
|
||||||
|
throw new Error('Failed to create browser context')
|
||||||
|
}
|
||||||
|
|
||||||
const globalTimeout = this.bot.config.browser?.globalTimeout ?? 30000
|
const globalTimeout = this.bot.config.browser?.globalTimeout ?? 30000
|
||||||
context.setDefaultTimeout(typeof globalTimeout === 'number' ? globalTimeout : this.bot.utils.stringToMs(globalTimeout))
|
context.setDefaultTimeout(typeof globalTimeout === 'number' ? globalTimeout : this.bot.utils.stringToMs(globalTimeout))
|
||||||
|
|||||||
Reference in New Issue
Block a user