phantom-ruby-browser 0.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3d2f7cee9dc862cae17865bec78286a4b985b65a
4
+ data.tar.gz: 6e7867cc2b17ef6d49fd7154aeefad30b3de2c82
5
+ SHA512:
6
+ metadata.gz: a824b0bb63832c383eb8547f5c6bb1ee5bbc329292386525769260cbc9475439d75ef49f54c0671ed21e350afeda4d4a17411440a4e1e631791a4a62338c3664
7
+ data.tar.gz: 91a02f110a317f707b1c687b56923dd48028e4943f7e40c42066e4c943b8a4df9c354e171a4004c547f79ec1e543c84d3ea9894a861966805229402e08b5e3f3
@@ -0,0 +1,19 @@
1
+ #*.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .idea
6
+ coverage
7
+ InstalledFiles
8
+ lib/bundler/man
9
+ pkg
10
+ rdoc
11
+ spec/reports
12
+ test/tmp
13
+ test/version_tmp
14
+ tmp
15
+
16
+ # YARD artifacts
17
+ .yardoc
18
+ _yardoc
19
+ doc/
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,40 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ phantom-ruby-browser (0.0.1)
5
+ phantomjs (~> 1.9.7.1, >= 1.9.7.1)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ coderay (1.1.0)
11
+ diff-lcs (1.2.5)
12
+ method_source (0.8.2)
13
+ phantomjs (1.9.7.1)
14
+ pry (0.9.12.6)
15
+ coderay (~> 1.0)
16
+ method_source (~> 0.8)
17
+ slop (~> 3.4)
18
+ rake (10.1.1)
19
+ rspec (3.1.0)
20
+ rspec-core (~> 3.1.0)
21
+ rspec-expectations (~> 3.1.0)
22
+ rspec-mocks (~> 3.1.0)
23
+ rspec-core (3.1.5)
24
+ rspec-support (~> 3.1.0)
25
+ rspec-expectations (3.1.2)
26
+ diff-lcs (>= 1.2.0, < 2.0)
27
+ rspec-support (~> 3.1.0)
28
+ rspec-mocks (3.1.2)
29
+ rspec-support (~> 3.1.0)
30
+ rspec-support (3.1.1)
31
+ slop (3.6.0)
32
+
33
+ PLATFORMS
34
+ ruby
35
+
36
+ DEPENDENCIES
37
+ phantom-ruby-browser!
38
+ pry (~> 0.9.12.2, >= 0.9.12.2)
39
+ rake (~> 10.1.0, >= 10.1.0)
40
+ rspec (~> 3.1.0, >= 3.1.0)
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Marek Aufart
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,24 @@
1
+ PhantomRubyBrowser
2
+ ===============
3
+
4
+ Wraps PhantomJS headless browser into Ruby code and provides basic DOM operations like click and get the content.
5
+
6
+ **Under development (October 2014)**
7
+
8
+ Example
9
+ -------
10
+ E.g. print DOM of javascript rendered page
11
+ ```
12
+ browser = PhantomRubyBrowser.new("http://google.com/analytics")
13
+ puts browser.content
14
+ ```
15
+
16
+ How does it work
17
+ ----------------
18
+ * PhantomJS binary is provided by https://github.com/colszowka/phantomjs-gem
19
+ * Ruby command is translated into javascript steps and passed to PhantomJS
20
+ * Output is returned
21
+
22
+ License
23
+ -------
24
+ Released under [MIT license](https://github.com/aufi/photo_geoloader/blob/master/LICENSE)
@@ -0,0 +1,12 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake'
5
+ require 'rspec/core/rake_task'
6
+
7
+ desc "Run all specs"
8
+ RSpec::Core::RakeTask.new(:spec) do |t|
9
+ t.rspec_opts = %w[--color]
10
+ end
11
+
12
+ task :default => [:spec]
@@ -0,0 +1,58 @@
1
+ require 'phantomjs'
2
+
3
+ class PhantomRubyBrowser
4
+
5
+ attr_reader :phantomjs, :location
6
+
7
+ def initialize(location)
8
+ @location = location
9
+ @phantomjs = Phantomjs
10
+ end
11
+
12
+ def content
13
+ execute "var page = require('webpage').create();
14
+ page.open('#{@location}', function() {
15
+ setTimeout(function(){var js = page.evaluate(function () {
16
+ return document;
17
+ });
18
+ console.log(js.all[0].outerHTML);
19
+ phantom.exit();}, 1000);
20
+ });"
21
+ end
22
+
23
+ def content_after_click(link_selector = 'a')
24
+ execute "var page = require('webpage').create();
25
+ page.open('#{@location}', function() {
26
+ var coords = page.evaluate(function(){
27
+ return document.querySelector('#{link_selector}').getBoundingClientRect();
28
+ });
29
+ page.sendEvent('click', coords.left, coords.top);
30
+ var js = page.evaluate(function () {
31
+ return document;
32
+ });
33
+ console.log(js.all[0].outerHTML);
34
+ phantom.exit();
35
+ });"
36
+ end
37
+
38
+ private
39
+
40
+ def execute(commands)
41
+ result = ""
42
+ steps_file = Tempfile.new('prb_steps')
43
+ begin
44
+ steps_file.write(commands)
45
+ steps_file.flush
46
+ result = @phantomjs.run(steps_file.path)
47
+ ensure
48
+ steps_file.close
49
+ steps_file.unlink
50
+ end
51
+ result
52
+ end
53
+
54
+ def prepare_steps
55
+
56
+ end
57
+
58
+ end
@@ -0,0 +1,19 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'phantom-ruby-browser'
3
+ s.version = '0.0.1'
4
+ s.date = '2014-10-03'
5
+ s.summary = "Wraps PhantomJS into Ruby code and provides basic DOM operations."
6
+ s.description = "Wraps PhantomJS headless browser into Ruby code and provides basic DOM operations like click and get the content."
7
+ s.authors = ["Marek Aufart"]
8
+ s.email = 'aufi.cz@gmail.com'
9
+ s.files = `git ls-files`.split($\)
10
+ s.require_paths = ["lib"]
11
+ s.homepage = 'https://github.com/aufi/phantom-ruby-browser'
12
+ s.license = 'MIT'
13
+
14
+ s.add_dependency 'phantomjs', "~> 1.9.7.1", '>= 1.9.7.1'
15
+
16
+ s.add_development_dependency "rake", "~> 10.1.0", ">= 10.1.0"
17
+ s.add_development_dependency "rspec", "~> 3.1.0", ">= 3.1.0"
18
+ s.add_development_dependency "pry", "~> 0.9.12.2", ">= 0.9.12.2"
19
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe PhantomRubyBrowser do
4
+
5
+ let(:browser){ PhantomRubyBrowser.new("file://#{File.expand_path('spec/support/test_page_1.html')}") }
6
+
7
+ describe 'open page' do
8
+ it 'loads phantomjs' do
9
+ expect(browser.phantomjs.path).not_to be_nil
10
+ end
11
+
12
+ it 'html' do
13
+ expect(browser.content).not_to be_nil
14
+ expect(browser.content).to include 'First test page'
15
+ end
16
+
17
+ it 'with javascript' do
18
+ expect(browser.content).to include 'javascript_loaded'
19
+ end
20
+ end
21
+
22
+ describe 'click' do
23
+ it 'follow normal link' do
24
+ expect(browser.content_after_click('p > a')).to include 'Second test page'
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'pry'
4
+ require 'phantom_ruby_browser'
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>test page</title>
5
+ </head>
6
+ <body>
7
+ <h1>Welcome!<h1>
8
+ <h3>First test page</h3>
9
+ <script>
10
+ document.write("javascript" + "_loaded");
11
+ </script>
12
+ <p>
13
+ Lorem ipsum
14
+ <a href="test_page_2.html">test page 2</a>
15
+ </p>
16
+ </body>
17
+ </html>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>test page</title>
5
+ </head>
6
+ <body>
7
+ <h1>Welcome!<h1>
8
+ <h3>Second test page</h3>
9
+ <script>
10
+ document.write("javascript" + "_loaded");
11
+ </script>
12
+ <p>
13
+ Lorem ipsum
14
+ <a href="#" class="js_link" onclick="document.write('javascript' + '_clicked');">js test</a>
15
+ </p>
16
+ </body>
17
+ </html>
@@ -0,0 +1,38 @@
1
+
2
+ phantom.onError = function(msg, trace) {
3
+ var msgStack = ['PHANTOM ERROR: ' + msg];
4
+ if (trace && trace.length) {
5
+ msgStack.push('TRACE:');
6
+ trace.forEach(function(t) {
7
+ msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : ''));
8
+ });
9
+ }
10
+ console.error(msgStack.join('\n'));
11
+ phantom.exit(1);
12
+ };
13
+
14
+
15
+ var page = require('webpage').create();
16
+
17
+ page.onResourceRequested = function (request) {
18
+ console.log('[PRB] loading:', request.url, JSON.stringify(request));
19
+ };
20
+
21
+ page.onResourceReceived = function (response) {
22
+ console.log('[PRB] loaded:', response.status, response.url, JSON.stringify(response));
23
+ };
24
+
25
+ page.open('http://google.com/analytics', function(status) {
26
+ setTimeout(function(){
27
+ /*var coords = page.evaluate(function(){
28
+ return document.querySelector('a').getBoundingClientRect();
29
+ });
30
+ page.sendEvent('click', coords.left, coords.top);*/
31
+ var js = page.evaluate(function () {
32
+ return document;
33
+ });
34
+ console.log(js.all[0].outerHTML);
35
+ console.log("[PRB] status:", status);
36
+ phantom.exit();
37
+ }, 2000);
38
+ });
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: phantom-ruby-browser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Marek Aufart
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: phantomjs
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.9.7.1
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.9.7.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 1.9.7.1
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.9.7.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 10.1.0
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 10.1.0
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 10.1.0
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 10.1.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 3.1.0
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 3.1.0
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 3.1.0
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 3.1.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: pry
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: 0.9.12.2
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.9.12.2
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.9.12.2
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 0.9.12.2
93
+ description: Wraps PhantomJS headless browser into Ruby code and provides basic DOM
94
+ operations like click and get the content.
95
+ email: aufi.cz@gmail.com
96
+ executables: []
97
+ extensions: []
98
+ extra_rdoc_files: []
99
+ files:
100
+ - ".gitignore"
101
+ - Gemfile
102
+ - Gemfile.lock
103
+ - LICENSE
104
+ - README.md
105
+ - Rakefile
106
+ - lib/phantom_ruby_browser.rb
107
+ - phantom-ruby-browser.gemspec
108
+ - spec/lib/phantom_ruby_browser_spec.rb
109
+ - spec/spec_helper.rb
110
+ - spec/support/test_page_1.html
111
+ - spec/support/test_page_2.html
112
+ - spec/support/teststeps.js
113
+ homepage: https://github.com/aufi/phantom-ruby-browser
114
+ licenses:
115
+ - MIT
116
+ metadata: {}
117
+ post_install_message:
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubyforge_project:
133
+ rubygems_version: 2.2.2
134
+ signing_key:
135
+ specification_version: 4
136
+ summary: Wraps PhantomJS into Ruby code and provides basic DOM operations.
137
+ test_files: []