Kaynağa Gözat

execute SingleFile script ASAP

Gildas 7 yıl önce
ebeveyn
işleme
dc02b70d9e

+ 8 - 13
cli/back-ends/webdriver-gecko.js

@@ -51,7 +51,7 @@ const SCRIPTS = [
 	"../../lib/single-file/single-file-core.js",
 	"../../lib/single-file/single-file-browser.js"
 ];
-const NETWORK_IDLE_MAX_DELAY = 5000;
+const NETWORK_IDLE_MAX_DELAY = 60000;
 
 exports.getPageData = async options => {
 	const RESOLVED_CONTENTS = {
@@ -60,7 +60,7 @@ exports.getPageData = async options => {
 	};
 	let driver;
 	try {
-		const builder = new Builder().withCapabilities({ "pageLoadStrategy": "eager" });
+		const builder = new Builder().withCapabilities({ "pageLoadStrategy": "none" });
 		const firefoxOptions = new firefox.Options();
 		if (options.browserHeadless === undefined || options.browserHeadless) {
 			firefoxOptions.headless();
@@ -101,22 +101,17 @@ exports.getPageData = async options => {
 		let scripts = SCRIPTS.map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString().replace(/\n(this)\.([^ ]+) = (this)\.([^ ]+) \|\|/g, "\nwindow.$2 = window.$4 ||")).join("\n");
 		scripts += "\nlazyLoader.getScriptContent = " + (function (path) { return (RESOLVED_CONTENTS)[path]; }).toString().replace("RESOLVED_CONTENTS", JSON.stringify(RESOLVED_CONTENTS)) + ";";
 		await driver.get(options.url);
-		if (options.browserWaitUntil == "domcontentloaded") {
-			await driver.executeScript(scripts);
-		} else {
+		await driver.executeScript(scripts);
+		if (options.browserWaitUntil != "domcontentloaded") {
 			let scriptPromise;
 			if (options.browserWaitUntil === undefined || options.browserWaitUntil == "networkidle0") {
-				scriptPromise = driver.executeAsyncScript(scripts + "\naddEventListener(\"single-file-network-idle-0\", () => arguments[0](), true)");
+				scriptPromise = driver.executeAsyncScript("addEventListener(\"single-file-network-idle-0\", () => arguments[0](), true)");
 			} else if (options.browserWaitUntil == "networkidle2") {
-				scriptPromise = driver.executeAsyncScript(scripts + "\naddEventListener(\"single-file-network-idle-2\", () => arguments[0](), true)");
+				scriptPromise = driver.executeAsyncScript("addEventListener(\"single-file-network-idle-2\", () => arguments[0](), true)");
 			} else if (options.browserWaitUntil == "load") {
-				scriptPromise = driver.executeAsyncScript(scripts + "\nif (document.readyState == \"loading\" || document.readyState == \"interactive\") { document.addEventListener(\"load\", () => arguments[0]()) } else { arguments[0](); }");
-			}
-			try {
-				await Promise.race([scriptPromise, new Promise((resolve, reject) => setTimeout(reject, NETWORK_IDLE_MAX_DELAY))]);
-			} catch (error) {
-				await driver.executeScript(scripts);
+				scriptPromise = driver.executeAsyncScript("if (document.readyState == \"loading\" || document.readyState == \"interactive\") { document.addEventListener(\"load\", () => arguments[0]()) } else { arguments[0](); }");
 			}
+			await Promise.race([scriptPromise, new Promise(resolve => setTimeout(resolve, NETWORK_IDLE_MAX_DELAY))]);
 		}
 		if (!options.removeFrames) {
 			await executeScriptInFrames(driver, scripts);

+ 13 - 9
maff2html/back-ends/webdriver-gecko.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global require, exports, process */
+/* global require, exports, process, setTimeout */
 
 const fs = require("fs");
 
@@ -51,6 +51,7 @@ const SCRIPTS = [
 	"../../lib/single-file/single-file-core.js",
 	"../../lib/single-file/single-file-browser.js"
 ];
+const NETWORK_IDLE_MAX_DELAY = 60000;
 
 exports.getPageData = async options => {
 	const RESOLVED_CONTENTS = {
@@ -100,14 +101,17 @@ exports.getPageData = async options => {
 		let scripts = SCRIPTS.map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString().replace(/\n(this)\.([^ ]+) = (this)\.([^ ]+) \|\|/g, "\nwindow.$2 = window.$4 ||")).join("\n");
 		scripts += "\nlazyLoader.getScriptContent = " + (function (path) { return (RESOLVED_CONTENTS)[path]; }).toString().replace("RESOLVED_CONTENTS", JSON.stringify(RESOLVED_CONTENTS)) + ";";
 		await driver.get(options.url);
-		if (options.browserWaitUntil === undefined || options.browserWaitUntil == "networkidle0") {
-			await driver.executeAsyncScript(scripts + "\naddEventListener(\"single-file-network-idle-0\", () => arguments[0](), true)");
-		} else if (options.browserWaitUntil == "networkidle2") {
-			await driver.executeAsyncScript(scripts + "\naddEventListener(\"single-file-network-idle-2\", () => arguments[0](), true)");
-		} else if (options.browserWaitUntil == "load") {
-			await driver.executeAsyncScript(scripts + "\nif (document.readyState == \"loading\" || document.readyState == \"interactive\") { document.addEventListener(\"load\", () => arguments[0]()) } else { arguments[0](); }");
-		} else {
-			await driver.executeScript(scripts);
+		await driver.executeScript(scripts);
+		if (options.browserWaitUntil != "domcontentloaded") {
+			let scriptPromise;
+			if (options.browserWaitUntil === undefined || options.browserWaitUntil == "networkidle0") {
+				scriptPromise = driver.executeAsyncScript("addEventListener(\"single-file-network-idle-0\", () => arguments[0](), true)");
+			} else if (options.browserWaitUntil == "networkidle2") {
+				scriptPromise = driver.executeAsyncScript("addEventListener(\"single-file-network-idle-2\", () => arguments[0](), true)");
+			} else if (options.browserWaitUntil == "load") {
+				scriptPromise = driver.executeAsyncScript("if (document.readyState == \"loading\" || document.readyState == \"interactive\") { document.addEventListener(\"load\", () => arguments[0]()) } else { arguments[0](); }");
+			}
+			await Promise.race([scriptPromise, new Promise(resolve => setTimeout(resolve, NETWORK_IDLE_MAX_DELAY))]);
 		}
 		const result = await driver.executeAsyncScript(getPageDataScript(), options);
 		if (result.error) {