ferrumwizard 0.1.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 +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/ferrumwizard.rb +103 -0
- metadata +110 -0
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ebfbe644929b142f88f8dc30e66db208bc8fa6c328eea266b18b6e6bf5c08da8
|
4
|
+
data.tar.gz: f5e5403ad7dc857b0086213ef42e521fb91232fd93466036d22c35d269629804
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 44ac0fdfca21e6b4bfdc42afe8bb7826de0b1df0c003b86bb19c025795633c9cad17962cd842762bb7c23c822757bd151a26dd11502015f7484f01e151d7f297
|
7
|
+
data.tar.gz: 5ac3fd607f57b5b422b2e81b32ab29106bf80691ae445dcca405808fd087718d177006c790c73956521954e306ddc2fbea9597b1790cf5049027ccca9f201f11
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
Binary file
|
data/lib/ferrumwizard.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# file: ferrumwizard.rb
|
4
|
+
|
5
|
+
require 'rexle'
|
6
|
+
require 'ferrum'
|
7
|
+
|
8
|
+
|
9
|
+
class FerrumWizard
|
10
|
+
|
11
|
+
attr_reader :browser, :links
|
12
|
+
|
13
|
+
def initialize(url, headless: true, debug: false)
|
14
|
+
|
15
|
+
@url, @debug = url, debug
|
16
|
+
@browser = Ferrum::Browser.new headless: headless
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def login(username, password)
|
21
|
+
|
22
|
+
b = @browser
|
23
|
+
b.goto(@url)
|
24
|
+
|
25
|
+
|
26
|
+
# search for the username input box
|
27
|
+
e_username = b.at_xpath('//input[@type="email"]')
|
28
|
+
|
29
|
+
# search for the password input box
|
30
|
+
e_password = b.at_xpath('//input[@type="password"]')
|
31
|
+
|
32
|
+
if e_username and e_password then
|
33
|
+
|
34
|
+
e_username.focus.type(username)
|
35
|
+
e_password.focus.type(password, :Enter)
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
sleep 4
|
40
|
+
fetch_links()
|
41
|
+
self
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
def quit
|
46
|
+
@browser.quit
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_rb()
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def fetch_links()
|
55
|
+
|
56
|
+
b = @browser
|
57
|
+
doc = Rexle.new b.body
|
58
|
+
all_links = doc.root.xpath('//a')
|
59
|
+
|
60
|
+
valid_links = all_links.reject do |x|
|
61
|
+
|
62
|
+
puts 'x: ' + x.inspect if @debug
|
63
|
+
s = x.plaintext.gsub('&','&')
|
64
|
+
r = (x.attributes[:target] == '_blank') | s.empty?
|
65
|
+
|
66
|
+
puts 'r: ' + r.inspect if @debug
|
67
|
+
r
|
68
|
+
|
69
|
+
end.map {|x| all_links.index x}
|
70
|
+
|
71
|
+
active_links = b.xpath('//a')
|
72
|
+
valid_active_links = valid_links.map {|n| active_links[n]}
|
73
|
+
|
74
|
+
|
75
|
+
@links = valid_active_links.flat_map do |x|
|
76
|
+
a = x.text.split(/\W+/).map {|label| [label, x]} << [x.text, x]
|
77
|
+
a + a.map {|x, obj| [x.downcase, obj]}
|
78
|
+
end.to_h
|
79
|
+
|
80
|
+
names = @links.keys.map(&:downcase).uniq.select {|x| x =~ /^\w+$/}
|
81
|
+
links = @links
|
82
|
+
|
83
|
+
names.each do |name|
|
84
|
+
|
85
|
+
define_singleton_method name.to_sym do
|
86
|
+
links[name].click
|
87
|
+
sleep 3
|
88
|
+
self
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
def method_missing(method_name, *args)
|
96
|
+
|
97
|
+
node = @browser.at_css '.' + method_name.to_s
|
98
|
+
node.text if node
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
metadata
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ferrumwizard
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Robertson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAwNzMwMTYxOTE5WhcN
|
15
|
+
MjEwNzMwMTYxOTE5WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDhNEIG
|
17
|
+
/Ab4nneih/AQFMcYk76JCiy26Xcy5uxd9ib7Emkj/9sZo6nxuSBaH03+Ixv3jgJs
|
18
|
+
TxZyaIKRsESFFmupYmKsyatCGGaBEsDb210ZBm313rP2Pk2fGrUtON0CjwJljWxR
|
19
|
+
8pHuglEXrGN/XhVicy7sZLJ2nVnvRtyiKi92XmY0S9LaCkWlOx2f3D7yiazkmHh5
|
20
|
+
59nHiGNlZ/SOzFrRMdBvkWZYHgqUEBv0KxEuMqW65U4HdlQImcwqu8XOWH9kutof
|
21
|
+
yyisv03kPqMvrOC8ptG/TieKYK0JuY23gS9MrVxkrf0gX3IQLY21JWG9t9uRImc/
|
22
|
+
kHC+EJ2rI8HQqcq/v6dndJb6MhYEhj7R5XsZqlfsLFo21FFBAyaPrqPRUstnW5U0
|
23
|
+
/tCpcuFyZJeRPqQ8LSlRGDuB/TdmV9dF+P5aGS32k9Okf9L6E6x3OGV29eMHSdDt
|
24
|
+
LOOB8l0EJbNXzpvYW+htziU8TbuzRQU8K7uTeAfpMUg4auPxdVyQpJcQWXcCAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU2+nN7PCw
|
26
|
+
js3NFmK8b17Ji/t+dvwwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
|
+
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEAlaYpTQ2vLuKU/nJl1inw9iE9XCwnTmIhmA9lnu1q
|
29
|
+
QKKCd7Z2PwtkahbDvMVQ347DQZQAanuZmtTPFMc4FDA530qJtwoYk03FTQXBh12M
|
30
|
+
d4C27VP9BOrUQcxkqtnTo+4Z60taszXqyPsPYU+Fd8AZUPeS5TOYG52OXTQ+q+pO
|
31
|
+
vNxkRP9oEka81ZrN1y3r3YaFHATZzf4pJo0HupZvMsQwa33/vA+xxxpDeTuWytNN
|
32
|
+
O0mYbo8Em2LnPnE8ehOnniDGXIIaDO9B1Qbbr0GhNCIWq3JIcbI2IBCKFWA6HyNF
|
33
|
+
yCdr7ZqPrnxXlhhnTPLFkzR/0+XxpbrdW4zb6uQqX92/tiUqP9uKf5dBEVoCWax/
|
34
|
+
IWPJE5JXx2iMvE9cWe4bFCUi7cZT7HsL6jkdUWxeTvsfc7XMbE8eWtHHiG6NjeFJ
|
35
|
+
7e24hNRMt3t/JE9ogEO4JzFUH2vq2zzR5X9JQqEclWfwHi4cf8bZFJ7spjZQPjSZ
|
36
|
+
Ok3rs0A+kW4ixAj1rDYuoyG/
|
37
|
+
-----END CERTIFICATE-----
|
38
|
+
date: 2020-07-30 00:00:00.000000000 Z
|
39
|
+
dependencies:
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: rexle
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.5'
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 1.5.7
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '1.5'
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 1.5.7
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: ferrum
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.9.0
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.9'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.9.0
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0.9'
|
80
|
+
description:
|
81
|
+
email: james@jamesrobertson.eu
|
82
|
+
executables: []
|
83
|
+
extensions: []
|
84
|
+
extra_rdoc_files: []
|
85
|
+
files:
|
86
|
+
- lib/ferrumwizard.rb
|
87
|
+
homepage: https://github.com/jrobertson/ferrumwizard
|
88
|
+
licenses:
|
89
|
+
- MIT
|
90
|
+
metadata: {}
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubygems_version: 3.0.3
|
107
|
+
signing_key:
|
108
|
+
specification_version: 4
|
109
|
+
summary: Makes web scraping easier using the Ferrum gem.
|
110
|
+
test_files: []
|
metadata.gz.sig
ADDED
Binary file
|