ferrum 0.2 → 0.2.1
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/README.md +53 -1
- data/lib/ferrum/browser/process.rb +1 -1
- data/lib/ferrum/browser/web_socket.rb +3 -1
- data/lib/ferrum/network/intercepted_request.rb +1 -1
- data/lib/ferrum/targets.rb +2 -2
- data/lib/ferrum/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c6a15f2244fefda208b8b35181892fd1287414a31485acf98aa55226210cdb3
|
4
|
+
data.tar.gz: 6214c762f7ea1b85558220de3501fa43791f7f2027682b33d3ee0d6c6ba654ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41499a98b5c623ce277ea890255bac0ae89c696c0d297b322b60e73594cad6ad1451dff474ff14fbd58cc5dead1f62d3d7962ec81677a89c9bdc5abb52296bf8
|
7
|
+
data.tar.gz: 280dc77020f401cdcd0bca4f87214fa83d1899413cda6f1decb761c201cece76a7dec48f4c45973e0726dcf9cb1acaa6b37512fc860f8bfeeea8cf42d1b15d62
|
data/README.md
CHANGED
@@ -6,6 +6,23 @@ It is Ruby clean and high-level API to Chrome. Runs headless by default,
|
|
6
6
|
but you can configure it to run in a non-headless mode. All you need is Ruby and
|
7
7
|
Chrome/Chromium. Ferrum connects to the browser via DevTools Protocol.
|
8
8
|
|
9
|
+
Relation to [Cuprite](https://github.com/machinio/cuprite). Cuprite used to have
|
10
|
+
this code inside in one form or another but the thing is you don't need capybara
|
11
|
+
if you are going to crawl sites. You crawl, not test. Besides that clean
|
12
|
+
lightweight API to browser is what Ruby was missing, so here it comes.
|
13
|
+
|
14
|
+
## Install
|
15
|
+
|
16
|
+
There's no official Chrome or Chromium package for Linux don't install it this
|
17
|
+
way because it either will be outdated or unofficial, both are bad. Download it
|
18
|
+
from official [source](https://www.chromium.org/getting-involved/download-chromium).
|
19
|
+
Chrome binary should be in the `PATH` or `BROWSER_PATH` or you can pass it as an
|
20
|
+
option.
|
21
|
+
|
22
|
+
``` ruby
|
23
|
+
gem "ferrum"
|
24
|
+
```
|
25
|
+
|
9
26
|
Navigate to a website and save a screenshot:
|
10
27
|
|
11
28
|
```ruby
|
@@ -57,7 +74,41 @@ browser.mouse
|
|
57
74
|
browser.quit
|
58
75
|
```
|
59
76
|
|
60
|
-
|
77
|
+
## Customization ##
|
78
|
+
|
79
|
+
You can customize options with the following code in your test setup:
|
80
|
+
|
81
|
+
``` ruby
|
82
|
+
Ferrum::Browser.new(options)
|
83
|
+
```
|
84
|
+
|
85
|
+
* options `Hash`
|
86
|
+
* `:browser_path` (String) - Path to chrome binary, you can also set ENV
|
87
|
+
variable as `BROWSER_PATH=some/path/chrome bundle exec rspec`.
|
88
|
+
* `:headless` (Boolean) - Set browser as headless or not, `true` by default.
|
89
|
+
* `:slowmo` (Integer | Float) - Set a delay to wait before sending command.
|
90
|
+
Usefull companion of headless option, so that you have time to see changes.
|
91
|
+
* `:logger` (Object responding to `puts`) - When present, debug output is
|
92
|
+
written to this object.
|
93
|
+
* `:timeout` (Numeric) - The number of seconds we'll wait for a response when
|
94
|
+
communicating with browser. Default is 5.
|
95
|
+
* `:js_errors` (Boolean) - When true, JavaScript errors get re-raised in Ruby.
|
96
|
+
* `:window_size` (Array) - The dimensions of the browser window in which to
|
97
|
+
test, expressed as a 2-element array, e.g. [1024, 768]. Default: [1024, 768]
|
98
|
+
* `:browser_options` (Hash) - Additional command line options,
|
99
|
+
[see them all](https://peter.sh/experiments/chromium-command-line-switches/)
|
100
|
+
e.g. `{ "ignore-certificate-errors" => nil }`
|
101
|
+
* `:extensions` (Array) - An array of JS files to be preloaded into the browser
|
102
|
+
* `:port` (Integer) - Remote debugging port for headless Chrome
|
103
|
+
* `:host` (String) - Remote debugging address for headless Chrome
|
104
|
+
* `:url` (String) - URL for a running instance of Chrome. If this is set, a
|
105
|
+
browser process will not be spawned.
|
106
|
+
* `:process_timeout` (Integer) - How long to wait for the Chrome process to
|
107
|
+
respond on startup
|
108
|
+
|
109
|
+
|
110
|
+
#### The API below is for master branch and a subject to change before 1.0
|
111
|
+
|
61
112
|
|
62
113
|
## Navigation
|
63
114
|
|
@@ -196,6 +247,7 @@ browser.goto("https://google.com/")
|
|
196
247
|
browser.body # => '<html itemscope="" itemtype="http://schema.org/WebPage" lang="ru"><head>...
|
197
248
|
```
|
198
249
|
|
250
|
+
|
199
251
|
## Screenshots
|
200
252
|
|
201
253
|
#### screenshot(\*\*options) : `String` | `Integer`
|
@@ -28,7 +28,7 @@ module Ferrum
|
|
28
28
|
while data = @sock.readpartial(512)
|
29
29
|
@driver.parse(data)
|
30
30
|
end
|
31
|
-
rescue EOFError, Errno::ECONNRESET
|
31
|
+
rescue EOFError, Errno::ECONNRESET, Errno::EPIPE
|
32
32
|
@messages.close
|
33
33
|
end
|
34
34
|
end
|
@@ -62,6 +62,8 @@ module Ferrum
|
|
62
62
|
|
63
63
|
def write(data)
|
64
64
|
@sock.write(data)
|
65
|
+
rescue EOFError, Errno::ECONNRESET, Errno::EPIPE
|
66
|
+
@messages.close
|
65
67
|
end
|
66
68
|
|
67
69
|
def close
|
data/lib/ferrum/targets.rb
CHANGED
@@ -86,8 +86,6 @@ module Ferrum
|
|
86
86
|
push(target_id, @page)
|
87
87
|
end
|
88
88
|
|
89
|
-
private
|
90
|
-
|
91
89
|
def find_or_create_page(target_id)
|
92
90
|
page = @targets[target_id]
|
93
91
|
page ||= Page.new(target_id, @browser, true)
|
@@ -95,6 +93,8 @@ module Ferrum
|
|
95
93
|
page
|
96
94
|
end
|
97
95
|
|
96
|
+
private
|
97
|
+
|
98
98
|
def remove_page(target_id)
|
99
99
|
page = @targets.delete(target_id)
|
100
100
|
@page = nil if page && @page == page
|
data/lib/ferrum/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ferrum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Vorotilin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket-driver
|