Selaa lähdekoodia

added --browser-wait-until-fallback option (cf #384)

Former-commit-id: 18828a6384a1203041a2c4f5dc79f7883fd01fac
Gildas 5 vuotta sitten
vanhempi
sitoutus
c5fdcdd9a2
2 muutettua tiedostoa jossa 19 lisäystä ja 1 poistoa
  1. 16 1
      cli/back-ends/puppeteer.js
  2. 3 0
      cli/single-file

+ 16 - 1
cli/back-ends/puppeteer.js

@@ -28,6 +28,7 @@ const scripts = require("./common/scripts.js");
 
 const EXECUTION_CONTEXT_DESTROYED_ERROR = "Execution context was destroyed";
 const NETWORK_IDLE_STATE = "networkidle0";
+const NETWORK_STATES = ["networkidle2", "networkidle0", "load", "domcontentloaded"];
 
 let browser, pendings = 0;
 
@@ -96,7 +97,21 @@ async function getPageData(browser, page, options) {
 	if (options.browserDebug) {
 		await page.waitFor(3000);
 	}
-	await pageGoto(page, options);
+	try {
+		await pageGoto(page, options);
+	} catch (error) {
+		if (options.browserWaitUntilFallback && error.name == "TimeoutError") {
+			const browserWaitUntil = NETWORK_STATES[(NETWORK_STATES.indexOf(options.browserWaitUntil) + 1)];
+			if (browserWaitUntil) {
+				options.browserWaitUntil = browserWaitUntil;
+				return getPageData(browser, page, options);
+			} else {
+				throw error;
+			}
+		} else {
+			throw error;
+		}
+	}
 	try {
 		return await page.evaluate(async options => {
 			const pageData = await singlefile.lib.getPageData(options);

+ 3 - 0
cli/single-file

@@ -40,6 +40,7 @@ const args = require("yargs")
 		"browser-height": 720,
 		"browser-load-max-time": 60000,
 		"browser-wait-until": "networkidle0",
+		"browser-wait-until-fallback": true,
 		"browser-debug": false,
 		"browser-extensions": [],
 		"browser-scripts": [],
@@ -85,6 +86,8 @@ const args = require("yargs")
 	.number("browser-load-max-time")
 	.options("browser-wait-until", { description: "When to consider the page is loaded (puppeteer, puppeteer-firefox, webdriver-gecko, webdriver-chromium)" })
 	.choices("browser-wait-until", ["networkidle0", "networkidle2", "load", "domcontentloaded"])
+	.options("browser-wait-until-fallback", { description: "Retry with the next value of --browser-wait-until when a timeout error is thrown" })	
+	.boolean("browser-wait-until-fallback")
 	.options("browser-debug", { description: "Enable debug mode (puppeteer, puppeteer-firefox, webdriver-gecko, webdriver-chromium)" })
 	.boolean("browser-debug")
 	.options("browser-extensions", { description: "List of extension paths separated by a space and relative to the 'cli' folder (webdriver-gecko, webdriver-chromium)" })