puppeteer-ruby 0.0.27 → 0.31.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b7f606d2715459bc7986833e68c8ab501e18f2b67473773daf9a65f1baa978db
4
- data.tar.gz: 074e5845c7019ae74ea66b9284e7b76ea3deb5fe03bac1fc970c5c1ff3091ade
3
+ metadata.gz: 4c703eeb4952a1a5102ce3616daee3333747f37d790ad65efb8c1f95ac603f8b
4
+ data.tar.gz: 355cf71106ffce2576aea66680ff5fbb7f35b263da8abce5dd7056ff8fdca019
5
5
  SHA512:
6
- metadata.gz: 20a9d1aba0853ea1dbc54786b752d814a6f1c7764d08cc8adc1d372db15e0875dc6cdc8ba474b44f1af5a0879f12d4138d9ebb9c06fbbaf7b85a8aaee62d7ac8
7
- data.tar.gz: 37a24532b303653427a30c8f1cc505d99b2eaa999c3d5ca350fbb2bcabda520e2746edc8f43ec0f965b2628b75148466c1cb1d9e26854179c078f4c75f5a05cb
6
+ metadata.gz: bb2f9d778d6f99c510d78025dba4f39a22ce2cdc8bdb278b6a8911e3498ee94268237fe929a6a0473a7d94a6f8f3839ad43e76a2c2825a54eb9cbc824078a980
7
+ data.tar.gz: 4d40e88f6ec1476854673a3a49c8598e24c5a0bd1de65c4ee09e87ef85773d96b12b415e1f28352b096d3e0fa95ae1267c81fa8ca34f30deaa3fe4308bbd45e0
data/CHANGELOG.md CHANGED
@@ -1,7 +1,42 @@
1
- ### master [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.27...master)]
1
+ ### master [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.1...master)]
2
2
 
3
3
  * xxx
4
4
 
5
+ ### 0.31.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.31.0...0.31.1)]
6
+
7
+ Bugfix:
8
+
9
+ * Fix `Page#pdf` to work on Windows.
10
+
11
+ ### 0.31.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.30.0...0.31.0)]
12
+
13
+ New features:
14
+
15
+ * Now puppeteer-ruby is compatible with Windows
16
+
17
+ Bugfix:
18
+
19
+ * Fix `Page#add_script_tag` and `Page#add_style_tag` to work
20
+
21
+ ### 0.30.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.29.0...0.30.0)]
22
+
23
+ New features:
24
+
25
+ * S, SS, Seval, SSeval is renamed to query_selector, query_selector_all, eval_on_selector, eval_on_selector_all
26
+
27
+ ### 0.29.0 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.28.1...0.29.0)]
28
+
29
+ New features:
30
+
31
+ * Add `AriaQueryHandler`. Now we can use "aria/...." for selectors.
32
+
33
+ ### 0.28.1 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.27...0.28.1)]
34
+
35
+ New features:
36
+
37
+ * Add `Page#emulate_idle_state`
38
+ * Change versioning rule.
39
+
5
40
  ### 0.0.27 [[diff](https://github.com/YusukeIwaki/puppeteer-ruby/compare/0.0.26...0.0.27)]
6
41
 
7
42
  New features:
data/README.md CHANGED
@@ -1,18 +1,36 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/puppeteer-ruby.svg)](https://badge.fury.io/rb/puppeteer-ruby)
2
2
 
3
- # Puppeteer in Ruby [UNDER HEAVY DEVELOPMENT]
3
+ # Puppeteer in Ruby
4
4
 
5
5
  A Ruby port of [puppeteer](https://pptr.dev/).
6
6
 
7
7
  ![logo](puppeteer-ruby.png)
8
8
 
9
- REMARK: This Gem is NOT production-ready!!
9
+ REMARK: This Gem covers just a part of Puppeteer APIs. See [API Coverage list](./docs/api_coverage.md) for detail. Feedbacks and feature requests are welcome :)
10
10
 
11
11
  ## Getting Started
12
12
 
13
+ ### Installation
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'puppeteer-ruby'
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install puppeteer-ruby
28
+
13
29
  ### Capture a site
14
30
 
15
31
  ```ruby
32
+ require 'puppeteer'
33
+
16
34
  Puppeteer.launch(headless: false) do |browser|
17
35
  page = browser.pages.first || browser.new_page
18
36
  page.goto("https://github.com/YusukeIwaki")
@@ -30,18 +48,18 @@ Puppeteer.launch(headless: false, slow_mo: 50, args: ['--guest', '--window-size=
30
48
  page.viewport = Puppeteer::Viewport.new(width: 1280, height: 800)
31
49
  page.goto("https://github.com/", wait_until: 'domcontentloaded')
32
50
 
33
- form = page.S("form.js-site-search-form")
34
- searchInput = form.S("input.header-search-input")
51
+ form = page.query_selector("form.js-site-search-form")
52
+ searchInput = form.query_selector("input.header-search-input")
35
53
  searchInput.type_text("puppeteer")
36
54
  await_all(
37
55
  page.async_wait_for_navigation,
38
56
  searchInput.async_press("Enter"),
39
57
  )
40
58
 
41
- list = page.S("ul.repo-list")
42
- items = list.SS("div.f4")
59
+ list = page.query_selector("ul.repo-list")
60
+ items = list.query_selector_all("div.f4")
43
61
  items.each do |item|
44
- title = item.Seval("a", "a => a.innerText")
62
+ title = item.eval_on_selector("a", "a => a.innerText")
45
63
  puts("==> #{title}")
46
64
  end
47
65
  end
@@ -50,6 +68,8 @@ end
50
68
  ### Evaluate JavaScript
51
69
 
52
70
  ```ruby
71
+ require 'puppeteer'
72
+
53
73
  Puppeteer.launch do |browser|
54
74
  page = browser.pages.last || browser.new_page
55
75
  page.goto 'https://github.com/YusukeIwaki'
@@ -114,7 +134,7 @@ RSpec.describe 'hotel.testplanisphere.dev', type: :feature do
114
134
  puppeteer_page = @browser.pages.first
115
135
  puppeteer_page.wait_for_selector('li.nav-item')
116
136
 
117
- reservation_link = puppeteer_page.SS('li.nav-item')[1]
137
+ reservation_link = puppeteer_page.query_selector_all('li.nav-item')[1]
118
138
 
119
139
  await_all(
120
140
  puppeteer_page.async_wait_for_navigation,
@@ -131,7 +151,7 @@ RSpec.describe 'hotel.testplanisphere.dev', type: :feature do
131
151
 
132
152
  # expectation with puppeteer
133
153
  puppeteer_page = @browser.pages.first
134
- body_text = puppeteer_page.Seval('body', '(el) => el.textContent')
154
+ body_text = puppeteer_page.eval_on_selector('body', '(el) => el.textContent')
135
155
  expect(body_text).to include('宿泊プラン一覧')
136
156
  end
137
157
  ```
@@ -0,0 +1,359 @@
1
+ # API coverages
2
+ - Puppeteer version: v8.0.0
3
+ - puppeteer-ruby version: 0.31.1
4
+
5
+ ## Puppeteer
6
+
7
+ * ~~clearCustomQueryHandlers~~
8
+ * connect
9
+ * ~~createBrowserFetcher~~
10
+ * ~~customQueryHandlerNames~~
11
+ * defaultArgs => `#default_args`
12
+ * devices
13
+ * ~~errors~~
14
+ * executablePath => `#executable_path`
15
+ * launch
16
+ * ~~networkConditions~~
17
+ * product
18
+ * ~~registerCustomQueryHandler~~
19
+ * ~~unregisterCustomQueryHandler~~
20
+
21
+ ## ~~BrowserFetcher~~
22
+
23
+ * ~~canDownload~~
24
+ * ~~download~~
25
+ * ~~host~~
26
+ * ~~localRevisions~~
27
+ * ~~platform~~
28
+ * ~~product~~
29
+ * ~~remove~~
30
+ * ~~revisionInfo~~
31
+
32
+ ## Browser
33
+
34
+ * browserContexts => `#browser_contexts`
35
+ * close
36
+ * createIncognitoBrowserContext => `#create_incognito_browser_context`
37
+ * defaultBrowserContext => `#default_browser_context`
38
+ * disconnect
39
+ * isConnected => `#connected?`
40
+ * newPage => `#new_page`
41
+ * pages
42
+ * process
43
+ * target
44
+ * targets
45
+ * userAgent => `#user_agent`
46
+ * version
47
+ * waitForTarget => `#wait_for_target`
48
+ * wsEndpoint => `#ws_endpoint`
49
+
50
+ ## BrowserContext
51
+
52
+ * browser
53
+ * clearPermissionOverrides => `#clear_permission_overrides`
54
+ * close
55
+ * isIncognito => `#incognito?`
56
+ * newPage => `#new_page`
57
+ * overridePermissions => `#override_permissions`
58
+ * pages
59
+ * targets
60
+ * waitForTarget => `#wait_for_target`
61
+
62
+ ## Page
63
+
64
+ * $ => `#query_selector`
65
+ * $$ => `#query_selector_all`
66
+ * $$eval => `#eval_on_selector_all`
67
+ * $eval => `#eval_on_selector`
68
+ * $x => `#Sx`
69
+ * accessibility
70
+ * addScriptTag => `#add_script_tag`
71
+ * addStyleTag => `#add_style_tag`
72
+ * authenticate
73
+ * ~~bringToFront~~
74
+ * browser
75
+ * browserContext => `#browser_context`
76
+ * click
77
+ * close
78
+ * content
79
+ * cookies
80
+ * coverage
81
+ * deleteCookie => `#delete_cookie`
82
+ * emulate
83
+ * emulateIdleState => `#emulate_idle_state`
84
+ * ~~emulateMediaFeatures~~
85
+ * emulateMediaType => `#emulate_media_type`
86
+ * ~~emulateNetworkConditions~~
87
+ * emulateTimezone => `#emulate_timezone`
88
+ * ~~emulateVisionDeficiency~~
89
+ * evaluate
90
+ * evaluateHandle => `#evaluate_handle`
91
+ * evaluateOnNewDocument => `#evaluate_on_new_document`
92
+ * ~~exposeFunction~~
93
+ * focus
94
+ * frames
95
+ * goBack => `#go_back`
96
+ * goForward => `#go_forward`
97
+ * goto
98
+ * hover
99
+ * isClosed => `#closed?`
100
+ * isJavaScriptEnabled => `#javascript_enabled?`
101
+ * keyboard
102
+ * mainFrame => `#main_frame`
103
+ * ~~metrics~~
104
+ * mouse
105
+ * pdf
106
+ * queryObjects => `#query_objects`
107
+ * reload
108
+ * screenshot
109
+ * select
110
+ * setBypassCSP => `#bypass_csp=`
111
+ * setCacheEnabled => `#cache_enabled=`
112
+ * setContent => `#content=`
113
+ * setCookie => `#set_cookie`
114
+ * setDefaultNavigationTimeout => `#default_navigation_timeout=`
115
+ * setDefaultTimeout => `#default_timeout=`
116
+ * setExtraHTTPHeaders => `#extra_http_headers=`
117
+ * setGeolocation => `#geolocation=`
118
+ * setJavaScriptEnabled => `#javascript_enabled=`
119
+ * setOfflineMode => `#offline_mode=`
120
+ * setRequestInterception => `#request_interception=`
121
+ * setUserAgent => `#user_agent=`
122
+ * setViewport => `#viewport=`
123
+ * tap
124
+ * target
125
+ * title
126
+ * ~~touchscreen~~
127
+ * ~~tracing~~
128
+ * type => `#type_text`
129
+ * url
130
+ * viewport
131
+ * ~~waitFor~~
132
+ * waitForFileChooser => `#wait_for_file_chooser`
133
+ * waitForFunction => `#wait_for_function`
134
+ * waitForNavigation => `#async_wait_for_navigation`
135
+ * waitForRequest => `#async_wait_for_request`
136
+ * waitForResponse => `#async_wait_for_response`
137
+ * waitForSelector => `#wait_for_selector`
138
+ * waitForTimeout => `#wait_for_timeout`
139
+ * waitForXPath => `#wait_for_xpath`
140
+ * workers
141
+
142
+ ## ~~WebWorker~~
143
+
144
+ * ~~evaluate~~
145
+ * ~~evaluateHandle~~
146
+ * ~~executionContext~~
147
+ * ~~url~~
148
+
149
+ ## ~~Accessibility~~
150
+
151
+ * ~~snapshot~~
152
+
153
+ ## Keyboard
154
+
155
+ * down
156
+ * press
157
+ * sendCharacter => `#send_character`
158
+ * type => `#type_text`
159
+ * up
160
+
161
+ ## Mouse
162
+
163
+ * click
164
+ * down
165
+ * move
166
+ * up
167
+ * wheel
168
+
169
+ ## ~~Touchscreen~~
170
+
171
+ * ~~tap~~
172
+
173
+ ## ~~Tracing~~
174
+
175
+ * ~~start~~
176
+ * ~~stop~~
177
+
178
+ ## FileChooser
179
+
180
+ * accept
181
+ * cancel
182
+ * isMultiple => `#multiple?`
183
+
184
+ ## Dialog
185
+
186
+ * accept
187
+ * defaultValue => `#default_value`
188
+ * dismiss
189
+ * message
190
+ * type
191
+
192
+ ## ConsoleMessage
193
+
194
+ * args
195
+ * location
196
+ * ~~stackTrace~~
197
+ * text
198
+ * ~~type~~
199
+
200
+ ## Frame
201
+
202
+ * $ => `#query_selector`
203
+ * $$ => `#query_selector_all`
204
+ * $$eval => `#eval_on_selector_all`
205
+ * $eval => `#eval_on_selector`
206
+ * $x => `#Sx`
207
+ * addScriptTag => `#add_script_tag`
208
+ * addStyleTag => `#add_style_tag`
209
+ * childFrames => `#child_frames`
210
+ * click
211
+ * content
212
+ * evaluate
213
+ * evaluateHandle => `#evaluate_handle`
214
+ * executionContext => `#execution_context`
215
+ * focus
216
+ * goto
217
+ * hover
218
+ * isDetached => `#detached?`
219
+ * name
220
+ * parentFrame => `#parent_frame`
221
+ * select
222
+ * setContent => `#set_content`
223
+ * tap
224
+ * title
225
+ * type => `#type_text`
226
+ * url
227
+ * ~~waitFor~~
228
+ * waitForFunction => `#wait_for_function`
229
+ * waitForNavigation => `#async_wait_for_navigation`
230
+ * waitForSelector => `#wait_for_selector`
231
+ * waitForTimeout => `#wait_for_timeout`
232
+ * waitForXPath => `#wait_for_xpath`
233
+
234
+ ## ExecutionContext
235
+
236
+ * evaluate
237
+ * evaluateHandle => `#evaluate_handle`
238
+ * frame
239
+ * ~~queryObjects~~
240
+
241
+ ## JSHandle
242
+
243
+ * asElement => `#as_element`
244
+ * dispose
245
+ * evaluate
246
+ * evaluateHandle => `#evaluate_handle`
247
+ * executionContext => `#execution_context`
248
+ * getProperties => `#properties`
249
+ * getProperty => `#[]`
250
+ * jsonValue => `#json_value`
251
+
252
+ ## ElementHandle
253
+
254
+ * $ => `#query_selector`
255
+ * $$ => `#query_selector_all`
256
+ * $$eval => `#eval_on_selector_all`
257
+ * $eval => `#eval_on_selector`
258
+ * $x => `#Sx`
259
+ * asElement => `#as_element`
260
+ * boundingBox => `#bounding_box`
261
+ * boxModel => `#box_model`
262
+ * click
263
+ * contentFrame => `#content_frame`
264
+ * dispose
265
+ * evaluate
266
+ * evaluateHandle => `#evaluate_handle`
267
+ * executionContext => `#execution_context`
268
+ * focus
269
+ * getProperties => `#properties`
270
+ * getProperty => `#[]`
271
+ * hover
272
+ * isIntersectingViewport => `#intersecting_viewport?`
273
+ * jsonValue => `#json_value`
274
+ * press
275
+ * screenshot
276
+ * select
277
+ * tap
278
+ * ~~toString~~
279
+ * type => `#type_text`
280
+ * uploadFile => `#upload_file`
281
+
282
+ ## ~~HTTPRequest~~
283
+
284
+ * ~~abort~~
285
+ * ~~continue~~
286
+ * ~~failure~~
287
+ * ~~frame~~
288
+ * ~~headers~~
289
+ * ~~isNavigationRequest~~
290
+ * ~~method~~
291
+ * ~~postData~~
292
+ * ~~redirectChain~~
293
+ * ~~resourceType~~
294
+ * ~~respond~~
295
+ * ~~response~~
296
+ * ~~url~~
297
+
298
+ ## ~~HTTPResponse~~
299
+
300
+ * ~~buffer~~
301
+ * ~~frame~~
302
+ * ~~fromCache~~
303
+ * ~~fromServiceWorker~~
304
+ * ~~headers~~
305
+ * ~~json~~
306
+ * ~~ok~~
307
+ * ~~remoteAddress~~
308
+ * ~~request~~
309
+ * ~~securityDetails~~
310
+ * ~~status~~
311
+ * ~~statusText~~
312
+ * ~~text~~
313
+ * ~~url~~
314
+
315
+ ## ~~SecurityDetails~~
316
+
317
+ * ~~issuer~~
318
+ * ~~protocol~~
319
+ * ~~subjectAlternativeNames~~
320
+ * ~~subjectName~~
321
+ * ~~validFrom~~
322
+ * ~~validTo~~
323
+
324
+ ## Target
325
+
326
+ * browser
327
+ * browserContext => `#browser_context`
328
+ * createCDPSession => `#create_cdp_session`
329
+ * opener
330
+ * page
331
+ * type
332
+ * url
333
+ * ~~worker~~
334
+
335
+ ## CDPSession
336
+
337
+ * detach
338
+ * send
339
+
340
+ ## ~~Coverage~~
341
+
342
+ * ~~startCSSCoverage~~
343
+ * ~~startJSCoverage~~
344
+ * ~~stopCSSCoverage~~
345
+ * ~~stopJSCoverage~~
346
+
347
+ ## TimeoutError
348
+
349
+
350
+ ## ~~EventEmitter~~
351
+
352
+ * ~~addListener~~
353
+ * ~~emit~~
354
+ * ~~listenerCount~~
355
+ * ~~off~~
356
+ * ~~on~~
357
+ * ~~once~~
358
+ * ~~removeAllListeners~~
359
+ * ~~removeListener~~