Преглед изворни кода

added support of viewport size

Gildas пре 7 година
родитељ
комит
17027c505e
4 измењених фајлова са 32 додато и 1 уклоњено
  1. 12 1
      cli/back-ends/jsdom.js
  2. 6 0
      cli/back-ends/puppeteer.js
  3. 8 0
      cli/back-ends/webdriver.js
  4. 6 0
      cli/single-file.js

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

@@ -87,7 +87,18 @@ exports.getPageData = async options => {
 			"User-Agent": options.userAgent
 		}
 	})).body.toString();
-	const dom = new JSDOM(pageContent, { url: options.url, virtualConsole: new VirtualConsole(), userAgent: options.userAgent });
+	const jsdomOptions = {
+		url: options.url,
+		virtualConsole: new VirtualConsole(),
+		userAgent: options.userAgent
+	};
+	if (options.browserWidth && options.browserHeight) {
+		jsdomOptions.beforeParse = function (window) {
+			window.outerWidth = window.innerWidth = options.browserWidth;
+			window.outerHeight = window.innerHeight = options.browserHeight;
+		};
+	}
+	const dom = new JSDOM(pageContent, jsdomOptions);
 	options.win = dom.window;
 	options.doc = dom.window.document;
 	options.saveRawPage = true;

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

@@ -68,6 +68,12 @@ exports.getPageData = async options => {
 		if (options.userAgent) {
 			await page.setUserAgent(options.userAgent);
 		}
+		if (options.browserWidth && options.browserHeight) {
+			await page.setViewport({
+				width: options.browserWidth,
+				height: options.browserHeight
+			});
+		}
 		if (options.browserBypassCSP === undefined || options.browserBypassCSP) {
 			await page.setBypassCSP(true);
 		}

+ 8 - 0
cli/back-ends/webdriver.js

@@ -65,6 +65,14 @@ exports.getPageData = async options => {
 		}
 		builder.setChromeOptions(chromeOptions);
 		driver = await builder.forBrowser("chrome").build();
+		if (options.browserWidth && options.browserHeight) {
+			const window = driver.manage().window();
+			if (window.setRect) {
+				window.setRect(options.browserHeight, options.browserWidth);
+			} else if (window.setSize) {
+				window.setSize(options.browserWidth, options.browserHeight);
+			}
+		}
 		await driver.get(options.url);
 		let scripts = (await Promise.all(SCRIPTS.map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString()))).join("\n");
 		if (options.loadDeferredImages) {

+ 6 - 0
cli/single-file.js

@@ -35,6 +35,8 @@ const args = require("yargs")
 		"back-end": "puppeteer",
 		"browser-headless": true,
 		"browser-executable-path": "chrome",
+		"browser-width": 1280,
+		"browser-height": 720,
 		"compress-CSS": true,
 		"compress-HTML": true,
 		"group-duplicate-images": true,
@@ -61,6 +63,10 @@ const args = require("yargs")
 	.boolean("browser-headless")
 	.options("browser-executable-path", { description: "Path to chrome/chromium executable (puppeteer)" })
 	.string("browser-executable-path")
+	.options("browser-width", { description: "Width of the browser viewport in pixels" })
+	.number("browser-width")
+	.options("browser-height", { description: "Height of the browser viewport in pixels" })
+	.number("browser-height")
 	.options("compress-CSS", { description: "Compress CSS stylesheets" })
 	.boolean("compress-CSS")
 	.options("compress-HTML", { description: "Compress HTML content" })