puppeteer-ruby 0.34.3 → 0.35.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 40020c8b6fa98e08295fe19758d81b6bb88c5d828d19b25a567d8f699db90267
4
- data.tar.gz: 309d5de2c5a715a531b2909d0ac8408205f95a78204fbdf8f6a619d8630719eb
3
+ metadata.gz: 7386b90fffcd353eb933d6dcb35d1e7cab9482fa70eaa536bf7bd19bba594edf
4
+ data.tar.gz: a4bad8a9ab93025fd2864e2a4cd4ff9c6e972156a19898f6cefab84397a9526e
5
5
  SHA512:
6
- metadata.gz: ed631a2b52c199404eed1559ac2f1d450af94d8139d70b466f2be72f801799f3548bed0ce344e114295f9374edff4323e8970e6b98cba3b7bc3ee384c517cba7
7
- data.tar.gz: a8fab38d9172110fe68d3d93034b5d67dec74ea821eee809fd35347ffdbe5d9bb0acb3c197f727feb273ae838c672f2a6d497f8ca580c5afbad10424df72c3ab
6
+ metadata.gz: d884728c758d4109ac19e72845a36677186b02d723f1be5e5dc5f5e7eb688b7e87ec17d134a1c02818a68273eeb5aaa49759f2b8554a2200ab1ea7a149c9df7a
7
+ data.tar.gz: 2fb46af25d069bd75411abc56a5787b04ba0d2af000c06a046df2f300b096c191978628ed5d68d12653dd8b61bb2131008da90baaf0a190942caa10daf9f6cdc
data/CHANGELOG.md CHANGED
@@ -1,7 +1,13 @@
1
- ### master [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.3...master)]
1
+ ### master [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.35.0...master)]
2
2
 
3
3
  * xxx
4
4
 
5
+ ### 0.35.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.3...0.35.0)]
6
+
7
+ New features:
8
+
9
+ * Add `channel` parameter for Puppeteer.launch. Now `channel: chrome` or `channel: chrome-canary` (chrome-beta, chrome-dev is also available) automatically detects the executablePath of Google Chrome. Windows/macOS users can also use `channel: msedge`.
10
+
5
11
  ### 0.34.3 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.34.2...0.34.3)]
6
12
 
7
13
  Bugfix:
data/docs/api_coverage.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API coverages
2
- - Puppeteer version: v10.0.0
3
- - puppeteer-ruby version: 0.34.3
2
+ - Puppeteer version: v10.1.0
3
+ - puppeteer-ruby version: 0.35.0
4
4
 
5
5
  ## Puppeteer
6
6
 
@@ -78,8 +78,10 @@
78
78
  * content
79
79
  * cookies
80
80
  * coverage
81
+ * createPDFStream => `#create_pdf_stream`
81
82
  * deleteCookie => `#delete_cookie`
82
83
  * emulate
84
+ * ~~emulateCPUThrottling~~
83
85
  * emulateIdleState => `#emulate_idle_state`
84
86
  * emulateMediaFeatures => `#emulate_media_features`
85
87
  * emulateMediaType => `#emulate_media_type`
@@ -97,6 +99,7 @@
97
99
  * goto
98
100
  * hover
99
101
  * isClosed => `#closed?`
102
+ * ~~isDragInterceptionEnabled~~
100
103
  * isJavaScriptEnabled => `#javascript_enabled?`
101
104
  * keyboard
102
105
  * mainFrame => `#main_frame`
@@ -113,6 +116,7 @@
113
116
  * setCookie => `#set_cookie`
114
117
  * setDefaultNavigationTimeout => `#default_navigation_timeout=`
115
118
  * setDefaultTimeout => `#default_timeout=`
119
+ * ~~setDragInterception~~
116
120
  * setExtraHTTPHeaders => `#extra_http_headers=`
117
121
  * setGeolocation => `#geolocation=`
118
122
  * setJavaScriptEnabled => `#javascript_enabled=`
@@ -162,6 +166,11 @@
162
166
 
163
167
  * click
164
168
  * down
169
+ * ~~drag~~
170
+ * ~~dragAndDrop~~
171
+ * ~~dragEnter~~
172
+ * ~~dragOver~~
173
+ * ~~drop~~
165
174
  * move
166
175
  * up
167
176
  * wheel
@@ -260,8 +269,14 @@
260
269
  * boundingBox => `#bounding_box`
261
270
  * boxModel => `#box_model`
262
271
  * click
272
+ * clickablePoint => `#clickable_point`
263
273
  * contentFrame => `#content_frame`
264
274
  * dispose
275
+ * ~~drag~~
276
+ * ~~dragAndDrop~~
277
+ * ~~dragEnter~~
278
+ * ~~dragOver~~
279
+ * ~~drop~~
265
280
  * evaluate
266
281
  * evaluateHandle => `#evaluate_handle`
267
282
  * executionContext => `#execution_context`
@@ -1,4 +1,3 @@
1
- require_relative './launcher/base'
2
1
  require_relative './launcher/browser_options'
3
2
  require_relative './launcher/chrome'
4
3
  require_relative './launcher/chrome_arg_options'
@@ -2,7 +2,13 @@ require 'tmpdir'
2
2
 
3
3
  # https://github.com/puppeteer/puppeteer/blob/main/src/node/Launcher.ts
4
4
  module Puppeteer::Launcher
5
- class Chrome < Base
5
+ class Chrome
6
+ def initialize(project_root:, preferred_revision:, is_puppeteer_core:)
7
+ @project_root = project_root
8
+ @preferred_revision = preferred_revision
9
+ @is_puppeteer_core = is_puppeteer_core
10
+ end
11
+
6
12
  # @param {!(Launcher.LaunchOptions & Launcher.ChromeArgOptions & Launcher.BrowserOptions)=} options
7
13
  # @return {!Promise<!Browser>}
8
14
  def launch(options = {})
@@ -38,7 +44,12 @@ module Puppeteer::Launcher
38
44
  chrome_arguments << "--user-data-dir=#{temporary_user_data_dir}"
39
45
  end
40
46
 
41
- chrome_executable = @launch_options.executable_path || resolve_executable_path
47
+ chrome_executable =
48
+ if @launch_options.channel
49
+ executable_path_for_channel(@launch_options.channel.to_s)
50
+ else
51
+ @launch_options.executable_path || executable_path_for_channel('chrome')
52
+ end
42
53
  use_pipe = chrome_arguments.include?('--remote-debugging-pipe')
43
54
  runner = Puppeteer::BrowserRunner.new(chrome_executable, chrome_arguments, temporary_user_data_dir)
44
55
  runner.start(
@@ -201,8 +212,57 @@ module Puppeteer::Launcher
201
212
  end
202
213
 
203
214
  # @return {string}
204
- def executable_path
205
- resolve_executable_path
215
+ def executable_path(channel: nil)
216
+ if channel
217
+ executable_path_for_channel(channel.to_s)
218
+ else
219
+ executable_path_for_channel('chrome')
220
+ end
221
+ end
222
+
223
+ CHROMIUM_CHANNELS = {
224
+ windows: {
225
+ 'chrome' => "#{ENV['PROGRAMFILES']}\\Google\\Chrome\\Application\\chrome.exe",
226
+ 'chrome-beta' => "#{ENV['PROGRAMFILES']}\\Google\\Chrome Beta\\Application\\chrome.exe",
227
+ 'chrome-canary' => "#{ENV['PROGRAMFILES']}\\Google\\Chrome SxS\\Application\\chrome.exe",
228
+ 'chrome-dev' => "#{ENV['PROGRAMFILES']}\\Google\\Chrome Dev\\Application\\chrome.exe",
229
+ 'msedge' => "#{ENV['PROGRAMFILES(X86)']}\\Microsoft\\Edge\\Application\\msedge.exe",
230
+ },
231
+ darwin: {
232
+ 'chrome' => '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
233
+ 'chrome-beta' => '/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta',
234
+ 'chrome-canary' => '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',
235
+ 'chrome-dev' => '/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev',
236
+ 'msedge' => '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge',
237
+ },
238
+ linux: {
239
+ 'chrome' => '/opt/google/chrome/chrome',
240
+ 'chrome-beta' => '/opt/google/chrome-beta/chrome',
241
+ 'chrome-dev' => '/opt/google/chrome-unstable/chrome',
242
+ },
243
+ }.freeze
244
+
245
+ # @param channel [String]
246
+ private def executable_path_for_channel(channel)
247
+ chrome_path_map =
248
+ if Puppeteer.env.windows?
249
+ CHROMIUM_CHANNELS[:windows]
250
+ elsif Puppeteer.env.darwin?
251
+ CHROMIUM_CHANNELS[:darwin]
252
+ else
253
+ CHROMIUM_CHANNELS[:linux]
254
+ end
255
+
256
+ chrome_path = chrome_path_map[channel]
257
+ unless chrome_path
258
+ raise ArgumentError.new("Invalid channel: '#{channel}'. Allowed channel is #{chrome_path_map.keys}")
259
+ end
260
+
261
+ unless File.exist?(chrome_path)
262
+ raise "#{channel} is not installed on this system.\nExpected path: #{chrome_path}"
263
+ end
264
+
265
+ chrome_path
206
266
  end
207
267
 
208
268
  def product
@@ -2,7 +2,13 @@ require 'tmpdir'
2
2
 
3
3
  # https://github.com/puppeteer/puppeteer/blob/main/src/node/Launcher.ts
4
4
  module Puppeteer::Launcher
5
- class Firefox < Base
5
+ class Firefox
6
+ def initialize(project_root:, preferred_revision:, is_puppeteer_core:)
7
+ @project_root = project_root
8
+ @preferred_revision = preferred_revision
9
+ @is_puppeteer_core = is_puppeteer_core
10
+ end
11
+
6
12
  # @param {!(Launcher.LaunchOptions & Launcher.ChromeArgOptions & Launcher.BrowserOptions)=} options
7
13
  # @return {!Promise<!Browser>}
8
14
  def launch(options = {})
@@ -32,7 +38,12 @@ module Puppeteer::Launcher
32
38
  firefox_arguments << temporary_user_data_dir
33
39
  end
34
40
 
35
- firefox_executable = @launch_options.executable_path || resolve_executable_path
41
+ firefox_executable =
42
+ if @launch_options.channel
43
+ executable_path_for_channel(@launch_options.channel.to_s)
44
+ else
45
+ @launch_options.executable_path || executable_path_for_channel('nightly')
46
+ end
36
47
  runner = Puppeteer::BrowserRunner.new(firefox_executable, firefox_arguments, temporary_user_data_dir)
37
48
  runner.start(
38
49
  handle_SIGHUP: @launch_options.handle_SIGHUP?,
@@ -123,8 +134,41 @@ module Puppeteer::Launcher
123
134
  end
124
135
 
125
136
  # @return {string}
126
- def executable_path
127
- resolve_executable_path
137
+ def executable_path(channel: nil)
138
+ if channel
139
+ executable_path_for_channel(channel.to_s)
140
+ else
141
+ executable_path_for_channel('firefox')
142
+ end
143
+ end
144
+
145
+ FIREFOX_EXECUTABLE_PATHS = {
146
+ windows: "#{ENV['PROGRAMFILES']}\\Firefox Nightly\\firefox.exe",
147
+ darwin: '/Applications/Firefox Nightly.app/Contents/MacOS/firefox',
148
+ linux: '/usr/bin/firefox',
149
+ }.freeze
150
+
151
+ # @param channel [String]
152
+ private def executable_path_for_channel(channel)
153
+ allowed = ['firefox', 'firefox-nightly', 'nightly']
154
+ unless allowed.include?(channel)
155
+ raise ArgumentError.new("Invalid channel: '#{channel}'. Allowed channel is #{allowed}")
156
+ end
157
+
158
+ firefox_path =
159
+ if Puppeteer.env.windows?
160
+ FIREFOX_EXECUTABLE_PATHS[:windows]
161
+ elsif Puppeteer.env.darwin?
162
+ FIREFOX_EXECUTABLE_PATHS[:darwin]
163
+ else
164
+ FIREFOX_EXECUTABLE_PATHS[:linux]
165
+ end
166
+
167
+ unless File.exist?(firefox_path)
168
+ raise "Nightly version of Firefox is not installed on this system.\nExpected path: #{firefox_path}"
169
+ end
170
+
171
+ firefox_path
128
172
  end
129
173
 
130
174
  def product
@@ -32,6 +32,7 @@ module Puppeteer::Launcher
32
32
  # @property {!Object<string, string | undefined>=} env
33
33
  # @property {boolean=} pipe
34
34
  def initialize(options)
35
+ @channel = options[:channel]
35
36
  @executable_path = options[:executable_path]
36
37
  @ignore_default_args = options[:ignore_default_args] || false
37
38
  @handle_SIGINT = options[:handle_SIGINT] || true
@@ -43,7 +44,7 @@ module Puppeteer::Launcher
43
44
  @pipe = options[:pipe] || false
44
45
  end
45
46
 
46
- attr_reader :executable_path, :ignore_default_args, :timeout, :env
47
+ attr_reader :channel, :executable_path, :ignore_default_args, :timeout, :env
47
48
 
48
49
  def handle_SIGINT?
49
50
  @handle_SIGINT
@@ -11,6 +11,7 @@ class Puppeteer::Puppeteer
11
11
  class NoViewport ; end
12
12
 
13
13
  # @param product [String]
14
+ # @param channel [String|Symbol]
14
15
  # @param executable_path [String]
15
16
  # @param ignore_default_args [Array<String>|nil]
16
17
  # @param handle_SIGINT [Boolean]
@@ -30,6 +31,7 @@ class Puppeteer::Puppeteer
30
31
  # @return [Puppeteer::Browser]
31
32
  def launch(
32
33
  product: nil,
34
+ channel: nil,
33
35
  executable_path: nil,
34
36
  ignore_default_args: nil,
35
37
  handle_SIGINT: nil,
@@ -48,6 +50,7 @@ class Puppeteer::Puppeteer
48
50
  slow_mo: nil
49
51
  )
50
52
  options = {
53
+ channel: channel&.to_s,
51
54
  executable_path: executable_path,
52
55
  ignore_default_args: ignore_default_args,
53
56
  handle_SIGINT: handle_SIGINT,
@@ -118,8 +121,8 @@ class Puppeteer::Puppeteer
118
121
  end
119
122
 
120
123
  # @return [String]
121
- def executable_path
122
- launcher.executable_path
124
+ def executable_path(channel: nil)
125
+ launcher.executable_path(channel: channel)
123
126
  end
124
127
 
125
128
  private def launcher
@@ -1,3 +1,3 @@
1
1
  module Puppeteer
2
- VERSION = '0.34.3'
2
+ VERSION = '0.35.0'
3
3
  end
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'rollbar'
33
33
  spec.add_development_dependency 'rspec', '~> 3.10.0 '
34
34
  spec.add_development_dependency 'rspec_junit_formatter' # for CircleCI.
35
- spec.add_development_dependency 'rubocop', '~> 1.17.0'
35
+ spec.add_development_dependency 'rubocop', '~> 1.18.0'
36
36
  spec.add_development_dependency 'rubocop-rspec'
37
37
  spec.add_development_dependency 'sinatra'
38
38
  spec.add_development_dependency 'webrick'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppeteer-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.34.3
4
+ version: 0.35.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-27 00:00:00.000000000 Z
11
+ date: 2021-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -170,14 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 1.17.0
173
+ version: 1.18.0
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: 1.17.0
180
+ version: 1.18.0
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: rubocop-rspec
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -294,7 +294,6 @@ files:
294
294
  - lib/puppeteer/keyboard/key_description.rb
295
295
  - lib/puppeteer/keyboard/us_keyboard_layout.rb
296
296
  - lib/puppeteer/launcher.rb
297
- - lib/puppeteer/launcher/base.rb
298
297
  - lib/puppeteer/launcher/browser_options.rb
299
298
  - lib/puppeteer/launcher/chrome.rb
300
299
  - lib/puppeteer/launcher/chrome_arg_options.rb
@@ -1,66 +0,0 @@
1
- module Puppeteer::Launcher
2
- class Base
3
- # @param {string} projectRoot
4
- # @param {string} preferredRevision
5
- def initialize(project_root:, preferred_revision:, is_puppeteer_core:)
6
- @project_root = project_root
7
- @preferred_revision = preferred_revision
8
- @is_puppeteer_core = is_puppeteer_core
9
- end
10
-
11
- class ExecutablePathNotFound < StandardError; end
12
-
13
- # @returns [String] Chrome Executable file path.
14
- # @raise [ExecutablePathNotFound]
15
- def resolve_executable_path
16
- if !@is_puppeteer_core
17
- # puppeteer-core doesn't take into account PUPPETEER_* env variables.
18
- executable_path = ENV['PUPPETEER_EXECUTABLE_PATH']
19
- if FileTest.exist?(executable_path)
20
- return executable_path
21
- end
22
- raise ExecutablePathNotFound.new(
23
- "Tried to use PUPPETEER_EXECUTABLE_PATH env variable to launch browser but did not find any executable at: #{executable_path}",
24
- )
25
- end
26
-
27
- # temporal logic.
28
- if Puppeteer.env.darwin?
29
- case self
30
- when Chrome
31
- '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
32
- when Firefox
33
- '/Applications/Firefox Nightly.app/Contents/MacOS/firefox'
34
- end
35
- elsif Puppeteer.env.windows?
36
- case self
37
- when Chrome
38
- 'C:\Program Files\Google\Chrome\Application\chrome.exe'
39
- # 'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe'
40
- when Firefox
41
- 'C:\Program Files\Firefox Nightly\firefox.exe'
42
- end
43
- else
44
- case self
45
- when Chrome
46
- '/usr/bin/google-chrome'
47
- when Firefox
48
- '/usr/bin/firefox'
49
- end
50
- end
51
-
52
- # const browserFetcher = new BrowserFetcher(launcher._projectRoot);
53
- # if (!launcher._isPuppeteerCore) {
54
- # const revision = process.env['PUPPETEER_CHROMIUM_REVISION'];
55
- # if (revision) {
56
- # const revisionInfo = browserFetcher.revisionInfo(revision);
57
- # const missingText = !revisionInfo.local ? 'Tried to use PUPPETEER_CHROMIUM_REVISION env variable to launch browser but did not find executable at: ' + revisionInfo.executablePath : null;
58
- # return {executablePath: revisionInfo.executablePath, missingText};
59
- # }
60
- # }
61
- # const revisionInfo = browserFetcher.revisionInfo(launcher._preferredRevision);
62
- # const missingText = !revisionInfo.local ? `Browser is not downloaded. Run "npm install" or "yarn install"` : null;
63
- # return {executablePath: revisionInfo.executablePath, missingText};
64
- end
65
- end
66
- end