puppeteer-ruby 0.0.6 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -2
  3. data/docs/Puppeteer.html +432 -104
  4. data/docs/Puppeteer/AsyncAwaitBehavior.html +1 -1
  5. data/docs/Puppeteer/Browser.html +261 -153
  6. data/docs/Puppeteer/BrowserContext.html +2 -2
  7. data/docs/Puppeteer/BrowserFetcher.html +1 -1
  8. data/docs/Puppeteer/BrowserRunner.html +1 -1
  9. data/docs/Puppeteer/BrowserRunner/BrowserProcess.html +1 -1
  10. data/docs/Puppeteer/CDPSession.html +2 -2
  11. data/docs/Puppeteer/CDPSession/Error.html +1 -1
  12. data/docs/Puppeteer/ConcurrentRubyUtils.html +14 -6
  13. data/docs/Puppeteer/Connection.html +66 -62
  14. data/docs/Puppeteer/Connection/MessageCallback.html +1 -1
  15. data/docs/Puppeteer/Connection/ProtocolError.html +1 -1
  16. data/docs/Puppeteer/Connection/RequestDebugPrinter.html +5 -5
  17. data/docs/Puppeteer/Connection/ResponseDebugPrinter.html +12 -12
  18. data/docs/Puppeteer/ConsoleMessage.html +1 -1
  19. data/docs/Puppeteer/ConsoleMessage/Location.html +1 -1
  20. data/docs/Puppeteer/DOMWorld.html +130 -33
  21. data/docs/Puppeteer/DOMWorld/DetachedError.html +1 -1
  22. data/docs/Puppeteer/DOMWorld/DocumentEvaluationError.html +1 -1
  23. data/docs/Puppeteer/DebugPrint.html +1 -1
  24. data/docs/Puppeteer/Device.html +1 -1
  25. data/docs/Puppeteer/Devices.html +1 -1
  26. data/docs/Puppeteer/ElementHandle.html +960 -218
  27. data/docs/Puppeteer/ElementHandle/BoundingBox.html +507 -0
  28. data/docs/Puppeteer/ElementHandle/BoxModel.html +404 -0
  29. data/docs/Puppeteer/ElementHandle/ElementNotFoundError.html +5 -5
  30. data/docs/Puppeteer/ElementHandle/ElementNotVisibleError.html +5 -5
  31. data/docs/Puppeteer/ElementHandle/Point.html +40 -29
  32. data/docs/Puppeteer/ElementHandle/ScrollIntoViewError.html +1 -1
  33. data/docs/Puppeteer/EmulationManager.html +1 -1
  34. data/docs/Puppeteer/EventCallbackable.html +83 -17
  35. data/docs/Puppeteer/EventCallbackable/EventListeners.html +1 -1
  36. data/docs/Puppeteer/ExecutionContext.html +114 -11
  37. data/docs/Puppeteer/ExecutionContext/EvaluationError.html +1 -1
  38. data/docs/Puppeteer/ExecutionContext/JavaScriptExpression.html +1 -1
  39. data/docs/Puppeteer/ExecutionContext/JavaScriptFunction.html +1 -1
  40. data/docs/Puppeteer/FileChooser.html +455 -0
  41. data/docs/Puppeteer/Frame.html +425 -289
  42. data/docs/Puppeteer/FrameManager.html +23 -27
  43. data/docs/Puppeteer/FrameManager/NavigationError.html +1 -1
  44. data/docs/Puppeteer/IfPresent.html +1 -1
  45. data/docs/Puppeteer/JSHandle.html +1 -1
  46. data/docs/Puppeteer/Keyboard.html +1 -1
  47. data/docs/Puppeteer/Keyboard/KeyDefinition.html +1 -1
  48. data/docs/Puppeteer/Keyboard/KeyDescription.html +1 -1
  49. data/docs/Puppeteer/Launcher.html +1 -1
  50. data/docs/Puppeteer/Launcher/Base.html +1 -1
  51. data/docs/Puppeteer/Launcher/Base/ExecutablePathNotFound.html +1 -1
  52. data/docs/Puppeteer/Launcher/BrowserOptions.html +1 -1
  53. data/docs/Puppeteer/Launcher/Chrome.html +64 -23
  54. data/docs/Puppeteer/Launcher/Chrome/DefaultArgs.html +1 -1
  55. data/docs/Puppeteer/Launcher/ChromeArgOptions.html +1 -1
  56. data/docs/Puppeteer/Launcher/LaunchOptions.html +1 -1
  57. data/docs/Puppeteer/LifecycleWatcher.html +1 -1
  58. data/docs/Puppeteer/LifecycleWatcher/ExpectedLifecycle.html +1 -1
  59. data/docs/Puppeteer/LifecycleWatcher/FrameDetachedError.html +1 -1
  60. data/docs/Puppeteer/LifecycleWatcher/TerminatedError.html +1 -1
  61. data/docs/Puppeteer/Mouse.html +31 -41
  62. data/docs/Puppeteer/Mouse/Button.html +1 -1
  63. data/docs/Puppeteer/NetworkManager.html +2 -2
  64. data/docs/Puppeteer/NetworkManager/Credentials.html +1 -1
  65. data/docs/Puppeteer/Page.html +1049 -354
  66. data/docs/Puppeteer/Page/FileChooserTimeoutError.html +206 -0
  67. data/docs/Puppeteer/Page/ScreenshotOptions.html +1 -1
  68. data/docs/Puppeteer/Page/ScriptTag.html +24 -24
  69. data/docs/Puppeteer/Page/StyleTag.html +19 -19
  70. data/docs/Puppeteer/Page/TargetCrashedError.html +1 -1
  71. data/docs/Puppeteer/RemoteObject.html +173 -37
  72. data/docs/Puppeteer/Target.html +150 -198
  73. data/docs/Puppeteer/Target/InitializeFailure.html +1 -1
  74. data/docs/Puppeteer/Target/TargetInfo.html +1 -1
  75. data/docs/Puppeteer/TimeoutError.html +2 -2
  76. data/docs/Puppeteer/TimeoutSettings.html +1 -1
  77. data/docs/Puppeteer/TouchScreen.html +1 -1
  78. data/docs/Puppeteer/Viewport.html +81 -1
  79. data/docs/Puppeteer/WaitTask.html +1 -1
  80. data/docs/Puppeteer/WaitTask/TerminatedError.html +1 -1
  81. data/docs/Puppeteer/WaitTask/TimeoutError.html +1 -1
  82. data/docs/Puppeteer/WebSocket.html +26 -26
  83. data/docs/Puppeteer/WebSocket/DriverImpl.html +1 -1
  84. data/docs/Puppeteer/WebSocket/TransportError.html +124 -0
  85. data/docs/Puppeteer/WebSocketTransport.html +9 -9
  86. data/docs/Puppeteer/WebSocktTransportError.html +1 -1
  87. data/docs/_index.html +40 -19
  88. data/docs/class_list.html +1 -1
  89. data/docs/file.README.html +7 -3
  90. data/docs/index.html +7 -3
  91. data/docs/method_list.html +785 -513
  92. data/docs/top-level-namespace.html +1 -1
  93. data/lib/puppeteer.rb +43 -13
  94. data/lib/puppeteer/browser.rb +26 -6
  95. data/lib/puppeteer/browser_runner.rb +1 -1
  96. data/lib/puppeteer/concurrent_ruby_utils.rb +6 -2
  97. data/lib/puppeteer/connection.rb +13 -1
  98. data/lib/puppeteer/dom_world.rb +16 -18
  99. data/lib/puppeteer/element_handle.rb +147 -168
  100. data/lib/puppeteer/element_handle/bounding_box.rb +12 -0
  101. data/lib/puppeteer/element_handle/box_model.rb +19 -0
  102. data/lib/puppeteer/element_handle/point.rb +26 -0
  103. data/lib/puppeteer/errors.rb +1 -3
  104. data/lib/puppeteer/event_callbackable.rb +11 -0
  105. data/lib/puppeteer/execution_context.rb +13 -0
  106. data/lib/puppeteer/file_chooser.rb +29 -0
  107. data/lib/puppeteer/frame.rb +19 -1
  108. data/lib/puppeteer/frame_manager.rb +0 -2
  109. data/lib/puppeteer/launcher.rb +6 -6
  110. data/lib/puppeteer/launcher/chrome.rb +49 -3
  111. data/lib/puppeteer/mouse.rb +3 -8
  112. data/lib/puppeteer/page.rb +126 -54
  113. data/lib/puppeteer/remote_object.rb +15 -1
  114. data/lib/puppeteer/target.rb +25 -25
  115. data/lib/puppeteer/version.rb +1 -1
  116. data/lib/puppeteer/viewport.rb +18 -0
  117. data/lib/puppeteer/web_socket.rb +3 -1
  118. data/lib/puppeteer/web_socket_transport.rb +8 -8
  119. data/puppeteer-ruby.png +0 -0
  120. metadata +12 -4
  121. data/Dockerfile +0 -6
  122. data/docker-compose.yml +0 -15
@@ -52,7 +52,7 @@ class Puppeteer::RemoteObject
52
52
  client.send_message('Runtime.getProperties', objectId: @object_id, ownProperties: true)
53
53
  end
54
54
 
55
- # used in ElementHandle#content_frame
55
+ # used in ElementHandle#content_frame, ElementHandle#upload_file
56
56
  def node_info(client)
57
57
  client.send_message('DOM.describeNode', objectId: @object_id)
58
58
  end
@@ -62,6 +62,15 @@ class Puppeteer::RemoteObject
62
62
  client.send_message('DOM.getContentQuads', objectId: @object_id)
63
63
  end
64
64
 
65
+ # used in ElementHandle#_box_model
66
+ def box_model(client)
67
+ client.send_message('DOM.getBoxModel', objectId: @object_id)
68
+ rescue => err
69
+ debug_puts(err)
70
+ nil
71
+ end
72
+
73
+
65
74
  # helper#valueFromRemoteObject
66
75
  def value
67
76
  if @unserializable_value
@@ -126,4 +135,9 @@ class Puppeteer::RemoteObject
126
135
  { value: value }
127
136
  end
128
137
  end
138
+
139
+ # used in ElementHandle#upload_file
140
+ def set_file_input_files(client, files, backend_node_id)
141
+ client.send_message('DOM.setFileInputFiles', objectId: @object_id, files: files, backendNodeId: backend_node_id)
142
+ end
129
143
  end
@@ -33,47 +33,47 @@ class Puppeteer::Target
33
33
  # this._pagePromise = null;
34
34
  # /** @type {?Promise<!Worker>} */
35
35
  # this._workerPromise = null;
36
- @initialized_promise = resolvable_future
37
- # this._isClosedPromise = new Promise(fulfill => this._closedCallback = fulfill);
36
+ @initialize_callback_promise = resolvable_future
37
+ @initialized_promise = @initialize_callback_promise.then do |success|
38
+ handle_initialized(success)
39
+ end
40
+ @is_closed_promise = resolvable_future
38
41
 
39
42
  @is_initialized = @target_info.type != 'page' || !@target_info.url.empty?
40
43
 
41
44
  if @is_initialized
42
- handle_initialized(true)
45
+ @initialize_callback_promise.fulfill(true)
43
46
  end
44
47
  end
45
48
 
46
- attr_reader :target_id, :initialized_promise
49
+ attr_reader :target_id, :initialized_promise, :is_closed_promise
50
+
51
+ def closed_callback
52
+ @is_closed_promise.fulfill(true)
53
+ end
47
54
 
48
55
  class InitializeFailure < StandardError; end
49
56
 
50
- def handle_initialized(success)
57
+ def ignore_initialize_callback_promise
58
+ unless @initialize_callback_promise.fulfilled?
59
+ @initialize_callback_promise.fulfill(false)
60
+ end
61
+ end
62
+
63
+ private def handle_initialized(success)
51
64
  unless success
52
- @initialized_promise.reject(InitializeFailure.new('Failed to create target for page'))
65
+ raise InitializeFailure.new('Failed to create target for page')
53
66
  end
54
- @on_initialize_succeeded&.call
55
- @initialized_promise.fulfill(true)
56
67
  opener_page = opener&.page
57
68
  if opener_page.nil? || type != 'page'
58
- return
69
+ return true
59
70
  end
60
71
  # if (!openerPage.listenerCount(Events.Page.Popup))
61
72
  # return true;
62
73
  popup_page = page
63
74
  opener_page.emit_event('Events.Page.Popup', popup_page)
64
- end
65
-
66
- def on_initialize_succeeded(&block)
67
- @on_initialize_succeeded = block
68
- end
69
-
70
- def handle_closed
71
- @closed = true
72
- @on_close&.call
73
- end
74
75
 
75
- def on_close(&block)
76
- @on_close = block
76
+ true
77
77
  end
78
78
 
79
79
  def initialized?
@@ -85,7 +85,7 @@ class Puppeteer::Target
85
85
  end
86
86
 
87
87
  def page
88
- if ['page', 'background_page'].include?(@target_info.type) && @page.nil?
88
+ if ['page', 'background_page', 'webview'].include?(@target_info.type) && @page.nil?
89
89
  client = @session_factory.call
90
90
  @page = Puppeteer::Page.create(client, self, @ignore_https_errors, @default_viewport, @screenshot_task_queue)
91
91
  end
@@ -135,16 +135,16 @@ class Puppeteer::Target
135
135
  def opener
136
136
  opener_id = @target_info.opener_id
137
137
  return nil if opener_id.nil?
138
- browser.targets[opener_id]
138
+ browser.send(:find_target_by_id, opener_id)
139
139
  end
140
140
 
141
141
  # @param {!Protocol.Target.TargetInfo} targetInfo
142
142
  def handle_target_info_changed(target_info)
143
143
  @target_info = target_info
144
144
 
145
- if !@is_initialized && (@target_info.type != 'page' || !target_info.url.empty?)
145
+ if !@is_initialized && (@target_info.type != 'page' || !@target_info.url.empty?)
146
146
  @is_initialized = true
147
- handle_initialized(true)
147
+ @initialize_callback_promise.fulfill(true)
148
148
  end
149
149
  end
150
150
  end
@@ -1,3 +1,3 @@
1
1
  class Puppeteer
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.12'
3
3
  end
@@ -33,4 +33,22 @@ class Puppeteer::Viewport
33
33
  def landscape?
34
34
  @is_landscape
35
35
  end
36
+
37
+ def merge(
38
+ width: nil,
39
+ height: nil,
40
+ device_scale_factor: nil,
41
+ is_mobile: nil,
42
+ has_touch: nil,
43
+ is_landscape: nil)
44
+
45
+ Puppeteer::Viewport.new(
46
+ width: width || @width,
47
+ height: height || @height,
48
+ device_scale_factor: device_scale_factor || @device_scale_factor,
49
+ is_mobile: is_mobile.nil? ? @is_mobile : is_mobile,
50
+ has_touch: has_touch.nil? ? @has_touch : has_touch,
51
+ is_landscape: is_landscape.nil? ? @is_landscape : is_landscape,
52
+ )
53
+ end
36
54
  end
@@ -43,6 +43,8 @@ class Puppeteer::WebSocket
43
43
  end
44
44
  end
45
45
 
46
+ class TransportError < StandardError; end
47
+
46
48
  private def setup
47
49
  @ready_state = STATE_CONNECTING
48
50
  @driver.on(:open) do
@@ -55,7 +57,7 @@ class Puppeteer::WebSocket
55
57
  end
56
58
  @driver.on(:error) do |event|
57
59
  if !handle_on_error(error_message: event.message)
58
- raise Puppeteer::WebSocktTransportError.new(event.message)
60
+ raise TransportError.new(event.message)
59
61
  end
60
62
  end
61
63
  @driver.on(:message) do |event|
@@ -6,14 +6,14 @@ class Puppeteer::WebSocketTransport
6
6
  url: url,
7
7
  max_payload_size: 256 * 1024 * 1024, # 256MB
8
8
  )
9
- promise = resolvable_future
10
- ws.on_open do
11
- promise.fulfill(Puppeteer::WebSocketTransport.new(ws))
12
- end
13
- ws.on_error do |error_message|
14
- promise.reject(Puppeteer::WebSocktTransportError.new(error_message))
15
- end
16
- promise.value!
9
+ (resolvable_future do |future|
10
+ ws.on_open do
11
+ future.fulfill(Puppeteer::WebSocketTransport.new(ws))
12
+ end
13
+ ws.on_error do |error_message|
14
+ future.reject(Puppeteer::WebSocket::TransportError.new(error_message))
15
+ end
16
+ end).value!
17
17
  end
18
18
 
19
19
  # @param {!WebSocket::Driver} web_socket
Binary file
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.0.6
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-25 00:00:00.000000000 Z
11
+ date: 2020-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -177,13 +177,11 @@ files:
177
177
  - ".rspec"
178
178
  - ".rubocop.yml"
179
179
  - ".travis.yml"
180
- - Dockerfile
181
180
  - Gemfile
182
181
  - README.md
183
182
  - Rakefile
184
183
  - bin/console
185
184
  - bin/setup
186
- - docker-compose.yml
187
185
  - docs/Puppeteer.html
188
186
  - docs/Puppeteer/AsyncAwaitBehavior.html
189
187
  - docs/Puppeteer/Browser.html
@@ -208,6 +206,8 @@ files:
208
206
  - docs/Puppeteer/Device.html
209
207
  - docs/Puppeteer/Devices.html
210
208
  - docs/Puppeteer/ElementHandle.html
209
+ - docs/Puppeteer/ElementHandle/BoundingBox.html
210
+ - docs/Puppeteer/ElementHandle/BoxModel.html
211
211
  - docs/Puppeteer/ElementHandle/ElementNotFoundError.html
212
212
  - docs/Puppeteer/ElementHandle/ElementNotVisibleError.html
213
213
  - docs/Puppeteer/ElementHandle/Point.html
@@ -219,6 +219,7 @@ files:
219
219
  - docs/Puppeteer/ExecutionContext/EvaluationError.html
220
220
  - docs/Puppeteer/ExecutionContext/JavaScriptExpression.html
221
221
  - docs/Puppeteer/ExecutionContext/JavaScriptFunction.html
222
+ - docs/Puppeteer/FileChooser.html
222
223
  - docs/Puppeteer/Frame.html
223
224
  - docs/Puppeteer/FrameManager.html
224
225
  - docs/Puppeteer/FrameManager/NavigationError.html
@@ -244,6 +245,7 @@ files:
244
245
  - docs/Puppeteer/NetworkManager.html
245
246
  - docs/Puppeteer/NetworkManager/Credentials.html
246
247
  - docs/Puppeteer/Page.html
248
+ - docs/Puppeteer/Page/FileChooserTimeoutError.html
247
249
  - docs/Puppeteer/Page/ScreenshotOptions.html
248
250
  - docs/Puppeteer/Page/ScriptTag.html
249
251
  - docs/Puppeteer/Page/StyleTag.html
@@ -261,6 +263,7 @@ files:
261
263
  - docs/Puppeteer/WaitTask/TimeoutError.html
262
264
  - docs/Puppeteer/WebSocket.html
263
265
  - docs/Puppeteer/WebSocket/DriverImpl.html
266
+ - docs/Puppeteer/WebSocket/TransportError.html
264
267
  - docs/Puppeteer/WebSocketTransport.html
265
268
  - docs/Puppeteer/WebSocktTransportError.html
266
269
  - docs/_index.html
@@ -292,10 +295,14 @@ files:
292
295
  - lib/puppeteer/devices.rb
293
296
  - lib/puppeteer/dom_world.rb
294
297
  - lib/puppeteer/element_handle.rb
298
+ - lib/puppeteer/element_handle/bounding_box.rb
299
+ - lib/puppeteer/element_handle/box_model.rb
300
+ - lib/puppeteer/element_handle/point.rb
295
301
  - lib/puppeteer/emulation_manager.rb
296
302
  - lib/puppeteer/errors.rb
297
303
  - lib/puppeteer/event_callbackable.rb
298
304
  - lib/puppeteer/execution_context.rb
305
+ - lib/puppeteer/file_chooser.rb
299
306
  - lib/puppeteer/frame.rb
300
307
  - lib/puppeteer/frame_manager.rb
301
308
  - lib/puppeteer/if_present.rb
@@ -324,6 +331,7 @@ files:
324
331
  - lib/puppeteer/web_socket.rb
325
332
  - lib/puppeteer/web_socket_transport.rb
326
333
  - puppeteer-ruby.gemspec
334
+ - puppeteer-ruby.png
327
335
  homepage: https://github.com/YusukeIwaki/puppeteer-ruby
328
336
  licenses: []
329
337
  metadata: {}
data/Dockerfile DELETED
@@ -1,6 +0,0 @@
1
- FROM ruby:2.6.5
2
-
3
- RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
4
- && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
5
- && apt-get update && apt-get install -y google-chrome-stable --no-install-recommends \
6
- && rm -rf /var/lib/apt/lists/*
@@ -1,15 +0,0 @@
1
- version: "3"
2
- services:
3
- dev:
4
- image: ruby-with-chrome:2.6
5
- build:
6
- context: .
7
- dockerfile: Dockerfile
8
- volumes:
9
- - .:/usr/src/app
10
- - bundler-cache:/usr/local/bundle
11
- working_dir: /usr/src/app
12
-
13
- volumes:
14
- bundler-cache:
15
- driver: local