فهرست منبع

added support of lazy loaded images and bypass CORS

Gildas 7 سال پیش
والد
کامیت
d4b975aada
1فایلهای تغییر یافته به همراه14 افزوده شده و 4 حذف شده
  1. 14 4
      node-webdriver/single-file-webdriver.js

+ 14 - 4
node-webdriver/single-file-webdriver.js

@@ -24,6 +24,7 @@
 /* global require, exports */
 const fs = require("fs");
 
+const chrome = require("selenium-webdriver/chrome");
 const { Builder } = require("selenium-webdriver");
 
 const SCRIPTS = [
@@ -49,9 +50,15 @@ const SCRIPTS = [
 exports.getPageData = async options => {
 	let driver;
 	try {
-		driver = await new Builder().forBrowser(options.webdriverBrowser).build();
+		const builder = new Builder();
+		builder.setChromeOptions(new chrome.Options().headless().addArguments("--disable-web-security"));
+		driver = await builder.forBrowser("chrome").build();
 		await driver.get(options.url);
-		await Promise.all(SCRIPTS.map(scriptPath => driver.executeScript(fs.readFileSync(require.resolve(scriptPath)).toString())));
+		if (options.loadDeferredImages) {
+			SCRIPTS.unshift("../lib/lazy/web/web-lazy-loader-before");
+		}
+		const scripts = await Promise.all(SCRIPTS.map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString()));
+		driver.executeScript(scripts.join("\n"));
 		const pageData = await driver.executeAsyncScript(getPageDataScript(), options);
 		return pageData;
 	} finally {
@@ -67,13 +74,16 @@ function getPageDataScript() {
 	getPageData().then(pageData => callback(pageData))
 
 	async function getPageData() {
+		options.insertSingleFileComment = true;
+		options.insertFaviconLink = true;		
 		options.removeFrames = true;
+		options.doc = document;
+		options.win = window;
 		const SingleFile = SingleFileBrowser.getClass();
 		const singleFile = new SingleFile(options);
 		await singleFile.initialize();
 		await singleFile.run();
-		const pageData = await singleFile.getPageData();
-		return pageData;
+		return singleFile.getPageData();			
 	}
 	`;
 }