ferrum 0.8 → 0.11
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/LICENSE +1 -1
- data/README.md +200 -75
- data/lib/ferrum.rb +36 -8
- data/lib/ferrum/browser.rb +12 -5
- data/lib/ferrum/browser/client.rb +6 -0
- data/lib/ferrum/browser/command.rb +26 -25
- data/lib/ferrum/browser/options/base.rb +46 -0
- data/lib/ferrum/browser/options/chrome.rb +74 -0
- data/lib/ferrum/browser/options/firefox.rb +34 -0
- data/lib/ferrum/browser/process.rb +23 -11
- data/lib/ferrum/browser/subscriber.rb +5 -1
- data/lib/ferrum/browser/web_socket.rb +17 -1
- data/lib/ferrum/browser/xvfb.rb +37 -0
- data/lib/ferrum/context.rb +10 -6
- data/lib/ferrum/contexts.rb +4 -2
- data/lib/ferrum/frame.rb +1 -0
- data/lib/ferrum/frame/dom.rb +30 -30
- data/lib/ferrum/frame/runtime.rb +62 -63
- data/lib/ferrum/network.rb +23 -6
- data/lib/ferrum/network/error.rb +8 -15
- data/lib/ferrum/network/intercepted_request.rb +1 -1
- data/lib/ferrum/node.rb +61 -17
- data/lib/ferrum/page.rb +40 -13
- data/lib/ferrum/page/animation.rb +16 -0
- data/lib/ferrum/page/frames.rb +10 -2
- data/lib/ferrum/page/screenshot.rb +64 -12
- data/lib/ferrum/rbga.rb +38 -0
- data/lib/ferrum/version.rb +1 -1
- metadata +19 -10
- data/lib/ferrum/browser/chrome.rb +0 -76
- data/lib/ferrum/browser/firefox.rb +0 -34
data/lib/ferrum/rbga.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Ferrum
|
2
|
+
class RGBA
|
3
|
+
def initialize(red, green, blue, alpha)
|
4
|
+
self.red = red
|
5
|
+
self.green = green
|
6
|
+
self.blue = blue
|
7
|
+
self.alpha = alpha
|
8
|
+
|
9
|
+
validate
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_h
|
13
|
+
{ r: red, g: green, b: blue, a: alpha }
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
attr_accessor :red, :green, :blue, :alpha
|
19
|
+
|
20
|
+
def validate
|
21
|
+
[red, green, blue].each(&method(:validate_color))
|
22
|
+
validate_alpha
|
23
|
+
end
|
24
|
+
|
25
|
+
def validate_color(value)
|
26
|
+
return if value && value.is_a?(Integer) && Range.new(0, 255).include?(value)
|
27
|
+
|
28
|
+
raise ArgumentError, "Wrong value of #{value} should be Integer from 0 to 255"
|
29
|
+
end
|
30
|
+
|
31
|
+
def validate_alpha
|
32
|
+
return if alpha && alpha.is_a?(Float) && Range.new(0.0, 1.0).include?(alpha)
|
33
|
+
|
34
|
+
raise ArgumentError,
|
35
|
+
"Wrong alpha value #{alpha} should be Float between 0.0 (fully transparent) and 1.0 (fully opaque)"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/ferrum/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ferrum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.11'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Vorotilin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket-driver
|
@@ -64,28 +64,28 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '2.
|
67
|
+
version: '2.5'
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '2.
|
74
|
+
version: '2.5'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: rake
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '13.0'
|
82
82
|
type: :development
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
88
|
+
version: '13.0'
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
90
|
name: rspec
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,13 +181,15 @@ files:
|
|
181
181
|
- README.md
|
182
182
|
- lib/ferrum.rb
|
183
183
|
- lib/ferrum/browser.rb
|
184
|
-
- lib/ferrum/browser/chrome.rb
|
185
184
|
- lib/ferrum/browser/client.rb
|
186
185
|
- lib/ferrum/browser/command.rb
|
187
|
-
- lib/ferrum/browser/
|
186
|
+
- lib/ferrum/browser/options/base.rb
|
187
|
+
- lib/ferrum/browser/options/chrome.rb
|
188
|
+
- lib/ferrum/browser/options/firefox.rb
|
188
189
|
- lib/ferrum/browser/process.rb
|
189
190
|
- lib/ferrum/browser/subscriber.rb
|
190
191
|
- lib/ferrum/browser/web_socket.rb
|
192
|
+
- lib/ferrum/browser/xvfb.rb
|
191
193
|
- lib/ferrum/context.rb
|
192
194
|
- lib/ferrum/contexts.rb
|
193
195
|
- lib/ferrum/cookies.rb
|
@@ -208,14 +210,21 @@ files:
|
|
208
210
|
- lib/ferrum/network/response.rb
|
209
211
|
- lib/ferrum/node.rb
|
210
212
|
- lib/ferrum/page.rb
|
213
|
+
- lib/ferrum/page/animation.rb
|
211
214
|
- lib/ferrum/page/frames.rb
|
212
215
|
- lib/ferrum/page/screenshot.rb
|
216
|
+
- lib/ferrum/rbga.rb
|
213
217
|
- lib/ferrum/target.rb
|
214
218
|
- lib/ferrum/version.rb
|
215
219
|
homepage: https://github.com/route/ferrum
|
216
220
|
licenses:
|
217
221
|
- MIT
|
218
|
-
metadata:
|
222
|
+
metadata:
|
223
|
+
homepage_uri: https://ferrum.rubycdp.com/
|
224
|
+
bug_tracker_uri: https://github.com/rubycdp/ferrum/issues
|
225
|
+
documentation_uri: https://github.com/rubycdp/ferrum/blob/master/README.md
|
226
|
+
changelog_uri: https://github.com/rubycdp/ferrum/blob/master/CHANGELOG.md
|
227
|
+
source_code_uri: https://github.com/rubycdp/ferrum
|
219
228
|
post_install_message:
|
220
229
|
rdoc_options: []
|
221
230
|
require_paths:
|
@@ -231,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
240
|
- !ruby/object:Gem::Version
|
232
241
|
version: '0'
|
233
242
|
requirements: []
|
234
|
-
rubygems_version: 3.1.
|
243
|
+
rubygems_version: 3.1.4
|
235
244
|
signing_key:
|
236
245
|
specification_version: 4
|
237
246
|
summary: Ruby headless Chrome driver
|
@@ -1,76 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ferrum
|
4
|
-
class Browser
|
5
|
-
class Chrome < Command
|
6
|
-
DEFAULT_OPTIONS = {
|
7
|
-
"headless" => nil,
|
8
|
-
"disable-gpu" => nil,
|
9
|
-
"hide-scrollbars" => nil,
|
10
|
-
"mute-audio" => nil,
|
11
|
-
"enable-automation" => nil,
|
12
|
-
"disable-web-security" => nil,
|
13
|
-
"disable-session-crashed-bubble" => nil,
|
14
|
-
"disable-breakpad" => nil,
|
15
|
-
"disable-sync" => nil,
|
16
|
-
"no-first-run" => nil,
|
17
|
-
"use-mock-keychain" => nil,
|
18
|
-
"keep-alive-for-test" => nil,
|
19
|
-
"disable-popup-blocking" => nil,
|
20
|
-
"disable-extensions" => nil,
|
21
|
-
"disable-hang-monitor" => nil,
|
22
|
-
"disable-features" => "site-per-process,TranslateUI",
|
23
|
-
"disable-translate" => nil,
|
24
|
-
"disable-background-networking" => nil,
|
25
|
-
"enable-features" => "NetworkService,NetworkServiceInProcess",
|
26
|
-
"disable-background-timer-throttling" => nil,
|
27
|
-
"disable-backgrounding-occluded-windows" => nil,
|
28
|
-
"disable-client-side-phishing-detection" => nil,
|
29
|
-
"disable-default-apps" => nil,
|
30
|
-
"disable-dev-shm-usage" => nil,
|
31
|
-
"disable-ipc-flooding-protection" => nil,
|
32
|
-
"disable-prompt-on-repost" => nil,
|
33
|
-
"disable-renderer-backgrounding" => nil,
|
34
|
-
"force-color-profile" => "srgb",
|
35
|
-
"metrics-recording-only" => nil,
|
36
|
-
"safebrowsing-disable-auto-update" => nil,
|
37
|
-
"password-store" => "basic",
|
38
|
-
# Note: --no-sandbox is not needed if you properly setup a user in the container.
|
39
|
-
# https://github.com/ebidel/lighthouse-ci/blob/master/builder/Dockerfile#L35-L40
|
40
|
-
# "no-sandbox" => nil,
|
41
|
-
}.freeze
|
42
|
-
|
43
|
-
MAC_BIN_PATH = [
|
44
|
-
"/Applications/Chromium.app/Contents/MacOS/Chromium",
|
45
|
-
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
46
|
-
].freeze
|
47
|
-
LINUX_BIN_PATH = %w[chromium google-chrome-unstable google-chrome-beta
|
48
|
-
google-chrome chrome chromium-browser
|
49
|
-
google-chrome-stable].freeze
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def combine_flags
|
54
|
-
# Doesn't work on MacOS, so we need to set it by CDP as well
|
55
|
-
@flags.merge!("window-size" => options[:window_size].join(","))
|
56
|
-
|
57
|
-
port = options.fetch(:port, BROWSER_PORT)
|
58
|
-
@flags.merge!("remote-debugging-port" => port)
|
59
|
-
|
60
|
-
host = options.fetch(:host, BROWSER_HOST)
|
61
|
-
@flags.merge!("remote-debugging-address" => host)
|
62
|
-
|
63
|
-
@flags.merge!("user-data-dir" => @user_data_dir)
|
64
|
-
|
65
|
-
@flags = DEFAULT_OPTIONS.merge(@flags)
|
66
|
-
|
67
|
-
unless options.fetch(:headless, true)
|
68
|
-
@flags.delete("headless")
|
69
|
-
@flags.delete("disable-gpu")
|
70
|
-
end
|
71
|
-
|
72
|
-
@flags.merge!(options.fetch(:browser_options, {}))
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ferrum
|
4
|
-
class Browser
|
5
|
-
class Firefox < Command
|
6
|
-
DEFAULT_OPTIONS = {
|
7
|
-
"headless" => nil,
|
8
|
-
}.freeze
|
9
|
-
|
10
|
-
MAC_BIN_PATH = [
|
11
|
-
"/Applications/Firefox.app/Contents/MacOS/firefox-bin"
|
12
|
-
].freeze
|
13
|
-
LINUX_BIN_PATH = %w[firefox].freeze
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def combine_flags
|
18
|
-
port = options.fetch(:port, BROWSER_PORT)
|
19
|
-
host = options.fetch(:host, BROWSER_HOST)
|
20
|
-
@flags.merge!("remote-debugger" => "#{host}:#{port}")
|
21
|
-
|
22
|
-
@flags.merge!("profile" => @user_data_dir)
|
23
|
-
|
24
|
-
@flags = DEFAULT_OPTIONS.merge(@flags)
|
25
|
-
|
26
|
-
unless options.fetch(:headless, true)
|
27
|
-
@flags.delete("headless")
|
28
|
-
end
|
29
|
-
|
30
|
-
@flags.merge!(options.fetch(:browser_options, {}))
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|