puppeteer-ruby 0.41.0 → 0.43.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/CHANGELOG.md +9 -1
- data/docs/api_coverage.md +221 -206
- data/lib/puppeteer/browser.rb +109 -75
- data/lib/puppeteer/browser_connector.rb +67 -0
- data/lib/puppeteer/chrome_target_manager.rb +256 -0
- data/lib/puppeteer/connection.rb +16 -0
- data/lib/puppeteer/element_handle.rb +10 -22
- data/lib/puppeteer/events.rb +9 -0
- data/lib/puppeteer/firefox_target_manager.rb +158 -0
- data/lib/puppeteer/frame.rb +4 -0
- data/lib/puppeteer/frame_manager.rb +69 -38
- data/lib/puppeteer/launcher/chrome.rb +3 -56
- data/lib/puppeteer/launcher/firefox.rb +1 -55
- data/lib/puppeteer/lifecycle_watcher.rb +2 -1
- data/lib/puppeteer/page.rb +38 -29
- data/lib/puppeteer/puppeteer.rb +1 -1
- data/lib/puppeteer/remote_object.rb +4 -0
- data/lib/puppeteer/target.rb +14 -1
- data/lib/puppeteer/version.rb +1 -1
- data/lib/puppeteer.rb +3 -0
- data/puppeteer-ruby.gemspec +1 -1
- metadata +7 -4
data/lib/puppeteer/page.rb
CHANGED
@@ -50,33 +50,11 @@ class Puppeteer::Page
|
|
50
50
|
@workers = {}
|
51
51
|
@user_drag_interception_enabled = false
|
52
52
|
|
53
|
-
@
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
# We detach from all other types out of an abundance of caution.
|
59
|
-
# See https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/devtools_agent_host_impl.cc?ss=chromium&q=f:devtools%20-f:out%20%22::kTypePage%5B%5D%22
|
60
|
-
# for the complete list of available types.
|
61
|
-
@client.async_send_message('Target.detachFromTarget', sessionId: event['sessionId'])
|
62
|
-
next
|
63
|
-
end
|
64
|
-
|
65
|
-
if event['targetInfo']['type'] == 'worker'
|
66
|
-
session = Puppeteer::Connection.from_session(@client).session(event['sessionId']) # rubocop:disable Lint/UselessAssignment
|
67
|
-
# const worker = new Worker(session, event.targetInfo.url, this._addConsoleMessage.bind(this), this._handleException.bind(this));
|
68
|
-
# this._workers.set(event.sessionId, worker);
|
69
|
-
# this.emit(PageEmittedEvents::WorkerCreated, worker);
|
70
|
-
end
|
71
|
-
end
|
72
|
-
@client.add_event_listener('Target.detachedFromTarget') do |event|
|
73
|
-
session_id = event['sessionId']
|
74
|
-
worker = @workers[session_id]
|
75
|
-
next unless worker
|
76
|
-
|
77
|
-
emit_event(PageEmittedEvents::WorkerDestroyed, worker)
|
78
|
-
@workers.delete(session_id)
|
79
|
-
end
|
53
|
+
@target.target_manager.add_target_interceptor(@client, method(:handle_attached_to_target))
|
54
|
+
@target_gone_listener_id = @target.target_manager.add_event_listener(
|
55
|
+
TargetManagerEmittedEvents::TargetGone,
|
56
|
+
&method(:handle_detached_from_target)
|
57
|
+
)
|
80
58
|
|
81
59
|
@frame_manager.on_event(FrameManagerEmittedEvents::FrameAttached) do |event|
|
82
60
|
emit_event(PageEmittedEvents::FrameAttached, event)
|
@@ -135,15 +113,46 @@ class Puppeteer::Page
|
|
135
113
|
handle_file_chooser(event)
|
136
114
|
end
|
137
115
|
@target.is_closed_promise.then do
|
116
|
+
@target.target_manager.remove_target_interceptor(@client, method(:handle_attached_to_target))
|
117
|
+
@target.target_manager.remove_event_listener(@target_gone_listener_id)
|
118
|
+
|
138
119
|
emit_event(PageEmittedEvents::Close)
|
139
120
|
@closed = true
|
140
121
|
end
|
141
122
|
end
|
142
123
|
|
124
|
+
private def handle_detached_from_target(target)
|
125
|
+
session_id = target.session&.id
|
126
|
+
@frame_manager.handle_detached_from_target(target)
|
127
|
+
return unless session_id
|
128
|
+
worker = @workers.delete(session_id)
|
129
|
+
return unless worker
|
130
|
+
emit_event(PageEmittedEvents::WorkerDestroyed, worker)
|
131
|
+
end
|
132
|
+
|
133
|
+
private def handle_attached_to_target(target, _)
|
134
|
+
@frame_manager.handle_attached_to_target(target)
|
135
|
+
if target.raw_type == 'worker'
|
136
|
+
# const session = createdTarget._session();
|
137
|
+
# assert(session);
|
138
|
+
# const worker = new WebWorker(
|
139
|
+
# session,
|
140
|
+
# createdTarget.url(),
|
141
|
+
# this.#addConsoleMessage.bind(this),
|
142
|
+
# this.#handleException.bind(this)
|
143
|
+
# );
|
144
|
+
# this.#workers.set(session.id(), worker);
|
145
|
+
# this.emit(PageEmittedEvents.WorkerCreated, worker);
|
146
|
+
end
|
147
|
+
|
148
|
+
if target.session
|
149
|
+
@target.target_manager.add_target_interceptor(target.session, method(:handle_attached_to_target))
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
143
153
|
def init
|
144
154
|
await_all(
|
145
|
-
@frame_manager.async_init,
|
146
|
-
@client.async_send_message('Target.setAutoAttach', autoAttach: true, waitForDebuggerOnStart: false, flatten: true),
|
155
|
+
@frame_manager.async_init(@target.target_id),
|
147
156
|
@client.async_send_message('Performance.enable'),
|
148
157
|
@client.async_send_message('Log.enable'),
|
149
158
|
)
|
data/lib/puppeteer/puppeteer.rb
CHANGED
@@ -110,7 +110,7 @@ class Puppeteer::Puppeteer
|
|
110
110
|
default_viewport: default_viewport,
|
111
111
|
slow_mo: slow_mo,
|
112
112
|
}.compact
|
113
|
-
browser =
|
113
|
+
browser = Puppeteer::BrowserConnector.new(options).connect_to_browser
|
114
114
|
if block_given?
|
115
115
|
begin
|
116
116
|
yield(browser)
|
@@ -176,4 +176,8 @@ class Puppeteer::RemoteObject
|
|
176
176
|
def set_file_input_files(client, files, backend_node_id)
|
177
177
|
client.send_message('DOM.setFileInputFiles', objectId: @object_id, files: files, backendNodeId: backend_node_id)
|
178
178
|
end
|
179
|
+
|
180
|
+
def scroll_into_view_if_needed(client)
|
181
|
+
client.send_message('DOM.scrollIntoViewIfNeeded', objectId: @object_id)
|
182
|
+
end
|
179
183
|
end
|
data/lib/puppeteer/target.rb
CHANGED
@@ -19,11 +19,15 @@ class Puppeteer::Target
|
|
19
19
|
# @param {boolean} ignoreHTTPSErrors
|
20
20
|
# @param {?Puppeteer.Viewport} defaultViewport
|
21
21
|
def initialize(target_info:,
|
22
|
+
session:,
|
22
23
|
browser_context:,
|
24
|
+
target_manager:,
|
23
25
|
session_factory:,
|
24
26
|
ignore_https_errors:,
|
25
27
|
default_viewport:,
|
26
28
|
is_page_target_callback:)
|
29
|
+
@session = session
|
30
|
+
@target_manager = target_manager
|
27
31
|
@target_info = target_info
|
28
32
|
@browser_context = browser_context
|
29
33
|
@target_id = target_info.target_id
|
@@ -83,13 +87,22 @@ class Puppeteer::Target
|
|
83
87
|
@is_initialized
|
84
88
|
end
|
85
89
|
|
90
|
+
# @return [CDPSession|nil]
|
91
|
+
def session
|
92
|
+
@session
|
93
|
+
end
|
94
|
+
|
86
95
|
def create_cdp_session
|
87
96
|
@session_factory.call
|
88
97
|
end
|
89
98
|
|
99
|
+
def target_manager
|
100
|
+
@target_manager
|
101
|
+
end
|
102
|
+
|
90
103
|
def page
|
91
104
|
if @is_page_target_callback.call(@target_info) && @page.nil?
|
92
|
-
client = @session_factory.call
|
105
|
+
client = @session || @session_factory.call
|
93
106
|
@page = Puppeteer::Page.create(client, self, @ignore_https_errors, @default_viewport)
|
94
107
|
end
|
95
108
|
@page
|
data/lib/puppeteer/version.rb
CHANGED
data/lib/puppeteer.rb
CHANGED
@@ -22,7 +22,9 @@ require 'puppeteer/aria_query_handler'
|
|
22
22
|
require 'puppeteer/browser'
|
23
23
|
require 'puppeteer/browser_context'
|
24
24
|
require 'puppeteer/browser_runner'
|
25
|
+
require 'puppeteer/browser_connector'
|
25
26
|
require 'puppeteer/cdp_session'
|
27
|
+
require 'puppeteer/chrome_target_manager'
|
26
28
|
require 'puppeteer/connection'
|
27
29
|
require 'puppeteer/console_message'
|
28
30
|
require 'puppeteer/coverage'
|
@@ -36,6 +38,7 @@ require 'puppeteer/exception_details'
|
|
36
38
|
require 'puppeteer/executable_path_finder'
|
37
39
|
require 'puppeteer/execution_context'
|
38
40
|
require 'puppeteer/file_chooser'
|
41
|
+
require 'puppeteer/firefox_target_manager'
|
39
42
|
require 'puppeteer/frame'
|
40
43
|
require 'puppeteer/frame_manager'
|
41
44
|
require 'puppeteer/http_request'
|
data/puppeteer-ruby.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency 'rollbar'
|
33
33
|
spec.add_development_dependency 'rspec', '~> 3.11.0'
|
34
34
|
spec.add_development_dependency 'rspec_junit_formatter' # for CircleCI.
|
35
|
-
spec.add_development_dependency 'rubocop', '~> 1.
|
35
|
+
spec.add_development_dependency 'rubocop', '~> 1.36.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.
|
4
|
+
version: 0.43.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YusukeIwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-13 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.
|
173
|
+
version: 1.36.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.
|
180
|
+
version: 1.36.0
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: rubocop-rspec
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -255,10 +255,12 @@ files:
|
|
255
255
|
- lib/puppeteer.rb
|
256
256
|
- lib/puppeteer/aria_query_handler.rb
|
257
257
|
- lib/puppeteer/browser.rb
|
258
|
+
- lib/puppeteer/browser_connector.rb
|
258
259
|
- lib/puppeteer/browser_context.rb
|
259
260
|
- lib/puppeteer/browser_fetcher.rb
|
260
261
|
- lib/puppeteer/browser_runner.rb
|
261
262
|
- lib/puppeteer/cdp_session.rb
|
263
|
+
- lib/puppeteer/chrome_target_manager.rb
|
262
264
|
- lib/puppeteer/concurrent_ruby_utils.rb
|
263
265
|
- lib/puppeteer/connection.rb
|
264
266
|
- lib/puppeteer/console_message.rb
|
@@ -285,6 +287,7 @@ files:
|
|
285
287
|
- lib/puppeteer/executable_path_finder.rb
|
286
288
|
- lib/puppeteer/execution_context.rb
|
287
289
|
- lib/puppeteer/file_chooser.rb
|
290
|
+
- lib/puppeteer/firefox_target_manager.rb
|
288
291
|
- lib/puppeteer/frame.rb
|
289
292
|
- lib/puppeteer/frame_manager.rb
|
290
293
|
- lib/puppeteer/geolocation.rb
|