Dhalang 0.6.4 → 0.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/build.yml +20 -0
- data/.github/workflows/publish.yml +23 -0
- data/.gitignore +1 -0
- data/Gemfile.lock +15 -13
- data/README.md +16 -18
- data/lib/Dhalang/puppeteer.rb +4 -7
- data/lib/Dhalang/version.rb +1 -1
- data/lib/Screenshot.rb +24 -7
- data/lib/js/dhalang.js +2 -2
- data/lib/js/screenshot-generator.js +2 -2
- data/package-lock.json +886 -701
- data/package.json +2 -2
- metadata +5 -4
- data/.travis.yml +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 580f62daf557818f3de686d07fc10f3fa07705025ea562e9e29130a7d0387660
|
4
|
+
data.tar.gz: e237333306eac8cfc4c5a9fd0d1cd6d59a1f99dcee0a632cc71e0e5ae4b44b8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8054c0e43bd1ff71d6072ccf2cc4f3c98cf2a0a5f073c5e4b8cd75c2fc00c63cca60ab505d461533fae147e4da4b6786109ab0f00e70eaa4cfca520c19f1874e
|
7
|
+
data.tar.gz: 7e5a64263595fec4f5e3c47a13f4a68507b94ee8f3b79e1fa2c4445b13e756deeb374944f1d406f65c2fae6e1ccf76de20a5a8b0f7ce5b8691592265f1523fa2
|
@@ -0,0 +1,20 @@
|
|
1
|
+
name: Build
|
2
|
+
on:
|
3
|
+
- push
|
4
|
+
- pull_request
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
steps:
|
9
|
+
- uses: actions/checkout@v4
|
10
|
+
- uses: ruby/setup-ruby@v1
|
11
|
+
with:
|
12
|
+
ruby-version: 3.1.3
|
13
|
+
bundler-cache: true
|
14
|
+
- uses: actions/setup-node@v4
|
15
|
+
with:
|
16
|
+
node-version: 18
|
17
|
+
cache: 'npm'
|
18
|
+
cache-dependency-path: '**/package-lock.json'
|
19
|
+
- run: npm ci
|
20
|
+
- run: bundle exec rake spec
|
@@ -0,0 +1,23 @@
|
|
1
|
+
name: Publish
|
2
|
+
on:
|
3
|
+
release:
|
4
|
+
types:
|
5
|
+
- published
|
6
|
+
jobs:
|
7
|
+
publish:
|
8
|
+
runs-on: ubuntu-latest
|
9
|
+
env:
|
10
|
+
GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
|
11
|
+
steps:
|
12
|
+
- uses: actions/checkout@v4
|
13
|
+
- uses: ruby/setup-ruby@v1
|
14
|
+
with:
|
15
|
+
ruby-version: 3.1.3
|
16
|
+
bundler-cache: true
|
17
|
+
- uses: actions/setup-node@v4
|
18
|
+
with:
|
19
|
+
node-version: 18
|
20
|
+
- run: npm ci
|
21
|
+
- run: bundle exec rake spec
|
22
|
+
- run: gem build -o Dhalang.gem Dhalang.gemspec
|
23
|
+
- run: gem push Dhalang.gem
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
Dhalang (0.6.
|
4
|
+
Dhalang (0.6.6)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -11,32 +11,34 @@ GEM
|
|
11
11
|
diff-lcs (1.5.0)
|
12
12
|
fastimage (2.2.6)
|
13
13
|
hashery (2.1.2)
|
14
|
-
pdf-reader (2.9.
|
14
|
+
pdf-reader (2.9.2)
|
15
15
|
Ascii85 (~> 1.0)
|
16
16
|
afm (~> 0.2.1)
|
17
17
|
hashery (~> 2.0)
|
18
18
|
ruby-rc4
|
19
19
|
ttfunk
|
20
20
|
rake (13.0.6)
|
21
|
-
rspec (3.
|
22
|
-
rspec-core (~> 3.
|
23
|
-
rspec-expectations (~> 3.
|
24
|
-
rspec-mocks (~> 3.
|
25
|
-
rspec-core (3.
|
26
|
-
rspec-support (~> 3.
|
27
|
-
rspec-expectations (3.
|
21
|
+
rspec (3.11.0)
|
22
|
+
rspec-core (~> 3.11.0)
|
23
|
+
rspec-expectations (~> 3.11.0)
|
24
|
+
rspec-mocks (~> 3.11.0)
|
25
|
+
rspec-core (3.11.0)
|
26
|
+
rspec-support (~> 3.11.0)
|
27
|
+
rspec-expectations (3.11.0)
|
28
28
|
diff-lcs (>= 1.2.0, < 2.0)
|
29
|
-
rspec-support (~> 3.
|
30
|
-
rspec-mocks (3.
|
29
|
+
rspec-support (~> 3.11.0)
|
30
|
+
rspec-mocks (3.11.1)
|
31
31
|
diff-lcs (>= 1.2.0, < 2.0)
|
32
|
-
rspec-support (~> 3.
|
33
|
-
rspec-support (3.
|
32
|
+
rspec-support (~> 3.11.0)
|
33
|
+
rspec-support (3.11.0)
|
34
34
|
ruby-rc4 (0.1.5)
|
35
35
|
ttfunk (1.7.0)
|
36
36
|
|
37
37
|
PLATFORMS
|
38
38
|
arm64-darwin-21
|
39
39
|
x86-mingw32
|
40
|
+
x86_64-darwin-20
|
41
|
+
x86_64-linux
|
40
42
|
|
41
43
|
DEPENDENCIES
|
42
44
|
Dhalang!
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Dhalang [](https://github.com/NielsSteensma/Dhalang/actions/workflows/build.yml)
|
2
2
|
|
3
3
|
> Dhalang is a Ruby wrapper for Google's Puppeteer.
|
4
4
|
|
@@ -24,7 +24,7 @@ Install puppeteer in your application's root directory:
|
|
24
24
|
|
25
25
|
$ npm install puppeteer
|
26
26
|
|
27
|
-
<sub>
|
27
|
+
<sub>Dhalang and Puppeteer require Node ≥ 18 and Puppeteer ≥ 22</sub>
|
28
28
|
## Usage
|
29
29
|
__Get a PDF of a website url__
|
30
30
|
```ruby
|
@@ -39,14 +39,20 @@ Dhalang::PDF.get_from_html("<html><head></head><body><h1>examplestring</h1></bod
|
|
39
39
|
|
40
40
|
__Get a PNG screenshot of a website__
|
41
41
|
```ruby
|
42
|
-
Dhalang::Screenshot.
|
42
|
+
Dhalang::Screenshot.get_from_url("https://www.google.com", :png)
|
43
43
|
```
|
44
44
|
|
45
45
|
__Get a JPEG screenshot of a website__
|
46
46
|
```ruby
|
47
|
-
Dhalang::Screenshot.
|
47
|
+
Dhalang::Screenshot.get_from_url("https://www.google.com", :jpeg)
|
48
48
|
```
|
49
|
-
|
49
|
+
|
50
|
+
__Get a WEBP screenshot of a website__
|
51
|
+
```ruby
|
52
|
+
Dhalang::Screenshot.get_from_url("https://www.google.com", :webp)
|
53
|
+
```
|
54
|
+
|
55
|
+
All methods return a string containing the PDF or JPEG/PNG/WEBP in binary.
|
50
56
|
|
51
57
|
|
52
58
|
|
@@ -60,7 +66,7 @@ Dhalang::PDF.get_from_url("https://www.google.com", {margin: { top: 100, right:
|
|
60
66
|
|
61
67
|
For example to only take a screenshot of the visible part of the page:
|
62
68
|
```ruby
|
63
|
-
Dhalang::Screenshot.
|
69
|
+
Dhalang::Screenshot.get_from_url("https://www.google.com", :webp, {fullPage: false})
|
64
70
|
```
|
65
71
|
|
66
72
|
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
|
@@ -80,7 +86,7 @@ You may want to change the way Dhalang interacts with Puppeteer in general. User
|
|
80
86
|
|
81
87
|
For example to set a custom navigation timeout:
|
82
88
|
```ruby
|
83
|
-
Dhalang::Screenshot.
|
89
|
+
Dhalang::Screenshot.get_from_url("https://www.google.com", :jpeg, {navigationTimeout: 20000})
|
84
90
|
```
|
85
91
|
|
86
92
|
Below table lists all possible configuration parameters that can be set:
|
@@ -107,18 +113,10 @@ def example_controller_method
|
|
107
113
|
end
|
108
114
|
```
|
109
115
|
|
110
|
-
To return a
|
116
|
+
To return a screenshot from a Rails controller you can do the following:
|
111
117
|
```ruby
|
112
118
|
def example_controller_method
|
113
|
-
binary_png = Dhalang::Screenshot.
|
119
|
+
binary_png = Dhalang::Screenshot.get_from_url("https://www.google.com", :png)
|
114
120
|
send_data(binary_png, filename: 'screenshotofgoogle.png', type: 'image/png')
|
115
121
|
end
|
116
|
-
```
|
117
|
-
|
118
|
-
To return a JPEG from a Rails controller you can do the following:
|
119
|
-
```ruby
|
120
|
-
def example_controller_method
|
121
|
-
binary_jpeg = Dhalang::Screenshot.get_from_url_as_jpeg("https://www.google.com")
|
122
|
-
send_data(binary_jpeg, filename: 'screenshotofgoogle.jpeg', type: 'image/jpeg')
|
123
|
-
end
|
124
|
-
```
|
122
|
+
```
|
data/lib/Dhalang/puppeteer.rb
CHANGED
@@ -38,18 +38,15 @@ module Dhalang
|
|
38
38
|
}
|
39
39
|
private_constant :DEFAULT_PDF_OPTIONS
|
40
40
|
|
41
|
-
|
41
|
+
DEFAULT_SCREENSHOT_OPTIONS = {
|
42
42
|
fullPage: true,
|
43
43
|
clip: nil,
|
44
44
|
omitBackground: false
|
45
45
|
}
|
46
|
-
private_constant :
|
46
|
+
private_constant :DEFAULT_SCREENSHOT_OPTIONS
|
47
47
|
|
48
48
|
DEFAULT_JPEG_OPTIONS = {
|
49
|
-
quality: 100
|
50
|
-
fullPage: true,
|
51
|
-
clip: nil,
|
52
|
-
omitBackground: false
|
49
|
+
quality: 100
|
53
50
|
}
|
54
51
|
private_constant :DEFAULT_JPEG_OPTIONS
|
55
52
|
|
@@ -92,7 +89,7 @@ module Dhalang
|
|
92
89
|
imageType: temp_file_extension,
|
93
90
|
userOptions: USER_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value]}.to_h,
|
94
91
|
pdfOptions: DEFAULT_PDF_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value] }.to_h,
|
95
|
-
|
92
|
+
screenshotOptions: DEFAULT_SCREENSHOT_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value] }.to_h,
|
96
93
|
jpegOptions: DEFAULT_JPEG_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value] }.to_h
|
97
94
|
}.to_json
|
98
95
|
end
|
data/lib/Dhalang/version.rb
CHANGED
data/lib/Screenshot.rb
CHANGED
@@ -2,8 +2,11 @@ module Dhalang
|
|
2
2
|
# Allows consumers of this library to take screenshots with Puppeteer.
|
3
3
|
class Screenshot
|
4
4
|
PUPPETEER_SCRIPT_PATH = File.expand_path('../js/screenshot-generator.js', __FILE__).freeze
|
5
|
+
IMAGE_TYPES = [:jpeg, :png, :webp].freeze
|
5
6
|
private_constant :PUPPETEER_SCRIPT_PATH
|
7
|
+
private_constant :IMAGE_TYPES
|
6
8
|
|
9
|
+
# <b>DEPRECATED:</b> Please use `get_from_url(url, :jpeg)` instead.
|
7
10
|
# Captures a full JPEG screenshot of the webpage under the given url.
|
8
11
|
#
|
9
12
|
# @param [String] url The url to take a screenshot of.
|
@@ -11,9 +14,11 @@ module Dhalang
|
|
11
14
|
#
|
12
15
|
# @return [String] the screenshot that was taken as binary.
|
13
16
|
def self.get_from_url_as_jpeg(url, options = {})
|
14
|
-
|
17
|
+
warn "[DEPRECATION] `get_from_url_as_jpeg` is deprecated. Use `get_from_url(url, :jpeg)` instead."
|
18
|
+
get_from_url(url, :jpeg, options)
|
15
19
|
end
|
16
20
|
|
21
|
+
# <b>DEPRECATED:</b> Please use `get_from_url(url, :png)` instead.
|
17
22
|
# Captures a full PNG screenshot of the webpage under the given url.
|
18
23
|
#
|
19
24
|
# @param [String] url The url to take a screenshot of.
|
@@ -21,19 +26,22 @@ module Dhalang
|
|
21
26
|
#
|
22
27
|
# @return [String] The screenshot that was taken as binary.
|
23
28
|
def self.get_from_url_as_png(url, options = {})
|
24
|
-
|
29
|
+
warn "[DEPRECATION] `get_from_url_as_png` is deprecated. Use `get_from_url(url, :png)` instead."
|
30
|
+
get_from_url(url, :png, options)
|
25
31
|
end
|
26
|
-
|
27
|
-
#
|
32
|
+
|
33
|
+
# Captures ascreenshot of the webpage under the given url.
|
28
34
|
#
|
29
35
|
# @param [String] url The url to take a screenshot of.
|
30
|
-
# @param [String] image_type The image type to use for storing the screenshot.
|
31
|
-
# @param [Hash] options
|
36
|
+
# @param [String] image_type The image type (JPEG/PNG/WEBP) to use for storing the screenshot.
|
37
|
+
# @param [Hash] options User configurable options.
|
32
38
|
#
|
33
39
|
# @return [String] The screenshot that was taken as binary.
|
34
|
-
|
40
|
+
def self.get_from_url(url, image_type, options = {})
|
35
41
|
UrlUtils.validate(url)
|
42
|
+
validate_image_type(image_type)
|
36
43
|
validate_options(options)
|
44
|
+
|
37
45
|
temp_file = FileUtils.create_temp_file(image_type)
|
38
46
|
begin
|
39
47
|
Puppeteer.visit(url, PUPPETEER_SCRIPT_PATH, temp_file.path, image_type, options)
|
@@ -44,6 +52,15 @@ module Dhalang
|
|
44
52
|
return binary_image_content
|
45
53
|
end
|
46
54
|
|
55
|
+
# Raises an error if the given image type is not supported.
|
56
|
+
#
|
57
|
+
# @param [String] image_type The image_type to validate
|
58
|
+
private_class_method def self.validate_image_type(image_type)
|
59
|
+
if !IMAGE_TYPES.include? image_type.downcase
|
60
|
+
raise DhalangError, 'Unsupported image type'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
47
64
|
# Raises an error if the given options might conflict with the Puppeteer configuration.
|
48
65
|
#
|
49
66
|
# @param [Hash] options The options to validate
|
data/lib/js/dhalang.js
CHANGED
@@ -8,7 +8,7 @@ const fs = require('fs')
|
|
8
8
|
* @property {string} imageType - The type of image to save ( undefined for pdfgenerator ).
|
9
9
|
* @property {UserOptions} userOptions - User defined and default parameters to use when navigating to pages.
|
10
10
|
* @property {Object} pdfOptions - User defined and default parameters to use when creating PDFs. Note: Do not use directly, rather use {@link getConfiguredPdfOptions}.
|
11
|
-
* @property {Object}
|
11
|
+
* @property {Object} screenshotOptions - User defined and default parameters to use when creating screenshots.
|
12
12
|
* @property {Object} jpegOptions - User defined and default parameters to use when creating JPEGs.
|
13
13
|
*/
|
14
14
|
|
@@ -96,7 +96,7 @@ exports.navigate = async function (page, configuration) {
|
|
96
96
|
} else if (navigationWaitForXPath !== "") {
|
97
97
|
await page.waitForXPath(navigationWaitForXPath, this.getWaitingParameters(configuration));
|
98
98
|
} else {
|
99
|
-
await
|
99
|
+
await new Promise(r => setTimeout(r, 250));
|
100
100
|
}
|
101
101
|
}
|
102
102
|
|
@@ -11,13 +11,13 @@ const createScreenshot = async () => {
|
|
11
11
|
await dhalang.configure(page, configuration.userOptions);
|
12
12
|
await dhalang.navigate(page, configuration);
|
13
13
|
|
14
|
-
const screenshotOptions = configuration.imageType === "png" ? configuration.pngOptions : configuration.jpegOptions
|
15
14
|
await page.screenshot({
|
16
15
|
...{
|
17
16
|
path: configuration.tempFilePath,
|
18
17
|
type: configuration.imageType,
|
19
18
|
},
|
20
|
-
...
|
19
|
+
...(configuration.imageType === "jpeg") && configuration.jpegOptions,
|
20
|
+
...configuration.screenshotOptions
|
21
21
|
});
|
22
22
|
} catch (error) {
|
23
23
|
console.error(error.message);
|