puppeteer-ruby 0.41.0 → 0.43.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|