dvla-browser-drivers 3.1.1 → 3.2.0
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/.ruby-version +1 -1
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -0
- data/README.md +24 -15
- data/dvla-browser-drivers.gemspec +0 -1
- data/lib/dvla/browser/drivers/meta_drivers.rb +48 -10
- data/lib/dvla/browser/drivers/version.rb +1 -1
- data/lib/dvla/browser/drivers.rb +0 -3
- metadata +2 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9747c432022ec4874a84b5fdd9017b2486c4d37c07a9fe4353828c8bf1771e75
|
|
4
|
+
data.tar.gz: 0b93b0c90fbe2465ac1e613a6f9afba628b3230aa39d51f5d75d794292bb4e8e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b385a43c98778ae9ec72b12ae004c1a95c175ee6d37491c054d83200e5220023053b518b51ffa8ad18cbcc1297a8fa792a9f521cc343fb1e68a3e5d8fb759ed9
|
|
7
|
+
data.tar.gz: 532414c16d438e444ffab734ce98e04aad0d487572b53948cb30d2006e0fd4c532625575ef55123397269c65f189cd6b9654c5322468e89289e3755bb46a2d89
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
4.0.1
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -25,25 +25,33 @@ Once installed, you are able to use any pre-configured browser driver from the l
|
|
|
25
25
|
|
|
26
26
|
### Selenium drivers
|
|
27
27
|
|
|
28
|
-
| Driver
|
|
29
|
-
|
|
30
|
-
| selenium_chrome
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
| selenium_edge | `DVLA::Browser::Drivers.selenium_edge` |
|
|
35
|
-
| selenium_safari | `DVLA::Browser::Drivers.selenium_safari` |
|
|
28
|
+
| Driver | Usage |
|
|
29
|
+
|------------------|-----------------------------------------------|
|
|
30
|
+
| selenium_chrome | `DVLA::Browser::Drivers.selenium_chrome` |
|
|
31
|
+
| selenium_firefox | `DVLA::Browser::Drivers.selenium_firefox` |
|
|
32
|
+
| selenium_edge | `DVLA::Browser::Drivers.selenium_edge` |
|
|
33
|
+
| selenium_safari | `DVLA::Browser::Drivers.selenium_safari` |
|
|
36
34
|
|
|
37
35
|
### Non-selenium drivers
|
|
38
36
|
|
|
39
|
-
| Driver
|
|
40
|
-
|
|
41
|
-
| cuprite
|
|
42
|
-
|
|
|
43
|
-
| apparition | `DVLA::Browser::Drivers.apparition` |
|
|
44
|
-
| headless_apparition | `DVLA::Browser::Drivers.headless_apparition` |
|
|
37
|
+
| Driver | Usage |
|
|
38
|
+
|------------|-------------------------------------|
|
|
39
|
+
| cuprite | `DVLA::Browser::Drivers.cuprite` |
|
|
40
|
+
| apparition | `DVLA::Browser::Drivers.apparition` |
|
|
45
41
|
|
|
46
|
-
|
|
42
|
+
### Driver modifiers
|
|
43
|
+
|
|
44
|
+
The following modifiers can be applied to any driver above (except selenium_safari):
|
|
45
|
+
|
|
46
|
+
| Modifier | Example | Description |
|
|
47
|
+
|-------------|-----------------------------------------------------|-------------------------------------------------------------------------------|
|
|
48
|
+
| headless_ | `headless_selenium_chrome` | Runs the browser in headless mode |
|
|
49
|
+
| _no_js | `selenium_chrome_no_js` | Disables JavaScript in the browser |
|
|
50
|
+
| _proxied | `selenium_firefox_proxied(proxy: 'http://foo.bar')` | Routes traffic through a proxy, requires a url passed as the `proxy` argument |
|
|
51
|
+
|
|
52
|
+
Modifiers can be combined, e.g. `headless_selenium_firefox_no_js_proxied`
|
|
53
|
+
|
|
54
|
+
**Note:** selenium_safari does not support any modifiers.
|
|
47
55
|
|
|
48
56
|
---
|
|
49
57
|
|
|
@@ -69,6 +77,7 @@ Once installed, you are able to use any pre-configured browser driver from the l
|
|
|
69
77
|
| remote | Selenium, Cuprite, Apparition | `selenium_chrome(remote: 'http://localhost:4444/wd/hub')` | Allows you to talk to a remote browser |
|
|
70
78
|
| additional_arguments | Selenium | `selenium_chrome(additional_arguments: ['window-size=1400,1920'] ` | Pass additional arguments to the driver |
|
|
71
79
|
| additional_preferences | Selenium | `selenium_chrome(additional_preferences: [{'download.default_directory': '<download_path>'}] )` | Pass additional preferences to the driver |
|
|
80
|
+
| proxy | Selenium, Cuprite | `selenium_firefox_proxied(proxy: 'http://proxy:8080')` | Sets the proxy URL for proxied drivers |
|
|
72
81
|
| timeout | Cuprite, Apparition | `cuprite(timeout: 60 )` | Sets the default timeout for the driver |
|
|
73
82
|
| save_path | Cuprite, Apparition | `cuprite(save_path: 'File.expand_path('./somewhere')' )` | Tells the browser where to store downloads |
|
|
74
83
|
| browser_options | Cuprite, Apparition | `cuprite(browser_options: { option: value, option: value })` | Pass additional options to the browser |
|
|
@@ -48,6 +48,5 @@ Gem::Specification.new do |spec|
|
|
|
48
48
|
spec.add_dependency 'apparition', '>= 0.6'
|
|
49
49
|
spec.add_dependency 'capybara', '>= 3.37'
|
|
50
50
|
spec.add_dependency 'cuprite', '>= 0.14'
|
|
51
|
-
spec.add_dependency 'dvla-herodotus', '>= 2.0'
|
|
52
51
|
spec.add_dependency 'selenium-webdriver', '>= 4.0'
|
|
53
52
|
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
module DVLA
|
|
2
2
|
module Browser
|
|
3
3
|
module Drivers
|
|
4
|
-
DRIVER_REGEX = /^(?:(?<headless>headless_)(?<driver>selenium_(?<browser>chrome|firefox)|cuprite|apparition)
|
|
4
|
+
DRIVER_REGEX = /^(?:(?<headless>headless_)(?<driver>selenium_(?<browser>chrome|firefox|edge)|cuprite|apparition)(?<no_js>_no_js)?(?<proxied>_proxied)?|(?<driver_no_headless>selenium_(?<browser_no_headless>chrome|firefox|edge|safari)|cuprite|apparition)(?<no_js_no_headless>_no_js)?(?<proxied_no_headless>_proxied)?)$/
|
|
5
5
|
|
|
6
|
-
OTHER_ACCEPTED_PARAMS = %i[timeout browser_options save_path remote].freeze
|
|
6
|
+
OTHER_ACCEPTED_PARAMS = %i[timeout browser_options save_path remote proxy].freeze
|
|
7
7
|
OTHER_DRIVERS = %i[cuprite apparition].freeze
|
|
8
|
-
SELENIUM_ACCEPTED_PARAMS = %i[remote additional_arguments additional_preferences binary].freeze
|
|
8
|
+
SELENIUM_ACCEPTED_PARAMS = %i[remote additional_arguments additional_preferences binary proxy].freeze
|
|
9
9
|
SELENIUM_DRIVERS = %i[selenium_chrome selenium_firefox selenium_edge selenium_safari].freeze
|
|
10
10
|
|
|
11
11
|
# Creates methods in the Drivers module that matches the DRIVER_REGEX
|
|
@@ -19,15 +19,21 @@ module DVLA
|
|
|
19
19
|
def self.method_missing(method, *args, **kwargs, &)
|
|
20
20
|
if (matches = method.match(DRIVER_REGEX))
|
|
21
21
|
headless = matches[:headless].is_a? String
|
|
22
|
+
no_js = matches[:no_js].is_a?(String) || matches[:no_js_no_headless].is_a?(String)
|
|
23
|
+
proxied = matches[:proxied].is_a?(String) || matches[:proxied_no_headless].is_a?(String)
|
|
22
24
|
driver = matches[:driver]&.to_sym || matches[:driver_no_headless]&.to_sym
|
|
23
25
|
browser_match = matches[:browser] || matches[:browser_no_headless]
|
|
24
26
|
|
|
27
|
+
if proxied && !kwargs[:proxy]
|
|
28
|
+
raise ArgumentError, "Method '#{method}' requires proxy parameter"
|
|
29
|
+
end
|
|
30
|
+
|
|
25
31
|
case driver
|
|
26
32
|
when *SELENIUM_DRIVERS
|
|
27
33
|
browser = browser_match.to_sym
|
|
28
34
|
|
|
29
35
|
kwargs.each do |key, _value|
|
|
30
|
-
|
|
36
|
+
puts "Key: '#{key}' will be ignored | Use one from: '#{SELENIUM_ACCEPTED_PARAMS}'" unless SELENIUM_ACCEPTED_PARAMS.include?(key)
|
|
31
37
|
end
|
|
32
38
|
|
|
33
39
|
::Capybara.register_driver method do |app|
|
|
@@ -43,6 +49,24 @@ module DVLA
|
|
|
43
49
|
options.add_argument('--no-sandbox')
|
|
44
50
|
end
|
|
45
51
|
|
|
52
|
+
if kwargs[:proxy]
|
|
53
|
+
if browser == :firefox
|
|
54
|
+
proxy_uri = URI.parse(kwargs[:proxy])
|
|
55
|
+
proxy_host = proxy_uri.host == '0.0.0.0' ? '127.0.0.1' : proxy_uri.host
|
|
56
|
+
options.add_preference('network.proxy.type', 1)
|
|
57
|
+
options.add_preference('network.proxy.http', proxy_host)
|
|
58
|
+
options.add_preference('network.proxy.http_port', proxy_uri.port)
|
|
59
|
+
options.add_preference('network.proxy.ssl', proxy_host)
|
|
60
|
+
options.add_preference('network.proxy.ssl_port', proxy_uri.port)
|
|
61
|
+
options.add_preference('network.proxy.no_proxies_on', '')
|
|
62
|
+
options.add_preference('security.cert_pinning.enforcement_level', 0)
|
|
63
|
+
options.add_preference('security.enterprise_roots.enabled', true)
|
|
64
|
+
else
|
|
65
|
+
options.add_argument("--proxy-server=#{kwargs[:proxy]}")
|
|
66
|
+
options.add_argument('--ignore-certificate-errors')
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
46
70
|
kwargs[:additional_arguments] && kwargs[:additional_arguments].each do |argument|
|
|
47
71
|
argument.prepend('--') unless argument.start_with?('--')
|
|
48
72
|
options.add_argument(argument)
|
|
@@ -52,22 +76,36 @@ module DVLA
|
|
|
52
76
|
key, value = preference.first
|
|
53
77
|
options.add_preference(key, value)
|
|
54
78
|
end
|
|
79
|
+
|
|
80
|
+
if no_js
|
|
81
|
+
if browser == :chrome
|
|
82
|
+
options.add_preference('profile.managed_default_content_settings.javascript', 2)
|
|
83
|
+
elsif browser == :firefox
|
|
84
|
+
options.add_preference('javascript.enabled', false)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
55
87
|
end
|
|
56
88
|
|
|
57
89
|
driver_browser = kwargs[:remote] ? :remote : browser
|
|
58
90
|
driver_options = { browser: driver_browser, options: }
|
|
59
91
|
driver_options[:url] = kwargs[:remote] if kwargs[:remote]
|
|
60
92
|
|
|
61
|
-
::Capybara::Selenium::Driver.new(app, **driver_options)
|
|
93
|
+
::Capybara::Selenium::Driver.new(app, **driver_options).tap do |driver|
|
|
94
|
+
driver.browser.execute_cdp('Emulation.setScriptExecutionDisabled', value: true) if no_js && browser == :edge
|
|
95
|
+
end
|
|
62
96
|
end
|
|
63
97
|
else
|
|
64
98
|
kwargs.each do |key, _value|
|
|
65
|
-
|
|
99
|
+
puts "Key: '#{key}' will be ignored | Use one from: '#{OTHER_ACCEPTED_PARAMS}'" unless OTHER_ACCEPTED_PARAMS.include?(key)
|
|
66
100
|
end
|
|
67
101
|
|
|
68
102
|
browser_options = { 'no-sandbox': nil, 'disable-smooth-scrolling': true }
|
|
69
|
-
kwargs[:browser_options]
|
|
70
|
-
|
|
103
|
+
browser_options = browser_options.merge(kwargs[:browser_options]) if kwargs[:browser_options]
|
|
104
|
+
browser_options[:'blink-settings'] = 'scriptEnabled=false' if no_js
|
|
105
|
+
|
|
106
|
+
if kwargs[:proxy]
|
|
107
|
+
browser_options[:'proxy-server'] = kwargs[:proxy]
|
|
108
|
+
browser_options[:'ignore-certificate-errors'] = nil
|
|
71
109
|
end
|
|
72
110
|
|
|
73
111
|
::Capybara.register_driver method do |app|
|
|
@@ -78,11 +116,11 @@ module DVLA
|
|
|
78
116
|
browser_options:,
|
|
79
117
|
save_path: kwargs[:save_path],
|
|
80
118
|
url: kwargs[:remote],
|
|
81
|
-
|
|
119
|
+
)
|
|
82
120
|
end
|
|
83
121
|
end
|
|
84
122
|
|
|
85
|
-
|
|
123
|
+
puts "Driver set to: '#{method}'"
|
|
86
124
|
|
|
87
125
|
::Capybara.javascript_driver = method
|
|
88
126
|
::Capybara.default_driver = method
|
data/lib/dvla/browser/drivers.rb
CHANGED
|
@@ -3,11 +3,8 @@ require_relative 'drivers/version'
|
|
|
3
3
|
|
|
4
4
|
require 'capybara/apparition'
|
|
5
5
|
require 'capybara/cuprite'
|
|
6
|
-
require 'dvla/herodotus'
|
|
7
6
|
require 'selenium-webdriver'
|
|
8
7
|
|
|
9
8
|
module DVLA
|
|
10
9
|
class Error < StandardError; end
|
|
11
|
-
|
|
12
|
-
LOG = DVLA::Herodotus.logger('browser-drivers')
|
|
13
10
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dvla-browser-drivers
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Driver and Vehicle Licensing Agency (DVLA)
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2026-04-01 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: apparition
|
|
@@ -53,20 +53,6 @@ dependencies:
|
|
|
53
53
|
- - ">="
|
|
54
54
|
- !ruby/object:Gem::Version
|
|
55
55
|
version: '0.14'
|
|
56
|
-
- !ruby/object:Gem::Dependency
|
|
57
|
-
name: dvla-herodotus
|
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
|
59
|
-
requirements:
|
|
60
|
-
- - ">="
|
|
61
|
-
- !ruby/object:Gem::Version
|
|
62
|
-
version: '2.0'
|
|
63
|
-
type: :runtime
|
|
64
|
-
prerelease: false
|
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
-
requirements:
|
|
67
|
-
- - ">="
|
|
68
|
-
- !ruby/object:Gem::Version
|
|
69
|
-
version: '2.0'
|
|
70
56
|
- !ruby/object:Gem::Dependency
|
|
71
57
|
name: selenium-webdriver
|
|
72
58
|
requirement: !ruby/object:Gem::Requirement
|