Fix max timeout error in some pages

This commit is contained in:
ngosang 2022-02-06 13:57:10 +01:00
parent 2893f72237
commit 6c598d5360
2 changed files with 17 additions and 9 deletions

View File

@ -122,7 +122,8 @@ export async function testWebBrowserInstallation(): Promise<void> {
oneTimeSession: true oneTimeSession: true
}) })
const page = await session.browser.newPage() 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) webBrowserUserAgent = await page.evaluate(() => navigator.userAgent)
// replace Linux ARM user-agent because it's detected // 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 = { const puppeteerOptions: any = {
product: 'firefox', product: 'firefox',
headless: process.env.HEADLESS !== 'false', headless: process.env.HEADLESS !== 'false',
timeout: process.env.BROWSER_TIMEOUT || 40000 timeout: Number(process.env.BROWSER_TIMEOUT) || 40000
} }
puppeteerOptions.extraPrefsFirefox = buildExtraPrefsFirefox(options.proxy) puppeteerOptions.extraPrefsFirefox = buildExtraPrefsFirefox(options.proxy)

View File

@ -89,7 +89,11 @@ async function resolveChallenge(params: V1Request, session: SessionsCacheItem):
// is response is ok // is response is ok
// reload the page to be sure we get the real page // reload the page to be sure we get the real page
log.debug("Reloading the 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) { } catch (e) {
status = "error"; status = "error";
@ -129,14 +133,17 @@ async function resolveChallenge(params: V1Request, session: SessionsCacheItem):
} }
async function gotoPage(params: V1Request, page: Page): Promise<HTTPResponse> { async function gotoPage(params: V1Request, page: Page): Promise<HTTPResponse> {
let response: HTTPResponse; let pageTimeout = params.maxTimeout / 3;
if (params.method != 'POST') { let response: HTTPResponse
response = await page.goto(params.url, {waitUntil: 'domcontentloaded'}); 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 // post hack
// first request a page without cloudflare
response = await page.goto(params.url, {waitUntil: 'domcontentloaded'});
await page.setContent( await page.setContent(
` `
<!DOCTYPE html> <!DOCTYPE html>