Dhalang 0.4.0 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 835393ff0f501220a6c71edd20db19897e874b578f0921b37f70b5403840c928
4
- data.tar.gz: 285639cb8e59c0416d82a15c15ef7e656c00e5d2498b19f885d8635dafc05314
3
+ metadata.gz: 0b5a8f2427673c1a21cbbfcc3f9b3119c11890b9dbb21a1656ec970c14b4faef
4
+ data.tar.gz: d98cac7a86e5c12c0fc845e71a8810c3adaa3c583fb53a4139f2e1408231cceb
5
5
  SHA512:
6
- metadata.gz: aeacd63e036366dcd4f61da1b06fe65965378c6d4dba61de5401daa67f7f3f06744f01e7e4d24bd0d28a157e052eb5ff597695e978f73b9290594787ef48a482
7
- data.tar.gz: 1888bee0d744f67529fa7927740fbe057ceb73c571c3d06d7de74e24ee028f0769592bc7107bb1696e31e448fd02f7ead676b57f0a94bb2d8ee68192e1382c18
6
+ metadata.gz: 142fcef44cc80374790a915356c7eda5b5a5d91e532c44a4a81515f07454b9c2a7a04d34d53b3cb481fb0ed2f58cc6a0ed974a0ad4d244e9622f754e32e47624
7
+ data.tar.gz: 8379ed46f315e7cf3cfa657c2972fbdc3e34bee4255f2be741e84835c82536d4ace52290fb0197e1638a77667fa0a59309357ce62bca3887ba746c44665d8e9c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- Dhalang (0.3.1)
4
+ Dhalang (0.6.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2019 NielsS
3
+ Copyright (c) 2021 NielsS
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -3,11 +3,14 @@
3
3
  > Dhalang is a Ruby wrapper for Google's Puppeteer.
4
4
 
5
5
 
6
+
6
7
  ## Features
7
8
  * Generate PDFs from pages
8
9
  * Generate PDFs from html ( external images/stylesheets supported )
9
10
  * Capture a screenshot of a webpage
10
11
 
12
+
13
+
11
14
  ## Installation
12
15
  Add this line to your application's Gemfile:
13
16
 
@@ -40,41 +43,66 @@ All methods return a string containing the PDF or JPEG/PNG in binary.
40
43
 
41
44
 
42
45
 
43
- ## Custom configuration
44
- Depending on your use case you may want to change the way Dhalang interacts with Puppeteer. You can do this by passing a Hash with custom configuration parameters as last argument to any calls you make to the library.
46
+ ## Custom PDF/screenshot options
47
+ To override the default options that are set by Dhalang you can pass as last argument a hash with the custom options you want to set.
48
+
49
+ For example to set custom margins for PDFs:
50
+
51
+ `Dhalang::PDF.get_from_url("https://www.google.com", {margin: { top: 100, right: 100, bottom: 100, left: 100}})
52
+ `
53
+
54
+ For example to only take a screenshot of the visible part of the page:
55
+ `Dhalang::Screenshot.get_from_url_as_png("https://www.google.com", {fullPage: false})
56
+ `
57
+
58
+ A list of all possible PDF options that can be set, can be found at: https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagepdfoptions
59
+
60
+ A list of all possible screenshot options that can be set, can be found at: https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagescreenshotoptions
61
+
45
62
 
46
- So for example:
47
- `Dhalang::Screenshot.get_from_url_as_jpeg("https://www.google.com", {navigation_timeout: 20000})`
48
63
 
49
- Below table list the possible configuration parameters you can set:
64
+
65
+ ## Custom user options
66
+ You may want to change the way Dhalang interacts with Puppeteer in general. User options can be set by providing them in a hash as last argument to any calls you make to the library. Are you setting both custom PDF and user options? Then they should be passed as a single hash.
67
+
68
+ For example to set a custom navigation timeout:
69
+ `Dhalang::Screenshot.get_from_url_as_jpeg("https://www.google.com", {navigationTimeout: 20000})`
70
+
71
+ Below table lists all possible configuration parameters that can be set:
50
72
  | Key | Description | Default |
51
73
  |--------------------|-----------------------------------------------------------------------------------------|---------------------------------|
52
- | navigation_timeout | Amount of milliseconds until Puppeteer while timeout when navigating to the given page | 10000 |
53
- | user_agent | User agent to send with the request | Default Puppeteer one |
54
- | view_port | Custom viewport to use for the request | Default Puppeteer one |
55
- | http_authentication_credentials | Custom HTTP authentication credentials to use for the request | None |
74
+ | navigationTimeout | Amount of milliseconds until Puppeteer while timeout when navigating to the given page | 10000 |
75
+ | navigationWaitForSelector | If set, Dhalang will wait for the specified selector to appear before creating the screenshot or PDF | None |
76
+ | navigationWaitForXPath | If set, Dhalang will wait for the specified XPath to appear before creating the screenshot or PDF | None |
77
+ | userAgent | User agent to send with the request | Default Puppeteer one |
78
+ | isHeadless | Indicates if Chromium should be launched headless | true |
79
+ | isAutoHeight | When set to true the height of generated PDFs will be based on the scrollHeight property of the document body | false |
80
+ | viewPort | Custom viewport to use for the request | Default Puppeteer one |
81
+ | httpAuthenticationCredentials | Custom HTTP authentication credentials to use for the request | None |
82
+
56
83
 
57
- ## Examples
84
+
85
+ ## Examples of using Dhalang
58
86
  To return a PDF from a Rails controller you can do the following:
59
- ```
60
- def example_controller_method
61
- binary_pdf = Dhalang::PDF.get_from_url("https://www.google.com")
62
- send_data(binary_pdf, filename: 'pdfofgoogle.pdf', type: 'application/pdf')
87
+ ```ruby
88
+ def example_controller_method
89
+ binary_pdf = Dhalang::PDF.get_from_url("https://www.google.com")
90
+ send_data(binary_pdf, filename: 'pdfofgoogle.pdf', type: 'application/pdf')
63
91
  end
64
92
  ```
65
93
 
66
94
  To return a PNG from a Rails controller you can do the following:
67
- ```
68
- def example_controller_method
69
- binary_png = Dhalang::Screenshot.get_from_url_as_png("https://www.google.com")
70
- send_data(binary_png, filename: 'screenshotofgoogle.png', type: 'image/png')
95
+ ```ruby
96
+ def example_controller_method
97
+ binary_png = Dhalang::Screenshot.get_from_url_as_png("https://www.google.com")
98
+ send_data(binary_png, filename: 'screenshotofgoogle.png', type: 'image/png')
71
99
  end
72
100
  ```
73
101
 
74
102
  To return a JPEG from a Rails controller you can do the following:
75
- ```
76
- def example_controller_method
77
- binary_jpeg = Dhalang::Screenshot.get_from_url_as_jpeg("https://www.google.com")
78
- send_data(binary_jpeg, filename: 'screenshotofgoogle.jpeg', type: 'image/jpeg')
103
+ ```ruby
104
+ def example_controller_method
105
+ binary_jpeg = Dhalang::Screenshot.get_from_url_as_jpeg("https://www.google.com")
106
+ send_data(binary_jpeg, filename: 'screenshotofgoogle.jpeg', type: 'image/jpeg')
79
107
  end
80
108
  ```
@@ -0,0 +1 @@
1
+ class DhalangError < StandardError; end
@@ -4,22 +4,20 @@ module Dhalang
4
4
  NODE_MODULES_PATH = Dir.pwd + '/node_modules/'.freeze
5
5
  private_constant :NODE_MODULES_PATH
6
6
 
7
- NAVIGATION_TIMEOUT = 10000
8
- private_constant :NAVIGATION_TIMEOUT
9
-
10
- NAVIGATION_WAIT_UNTIL = 'load'
11
- private_constant :NAVIGATION_WAIT_UNTIL
12
-
13
- USER_AGENT = ''
14
- private_constant :USER_AGENT
15
-
16
- VIEW_PORT = ''
17
- private_constant :VIEW_PORT
18
-
19
- HTTP_AUTHENTICATION_CREDENTIALS = ''
20
- private_constant :HTTP_AUTHENTICATION_CREDENTIALS
7
+ USER_OPTIONS = {
8
+ navigationTimeout: 10000,
9
+ navigationWaitUntil: 'load',
10
+ navigationWaitForSelector: '',
11
+ navigationWaitForXPath: '',
12
+ userAgent: '',
13
+ isHeadless: true,
14
+ viewPort: '',
15
+ httpAuthenticationCredentials: '',
16
+ isAutoHeight: false
17
+ }
18
+ private_constant :USER_OPTIONS
21
19
 
22
- DEFAULT_OPTIONS = {
20
+ DEFAULT_PDF_OPTIONS = {
23
21
  scale: 1,
24
22
  displayHeaderFooter: false,
25
23
  headerTemplate: '',
@@ -31,9 +29,25 @@ module Dhalang
31
29
  width: '',
32
30
  height: '',
33
31
  margin: { top: 36, right: 36, bottom: 20, left: 36 },
34
- preferCSSPageSiz: false
32
+ preferCSSPageSize: true,
33
+ omitBackground: false
34
+ }
35
+ private_constant :DEFAULT_PDF_OPTIONS
36
+
37
+ DEFAULT_PNG_OPTIONS = {
38
+ fullPage: true,
39
+ clip: nil,
40
+ omitBackground: false
41
+ }
42
+ private_constant :DEFAULT_PNG_OPTIONS
43
+
44
+ DEFAULT_JPEG_OPTIONS = {
45
+ quality: 100,
46
+ fullPage: true,
47
+ clip: nil,
48
+ omitBackground: false
35
49
  }
36
- private_constant :DEFAULT_OPTIONS
50
+ private_constant :DEFAULT_JPEG_OPTIONS
37
51
 
38
52
 
39
53
  # Launches a new Node process, executing the (Puppeteer) script under the given script_path.
@@ -45,7 +59,17 @@ module Dhalang
45
59
  # @param [Object] options Set of options to use, configurable by the user.
46
60
  def self.visit(page_url, script_path, temp_file_path, temp_file_extension, options)
47
61
  configuration = create_configuration(page_url, script_path, temp_file_path, temp_file_extension, options)
48
- Kernel.system("node #{script_path} #{Shellwords.escape(configuration)}")
62
+
63
+ command = "node #{script_path} #{Shellwords.escape(configuration)}"
64
+
65
+ Open3.popen2e(command) do |_stdin, stdouterr, wait|
66
+ return nil if wait.value.success?
67
+
68
+ output = stdouterr.read.strip
69
+ output = nil if output == ''
70
+ message = output || "Exited with status #{wait.value.exitstatus}"
71
+ raise DhalangError, message
72
+ end
49
73
  end
50
74
 
51
75
 
@@ -62,16 +86,10 @@ module Dhalang
62
86
  tempFilePath: temp_file_path,
63
87
  puppeteerPath: NODE_MODULES_PATH,
64
88
  imageType: temp_file_extension,
65
- userOptions: {
66
- navigationParameters: {
67
- timeout: options.has_key?(:navigation_timeout) ? options[:navigation_timeout] : NAVIGATION_TIMEOUT,
68
- waitUntil: NAVIGATION_WAIT_UNTIL
69
- },
70
- userAgent: options.has_key?(:user_agent) ? options[:user_agent] : USER_AGENT,
71
- viewPort: options.has_key?(:view_port) ? options[:view_port] : VIEW_PORT,
72
- httpAuthenticationCredentials: options.has_key?(:http_authentication_credentials) ? options[:http_authentication_credentials] : HTTP_AUTHENTICATION_CREDENTIALS
73
- },
74
- pdfOptions: DEFAULT_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value] }.to_h
89
+ userOptions: USER_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value]}.to_h,
90
+ pdfOptions: DEFAULT_PDF_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value] }.to_h,
91
+ pngOptions: DEFAULT_PNG_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value] }.to_h,
92
+ jpegOptions: DEFAULT_JPEG_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value] }.to_h
75
93
  }.to_json
76
94
  end
77
95
  end
@@ -1,3 +1,3 @@
1
1
  module Dhalang
2
- VERSION = "0.4.0"
2
+ VERSION = "0.6.2"
3
3
  end
data/lib/Dhalang.rb CHANGED
@@ -4,9 +4,11 @@ module Dhalang
4
4
  require_relative 'Dhalang/version'
5
5
  require_relative 'Dhalang/url_utils'
6
6
  require_relative 'Dhalang/file_utils'
7
+ require_relative 'Dhalang/error'
7
8
  require_relative 'Dhalang/puppeteer'
8
9
  require 'uri'
9
10
  require 'tempfile'
10
11
  require 'shellwords'
11
12
  require 'json'
12
- end
13
+ require 'open3'
14
+ end
data/lib/Screenshot.rb CHANGED
@@ -33,6 +33,7 @@ module Dhalang
33
33
  # @return [String] The screenshot that was taken as binary.
34
34
  private_class_method def self.get(url, image_type, options)
35
35
  UrlUtils.validate(url)
36
+ validate_options(options)
36
37
  temp_file = FileUtils.create_temp_file(image_type)
37
38
  begin
38
39
  Puppeteer.visit(url, PUPPETEER_SCRIPT_PATH, temp_file.path, image_type, options)
@@ -42,5 +43,15 @@ module Dhalang
42
43
  end
43
44
  return binary_image_content
44
45
  end
46
+
47
+ # Raises an error if the given options might conflict with the Puppeteer configuration.
48
+ #
49
+ # @param [Hash] options The options to validate
50
+ private_class_method def self.validate_options(options)
51
+ symbolized_options = options.transform_keys(&:to_sym)
52
+ if symbolized_options.has_key?(:type)
53
+ raise DhalangError, 'Invalid option set: "type"'
54
+ end
55
+ end
45
56
  end
46
57
  end
data/lib/js/dhalang.js CHANGED
@@ -4,14 +4,23 @@
4
4
  * @property {string} tempFilePath - The path of the tempfile to write the screenshot/pdf to.
5
5
  * @property {string} puppeteerModulePath - The path of the Puppeteer module.
6
6
  * @property {string} imageType - The type of image to save ( undefined for pdfgenerator ).
7
- * @property {UserOptions} userOptions - User defined and default parameters to use when navigating to pages with Puppeteer.
7
+ * @property {UserOptions} userOptions - User defined and default parameters to use when navigating to pages.
8
+ * @property {Object} pdfOptions - User defined and default parameters to use when creating PDFs. Note: Do not use directly, rather use {@link getConfiguredPdfOptions}.
9
+ * @property {Object} pngOptions - User defined and default parameters to use when creating PNGs.
10
+ * @property {Object} jpegOptions - User defined and default parameters to use when creating JPEGs.
8
11
  */
12
+
9
13
  /**
10
14
  * @typedef {Object} UserOptions
11
- * @property {NavigationParameters} navigationParameters - The parameters to use when navigating to pages with Puppeteer.
12
- * @property {string} userAgent - The user agent to send with requests.
13
- * @property {Object} viewPort - The view port to use.
14
- * @property {Object} httpAuthenticationCredentials - The credentials to use for HTTP authentication.
15
+ * @property {number} navigationTimeout - Maximum in milliseconds until navigation times out, we use a default of 10 seconds as timeout.
16
+ * @property {string} navigationWaitUntil - Determines when the navigation was finished, we wait here until the Window.load event is fired ( meaning all images, stylesheet, etc was loaded ).
17
+ * @property {string} navigationWaitForSelector - If set, specifies the selector Puppeteer should wait for to appear before continuing.
18
+ * @property {string} navigationWaitForXPath - If set, specifies the XPath Puppeteer should wait for to appear before continuing.
19
+ * @property {string} userAgent - The user agent to send with requests.
20
+ * @property {boolean} isHeadless - Indicates if Puppeteer should launch Chromium in headless mode.
21
+ * @property {Object} viewPort - The view port to use.
22
+ * @property {Object} httpAuthenticationCredentials - The credentials to use for HTTP authentication.
23
+ * @property {boolean} isAutoHeight - The height is automatically set
15
24
  */
16
25
 
17
26
  /**
@@ -20,6 +29,11 @@
20
29
  * @property {string} waituntil - Determines when the navigation was finished, we wait here until the Window.load event is fired ( meaning all images, stylesheet, etc was loaded ).
21
30
  */
22
31
 
32
+ /**
33
+ * @typedef {Object} WaitingParameters
34
+ * @property {number} timeout - Maximum in milliseconds until navigation times out, we use a default of 10 seconds as timeout.
35
+ */
36
+
23
37
  /**
24
38
  * Parses the given configuration process argument from Ruby to a JS object.
25
39
  * @returns {Configuration}
@@ -31,33 +45,102 @@ exports.getConfiguration = function () {
31
45
 
32
46
  /**
33
47
  * Launches Puppeteer and returns its instance.
34
- * @param {string} puppeteerModulePath - The path puppeteer is under.
35
- * @returns {Promise<Object>}
48
+ * @param {UserOptions} configuration - The configuration to use.
49
+ * @returns {Promise<Object>}
36
50
  * The launched instance of Puppeteer.
37
51
  */
38
- exports.launchPuppeteer = async function (puppeteerModulePath) {
39
- module.paths.push(puppeteerModulePath);
52
+ exports.launchPuppeteer = async function (configuration) {
53
+ module.paths.push(configuration.puppeteerPath);
40
54
  const puppeteer = require('puppeteer');
55
+ const launchArgs = ['--no-sandbox', '--disable-setuid-sandbox'];
41
56
  return await puppeteer.launch({
42
- args: ['--no-sandbox', '--disable-setuid-sandbox']
57
+ args: launchArgs,
58
+ headless: configuration.userOptions.isHeadless
43
59
  });
44
60
  }
45
61
 
46
62
  /**
47
- * Configures the given Puppeteer page.
63
+ * Configures the given Puppeteer page object.
64
+ * @param {Object} page - The Puppeteer page object to configure.
65
+ * @param {UserOptions} userOptions - The user options to use.
66
+ */
67
+ exports.configure = async function (page, userOptions) {
68
+ if (userOptions.userAgent !== "") {
69
+ await page.setUserAgent(userOptions.userAgent)
70
+ }
71
+
72
+ if (userOptions.viewPort !== "") {
73
+ await page.setViewport(userOptions.viewPort)
74
+ }
75
+
76
+ if (userOptions.httpAuthenticationCredentials !== "") {
77
+ await page.authenticate(userOptions.httpAuthenticationCredentials)
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Makes the Puppeteer page object open the url with the specified navigation logic as specified in the given configuration.
83
+ * @param {Object} page - The Puppeteer page object to use for navigation.
84
+ * @param {Configuration} configuration - The configuration to use.
85
+ */
86
+ exports.navigate = async function (page, configuration) {
87
+ const navigationWaitForSelector = configuration.userOptions.navigationWaitForSelector;
88
+ const navigationWaitForXPath = configuration.userOptions.navigationWaitForXPath;
89
+
90
+ await page.goto(configuration.webPageUrl, this.getNavigationParameters(configuration));
91
+
92
+ if (navigationWaitForSelector !== "") {
93
+ await page.waitForSelector(navigationWaitForSelector, this.getWaitingParameters(configuration));
94
+ } else if (navigationWaitForXPath !== "") {
95
+ await page.waitForXPath(navigationWaitForXPath, this.getWaitingParameters(configuration));
96
+ } else {
97
+ await page.waitForTimeout(250);
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Returns the PDF options to pass to Puppeteer based on the set user options and the documents body.
48
103
  * @param {Object} page - The Puppeteer page to configure.
49
104
  * @param {UserOptions} configuration - The configuration to use.
105
+ * @returns {Object} - pdfOptions
50
106
  */
51
- exports.configurePage = async function (page, configuration) {
52
- if (configuration.userAgent !== "") {
53
- await page.setUserAgent(configuration.userAgent)
107
+ exports.getConfiguredPdfOptions = async function (page, configuration) {
108
+ const pdfOptions = configuration.pdfOptions
109
+
110
+ if (configuration.userOptions.isAutoHeight === true) {
111
+ const pageHeight = await page.evaluate(() => {
112
+ return Math.max(document.body.scrollHeight, document.body.offsetHeight);
113
+ })
114
+ if (pageHeight) {
115
+ pdfOptions['height'] = pageHeight + 1 + 'px'
116
+ }
54
117
  }
55
118
 
56
- if (configuration.viewPort !== "") {
57
- await page.setViewport(configuration.viewPort)
119
+ return pdfOptions
120
+ }
121
+
122
+ /**
123
+ * Extracts the navigation parameters from the configuration in a format that is usable by Puppeteer.
124
+ * @param {Configuration} configuration - The configuration to extract the navigation parameters from.
125
+ * @returns {NavigationParameters}
126
+ * The extracted navigation parameters.
127
+ */
128
+ exports.getNavigationParameters = function (configuration) {
129
+ return {
130
+ timeout: configuration.userOptions.navigationTimeout,
131
+ waituntil: configuration.userOptions.navigationWaitUntil
58
132
  }
133
+ }
59
134
 
60
- if (configuration.httpAuthenticationCredentials !== "") {
61
- await page.authenticate(configuration.authenticationCredentials)
135
+
136
+ /**
137
+ * Extracts the waiting parameters from the configuration in a format that is usable by Puppeteer.
138
+ * @param {Configuration} configuration - The configuration to extract the waiting parameters from.
139
+ * @returns {WaitingParameters}
140
+ * The extracted waiting parameters.
141
+ */
142
+ exports.getWaitingParameters = function (configuration) {
143
+ return {
144
+ timeout: configuration.userOptions.navigationTimeout
62
145
  }
63
- }
146
+ }
@@ -6,19 +6,20 @@ const createPdf = async () => {
6
6
 
7
7
  let browser;
8
8
  try {
9
- browser = await dhalang.launchPuppeteer(configuration.puppeteerPath);
9
+ browser = await dhalang.launchPuppeteer(configuration);
10
10
  const page = await browser.newPage();
11
- await dhalang.configurePage(page, configuration.userOptions);
12
- await page.goto(configuration.webPageUrl, configuration.userOptions.navigationParameters);
13
- await page.waitForTimeout(250);
11
+ await dhalang.configure(page, configuration.userOptions);
12
+ await dhalang.navigate(page, configuration);
13
+ const pdfOptions = await dhalang.getConfiguredPdfOptions(page, configuration);
14
14
  await page.pdf({
15
15
  ...{
16
16
  path: configuration.tempFilePath
17
17
  },
18
- ...configuration.pdfOptions
18
+ ...pdfOptions
19
19
  });
20
20
  } catch (error) {
21
- console.log(error.message);
21
+ console.error(error.message);
22
+ process.exit(1);
22
23
  } finally {
23
24
  if (browser) {
24
25
  browser.close();
@@ -1,23 +1,27 @@
1
1
  'use strict';
2
2
  const dhalang = require('./dhalang')
3
3
 
4
- const createPdf = async () => {
4
+ const createScreenshot = async () => {
5
5
  const configuration = dhalang.getConfiguration();
6
6
 
7
7
  let browser;
8
8
  try {
9
- browser = await dhalang.launchPuppeteer(configuration.puppeteerPath);
9
+ browser = await dhalang.launchPuppeteer(configuration);
10
10
  const page = await browser.newPage();
11
- await dhalang.configurePage(page, configuration.userOptions);
12
- await page.goto(configuration.webPageUrl, configuration.userOptions.navigationParameters);
13
- await page.waitForTimeout(250);
11
+ await dhalang.configure(page, configuration.userOptions);
12
+ await dhalang.navigate(page, configuration);
13
+
14
+ const screenshotOptions = configuration.imageType === "png" ? configuration.pngOptions : configuration.jpegOptions
14
15
  await page.screenshot({
15
- path: configuration.tempFilePath,
16
- type: configuration.imageType,
17
- fullPage: true
16
+ ...{
17
+ path: configuration.tempFilePath,
18
+ type: configuration.imageType,
19
+ },
20
+ ...screenshotOptions
18
21
  });
19
22
  } catch (error) {
20
- console.log(error.message);
23
+ console.error(error.message);
24
+ process.exit(1);
21
25
  } finally {
22
26
  if (browser) {
23
27
  browser.close();
@@ -25,4 +29,4 @@ const createPdf = async () => {
25
29
  process.exit();
26
30
  }
27
31
  };
28
- createPdf();
32
+ createScreenshot();