Quellcode durchsuchen

added (partial) support of browserWaitUntil option

Gildas vor 7 Jahren
Ursprung
Commit
2650754f43
1 geänderte Dateien mit 23 neuen und 9 gelöschten Zeilen
  1. 23 9
      cli/back-ends/webdriver-chrome.js

+ 23 - 9
cli/back-ends/webdriver-chrome.js

@@ -60,22 +60,29 @@ exports.getPageData = async options => {
 	try {
 		const builder = new Builder();
 		const chromeOptions = new chrome.Options();
-		const optionHeadless = options.browserHeadless === undefined || options.browserHeadless;
+		const optionHeadless = false; options.browserHeadless === undefined || options.browserHeadless;
 		if (optionHeadless) {
 			chromeOptions.headless();
 		}
+		if (options.browserExecutablePath) {
+			chromeOptions.setChromeBinaryPath(options.browserExecutablePath);
+		}
 		if (options.browserDisableWebSecurity === undefined || options.browserDisableWebSecurity) {
 			chromeOptions.addArguments("--disable-web-security");
 		}
-		if (!optionHeadless && (options.browserBypassCSP === undefined || options.browserBypassCSP)) {
-			chromeOptions.addExtensions([require.resolve("./extensions/signed/bypass_csp-0.0.3-an+fx.xpi")]);
+		if (!optionHeadless) {
+			const extensions = [];
+			if (options.browserBypassCSP === undefined || options.browserBypassCSP) {
+				extensions.push(require.resolve("./extensions/signed/bypass_csp-0.0.3-an+fx.xpi"));
+			}
+			if (options.browserWaitUntil === undefined || options.browserWaitUntil == "networkidle0" || options.browserWaitUntil == "networkidle2") {
+				extensions.push(require.resolve("./extensions/signed/network_idle-0.0.2-an+fx.xpi"));
+			}
+			chromeOptions.addExtensions(extensions);
 		}
 		if (options.userAgent) {
 			await chromeOptions.addArguments("--user-agent=" + JSON.stringify(options.userAgent));
 		}
-		if (options.browserExecutablePath) {
-			chromeOptions.setChromeBinaryPath(options.browserExecutablePath);
-		}
 		builder.setChromeOptions(chromeOptions);
 		driver = await builder.forBrowser("chrome").build();
 		driver.manage().setTimeouts({ script: null, pageLoad: null, implicit: null });
@@ -89,9 +96,16 @@ exports.getPageData = async options => {
 		}
 		let scripts = SCRIPTS.map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString()).join("\n");
 		scripts += "\nlazyLoader.getScriptContent = " + (function (path) { return (RESOLVED_CONTENTS)[path]; }).toString().replace("RESOLVED_CONTENTS", JSON.stringify(RESOLVED_CONTENTS)) + ";";
-		const loadPromise = driver.get(options.url);
-		driver.executeScript(scripts);
-		await loadPromise;
+		await driver.get(options.url);
+		if (!optionHeadless && (options.browserWaitUntil === undefined || options.browserWaitUntil == "networkidle0")) {
+			await driver.executeAsyncScript(scripts + "\naddEventListener(\"single-file-network-idle-0\", () => arguments[0](), true)");
+		} else if (!optionHeadless && 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.addEventListener(\"load\", () => arguments[0]()) } else { arguments[0](); }");
+		} else {
+			await driver.executeScript(scripts);
+		}
 		if (!options.removeFrames) {
 			const windowHandles = await driver.getAllWindowHandles();
 			await Promise.all(windowHandles.map(async windowHandle => {