diff --git a/src/services/sessions.ts b/src/services/sessions.ts index 251bffb..107c4b8 100644 --- a/src/services/sessions.ts +++ b/src/services/sessions.ts @@ -122,7 +122,8 @@ export async function testWebBrowserInstallation(): Promise { oneTimeSession: true }) const page = await session.browser.newPage() - await page.goto(testUrl) + const pageTimeout = Number(process.env.BROWSER_TIMEOUT) || 40000 + await page.goto(testUrl, {waitUntil: 'domcontentloaded', timeout: pageTimeout}) webBrowserUserAgent = await page.evaluate(() => navigator.userAgent) // replace Linux ARM user-agent because it's detected @@ -147,7 +148,7 @@ export async function create(session: string, options: SessionCreateOptions): Pr const puppeteerOptions: any = { product: 'firefox', headless: process.env.HEADLESS !== 'false', - timeout: process.env.BROWSER_TIMEOUT || 40000 + timeout: Number(process.env.BROWSER_TIMEOUT) || 40000 } puppeteerOptions.extraPrefsFirefox = buildExtraPrefsFirefox(options.proxy) diff --git a/src/services/solver.ts b/src/services/solver.ts index cdf8978..1ad3e3a 100644 --- a/src/services/solver.ts +++ b/src/services/solver.ts @@ -89,7 +89,11 @@ async function resolveChallenge(params: V1Request, session: SessionsCacheItem): // is response is ok // reload the page to be sure we get the real page log.debug("Reloading the page") - response = await gotoPage(params, page); + try { + response = await gotoPage(params, page); + } catch (e) { + log.warn("Page not reloaded (do not report!): Cause: " + e.toString()) + } } catch (e) { status = "error"; @@ -129,14 +133,17 @@ async function resolveChallenge(params: V1Request, session: SessionsCacheItem): } async function gotoPage(params: V1Request, page: Page): Promise { - let response: HTTPResponse; - if (params.method != 'POST') { - response = await page.goto(params.url, {waitUntil: 'domcontentloaded'}); + let pageTimeout = params.maxTimeout / 3; + let response: HTTPResponse + try { + response = await page.goto(params.url, {waitUntil: 'domcontentloaded', timeout: pageTimeout}); + } catch (e) { + // retry + response = await page.goto(params.url, {waitUntil: 'domcontentloaded', timeout: 2000}); + } - } else { + if (params.method == 'POST') { // post hack - // first request a page without cloudflare - response = await page.goto(params.url, {waitUntil: 'domcontentloaded'}); await page.setContent( `