Procházet zdrojové kódy

add option --browser-wait-delay (fix #612)

Gildas před 5 roky
rodič
revize
2954c1ba1f

+ 3 - 0
cli/args.js

@@ -36,6 +36,7 @@ const args = require("yargs")
 		"browser-width": 1280,
 		"browser-height": 720,
 		"browser-load-max-time": 60000,
+		"browser-wait-delay": 0,
 		"browser-wait-until": "networkidle0",
 		"browser-wait-until-fallback": true,
 		"browser-debug": false,
@@ -96,6 +97,8 @@ const args = require("yargs")
 	.number("browser-height")
 	.options("browser-load-max-time", { description: "Maximum delay of time to wait for page loading in ms (puppeteer, webdriver-gecko, webdriver-chromium)" })
 	.number("browser-load-max-time")
+	.options("browser-wait-delay", { description: "Time to wait before capturing the page in ms" })
+	.number("browser-wait-delay")
 	.options("browser-wait-until", { description: "When to consider the page is loaded (puppeteer, 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" })

+ 4 - 1
cli/back-ends/jsdom.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global require, exports, Buffer */
+/* global require, exports, Buffer, setTimeout */
 
 const crypto = require("crypto");
 
@@ -75,6 +75,9 @@ async function getPageData(win, options) {
 	executeFrameScripts(doc, scripts);
 	options.removeHiddenElements = false;
 	options.loadDeferredImages = false;
+	if (options.browserWaitDelay) {
+		await new Promise(resolve => setTimeout(resolve, options.browserWaitDelay));
+	}
 	const pageData = await win.singlefile.lib.getPageData(options, { fetch: url => fetchResource(url, options) }, doc, win);
 	if (options.includeInfobar) {
 		await win.singlefile.common.ui.content.infobar.includeScript(pageData);

+ 3 - 0
cli/back-ends/playwright-chromium.js

@@ -97,6 +97,9 @@ async function getPageData(page, options) {
 		timeout: options.browserLoadMaxTime || 0,
 		waitUntil: options.browserWaitUntil && options.browserWaitUntil.startsWith("networkidle") ? NETWORK_IDLE_STATE : options.browserWaitUntil || NETWORK_IDLE_STATE
 	});
+	if (options.browserWaitDelay) {
+		await page.waitForTimeout(options.browserWaitDelay);
+	}
 	return await page.evaluate(async options => {
 		const pageData = await singlefile.lib.getPageData(options);
 		if (options.includeInfobar) {

+ 3 - 0
cli/back-ends/playwright-firefox.js

@@ -97,6 +97,9 @@ async function getPageData(page, options) {
 		timeout: options.browserLoadMaxTime || 0,
 		waitUntil: options.browserWaitUntil && options.browserWaitUntil.startsWith("networkidle") ? NETWORK_IDLE_STATE : options.browserWaitUntil || NETWORK_IDLE_STATE
 	});
+	if (options.browserWaitDelay) {
+		await page.waitForTimeout(options.browserWaitDelay);
+	}
 	return await page.evaluate(async options => {
 		const pageData = await singlefile.lib.getPageData(options);
 		if (options.includeInfobar) {

+ 3 - 0
cli/back-ends/puppeteer-firefox.js

@@ -102,6 +102,9 @@ async function getPageData(browser, page, options) {
 	await pageGoto(page, options);
 	try {
 		await page.evaluate(injectedScript);
+		if (options.browserWaitDelay) {
+			await page.waitForTimeout(options.browserWaitDelay);
+		}
 		return await page.evaluate(async options => {
 			const pageData = await singlefile.lib.getPageData(options);
 			if (options.includeInfobar) {

+ 3 - 0
cli/back-ends/puppeteer.js

@@ -126,6 +126,9 @@ async function getPageData(browser, page, options) {
 		}
 	}
 	try {
+		if (options.browserWaitDelay) {
+			await page.waitForTimeout(options.browserWaitDelay);
+		}
 		return await page.evaluate(async options => {
 			const pageData = await singlefile.lib.getPageData(options);
 			if (options.includeInfobar) {

+ 3 - 0
cli/back-ends/webdriver-chromium.js

@@ -135,6 +135,9 @@ async function getPageData(driver, options) {
 		await Promise.race([scriptPromise, timeoutPromise]);
 		cancelTimeout();
 	}
+	if (options.browserWaitDelay) {
+		await driver.sleep(options.browserWaitDelay);
+	}
 	const result = await driver.executeAsyncScript(getPageDataScript(), options);
 	if (result.error) {
 		throw result.error;

+ 3 - 0
cli/back-ends/webdriver-gecko.js

@@ -134,6 +134,9 @@ async function getPageData(driver, options) {
 	if (!options.removeFrames) {
 		await executeScriptInFrames(driver, scripts);
 	}
+	if (options.browserWaitDelay) {
+		await driver.sleep(options.browserWaitDelay);
+	}
 	const result = await driver.executeAsyncScript(getPageDataScript(), options);
 	if (result.error) {
 		throw result.error;