Explorar o código

normalized options

Gildas %!s(int64=7) %!d(string=hai) anos
pai
achega
97f4533984

+ 2 - 3
node-puppeteer/example-puppeteer.js

@@ -29,10 +29,9 @@ const SingleFile = require("../node-index.js").puppeteer;
 
 SingleFile.getPageData({
 	url: "https://github.com/gildas-lormeau/SingleFile",
-	// puppeteerExecutablePath: "C:/Users/Gildas/AppData/Local/Google/Chrome SxS/Application/chrome.exe",
-	// puppeteerWaitUntil: "networkidle0",
-	// puppeteerHeadless: false,
+	// browserExecutablePath: "C:/Users/Gildas/AppData/Local/Google/Chrome SxS/Application/chrome.exe",
 	// userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko Firefox AppleWebKit (KHTML, like Gecko) Chrome Safari",
+	// browserHeadless: false,
 	removeHiddenElements: true,
 	removeUnusedStyles: true,
 	removeUnusedFonts: true,

+ 14 - 10
node-puppeteer/single-file-puppeteer.js

@@ -51,12 +51,15 @@ const SCRIPTS = [
 ];
 
 exports.getPageData = async options => {
-	const browserOptions = {
-		headless: options.puppeteerHeadless === undefined ? true : options.puppeteerHeadless,
-		"args": ["--disable-web-security"]
-	};
-	if (options.puppeteerExecutablePath) {
-		browserOptions.executablePath = options.puppeteerExecutablePath;
+	const browserOptions = {};
+	if (options.browserHeadless !== undefined) {
+		browserOptions.headless = options.browserHeadless;
+	}
+	if (options.browserDisableWebSecurity === undefined || options.browserDisableWebSecurity) {
+		browserOptions.args = ["--disable-web-security"];
+	}
+	if (options.browserExecutablePath) {
+		browserOptions.executablePath = options.browserExecutablePath;
 	}
 	const browser = await puppeteer.launch(browserOptions);
 	let page;
@@ -65,15 +68,17 @@ exports.getPageData = async options => {
 		if (options.userAgent) {
 			await page.setUserAgent(options.userAgent);
 		}
-		await page.setBypassCSP(true);
+		if (options.browserBypassCSP === undefined || options.browserBypassCSP) {
+			await page.setBypassCSP(true);
+		}
 		if (options.loadDeferredImages) {
 			SCRIPTS.unshift("../lib/lazy/web/web-lazy-loader-before");
 		}
 		await Promise.all(SCRIPTS.map(scriptPath => page.evaluateOnNewDocument(fs.readFileSync(require.resolve(scriptPath)).toString())));
 		await page.goto(options.url, {
-			waitUntil: options.puppeteerWaitUntil || "networkidle0"
+			waitUntil: "networkidle0"
 		});
-		const pageData = await page.evaluate(async options => {
+		return page.evaluate(async options => {
 			options.insertSingleFileComment = true;
 			options.insertFaviconLink = true;
 			if (!options.saveRawPage && !options.removeFrames) {
@@ -87,7 +92,6 @@ exports.getPageData = async options => {
 			await singleFile.run();
 			return singleFile.getPageData();
 		}, options);
-		return pageData;
 	} finally {
 		if (page) {
 			page.close();

+ 1 - 0
node-webdriver/example-webdriver.js

@@ -30,6 +30,7 @@ const SingleFile = require("../node-index.js").webdriver;
 SingleFile.getPageData({
 	url: "https://github.com/gildas-lormeau/SingleFile",
 	// userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko Firefox AppleWebKit (KHTML, like Gecko) Chrome Safari",
+	// browserHeadless: false,
 	removeHiddenElements: true,
 	removeUnusedStyles: true,
 	removeUnusedFonts: true,

+ 26 - 6
node-webdriver/single-file-webdriver.js

@@ -28,8 +28,10 @@ const chrome = require("selenium-webdriver/chrome");
 const { Builder } = require("selenium-webdriver");
 
 const SCRIPTS = [
+	"../lib/frame-tree/frame-tree.js",
 	"../lib/single-file/util/doc-util.js",
 	"../lib/single-file/util/doc-helper.js",
+	"../lib/single-file/util/timeout.js",
 	"../lib/single-file/vendor/css-tree.js",
 	"../lib/single-file/vendor/html-srcset-parser.js",
 	"../lib/single-file/vendor/css-minifier.js",
@@ -51,14 +53,30 @@ exports.getPageData = async options => {
 	let driver;
 	try {
 		const builder = new Builder();
-		builder.setChromeOptions(new chrome.Options().headless().addArguments("--disable-web-security"));
+		const chromeOptions = new chrome.Options();
+		if (options.browserHeadless === undefined || options.browserHeadless) {
+			chromeOptions.headless();
+		}
+		if (options.browserDisableWebSecurity === undefined || options.browserDisableWebSecurity) {
+			chromeOptions.addArguments("--disable-web-security");
+		}
+		if (options.userAgent) {
+			await chromeOptions.addArguments("--user-agent=" + JSON.stringify(options.userAgent));
+		}
+		builder.setChromeOptions(chromeOptions);
 		driver = await builder.forBrowser("chrome").build();
 		await driver.get(options.url);
+		let scripts = (await Promise.all(SCRIPTS.map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString()))).join("\n");
 		if (options.loadDeferredImages) {
-			SCRIPTS.unshift("../lib/lazy/web/web-lazy-loader-before");
+			scripts += "\ntry {\n" + fs.readFileSync(require.resolve("../lib/lazy/web/web-lazy-loader-before")) + "\n} catch (error) {}";
 		}
-		const scripts = await Promise.all(SCRIPTS.map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString()));
-		driver.executeScript(scripts.join("\n"));
+		const mainWindowHandle = driver.getWindowHandle();
+		const windowHandles = await driver.getAllWindowHandles();
+		await Promise.all(windowHandles.map(async windowHandle => {
+			await driver.switchTo().window(windowHandle);
+			driver.executeScript(scripts);
+		}));
+		await driver.switchTo().window(mainWindowHandle);
 		const pageData = await driver.executeAsyncScript(getPageDataScript(), options);
 		return pageData;
 	} finally {
@@ -75,8 +93,10 @@ function getPageDataScript() {
 
 	async function getPageData() {
 		options.insertSingleFileComment = true;
-		options.insertFaviconLink = true;		
-		options.removeFrames = true;
+		options.insertFaviconLink = true;
+		if (!options.saveRawPage && !options.removeFrames) {
+			options.framesData = await frameTree.getAsync(options);
+		}	
 		options.doc = document;
 		options.win = window;
 		const SingleFile = SingleFileBrowser.getClass();