robotok 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.
data/README.rdoc ADDED
@@ -0,0 +1,6 @@
1
+ = robotok
2
+
3
+ Describe your project here
4
+
5
+ :include:robotok.rdoc
6
+
data/bin/robotok ADDED
@@ -0,0 +1,185 @@
1
+ #!/usr/bin/env ruby
2
+ require 'gli'
3
+ begin # XXX: Remove this begin/rescue before distributing your app
4
+ require 'robotok'
5
+ rescue LoadError
6
+ STDERR.puts "In development, you need to use `bundle exec bin/todo` to run your app"
7
+ STDERR.puts "At install-time, RubyGems will make sure lib, etc. are in the load path"
8
+ STDERR.puts "Feel free to remove this message from bin/todo now"
9
+ exit 64
10
+ end
11
+
12
+ include GLI::App
13
+
14
+ program_desc 'Describe your application here'
15
+
16
+ version Robotok::VERSION
17
+
18
+ desc 'Describe some switch here'
19
+ switch [:s,:switch]
20
+
21
+ desc 'Describe some flag here'
22
+ default_value 'robotok.yml'
23
+ arg_name 'robotok'
24
+ flag [:c,:config]
25
+
26
+ desc 'run'
27
+ arg_name ''
28
+ command :run do |c|
29
+ c.action do |global_options,options,args|
30
+ puts global_options.inspect
31
+ puts options.inspect
32
+ puts args.inspect
33
+ raise "robotrock" if $config[:robotok].nil?
34
+ start()
35
+ actions(args)
36
+ end
37
+ end
38
+
39
+
40
+ pre do |global,command,options,args|
41
+ # Pre logic here
42
+ # Return true to proceed; false to abourt and not call the
43
+ # chosen command
44
+ # Use skips_pre before a command to skip this block
45
+ # on that command only
46
+ # true
47
+ # puts global.inspect
48
+ # puts command.inspect
49
+ # puts options.inspect
50
+ # puts args.inspect
51
+ config = global[:config] || "robotok.yml"
52
+ begin
53
+ $config = YAML.load_file config
54
+ rescue Exception => e
55
+ STDERR.puts "pre #{e.message}"
56
+ exit(-1)
57
+ end
58
+ end
59
+
60
+
61
+ post do |global,command,options,args|
62
+ # Post logic here
63
+ # Use skips_post before a command to skip this
64
+ # block on that command only
65
+ true
66
+ end
67
+
68
+
69
+ on_error do |exception|
70
+ # Error logic here
71
+ # return false to skip default error handling
72
+ true
73
+ end
74
+
75
+
76
+ def stop(n=1)
77
+ $driver.quit
78
+ exit(n)
79
+ end
80
+
81
+
82
+ def start()
83
+ cfg = $config[:robotok]
84
+ $driver = Selenium::WebDriver.for cfg[:driver].to_sym
85
+ $driver.manage().window().maximize()
86
+
87
+ stop() if cfg[:actions].nil?
88
+
89
+ $driver.navigate.to cfg[:url] if not cfg[:url].nil?
90
+ # todo connection error
91
+ end
92
+
93
+
94
+ def data(o)
95
+ o[:data].each do |k,v|
96
+ puts "data action: #{k.to_s}"
97
+ elem = $driver.find_element(:xpath, v[:xpath])
98
+
99
+ case
100
+ when v.has_key?(:fill)
101
+ elem.clear
102
+ elem.send_keys v[:fill]
103
+
104
+ when v.has_key?(:select)
105
+ option = Selenium::WebDriver::Support::Select.new(elem)
106
+ option.select_by(:text, v[:select].to_s)
107
+
108
+ when v.has_key?(:option)
109
+ option = Selenium::WebDriver::Support::Select.new(elem)
110
+ option.select_by(:value, v[:option].to_s)
111
+
112
+ when v.has_key?(:submit)
113
+ elem.submit()
114
+ puts "[submit] #{page.to_s}"
115
+
116
+ when v.has_key?(:radio)
117
+ elem.click()
118
+
119
+ when v.has_key?(:click)
120
+ elem.click()
121
+
122
+ when v.has_key?(:check)
123
+ if elem.attribute("checked") then
124
+ elem.click() if not v[:check]
125
+ else
126
+ elem.click() if v[:check]
127
+ end
128
+
129
+ when v.has_key?(:captcha)
130
+ elem.clear
131
+
132
+ else
133
+ puts "[error] syntax #{k} #{v}"
134
+ end # case
135
+ end # data
136
+ end
137
+
138
+
139
+ def actions(args)
140
+ cfg = $config[:robotok]
141
+
142
+ $config[:args] = args
143
+
144
+ cfg[:actions].each do |action,opts|
145
+
146
+ if not $config[:args].nil? then
147
+ if not $config[:args].include?(action.to_s) then
148
+ puts "action skip: #{action} #{$config[:args].inspect}"
149
+ next
150
+ end
151
+ end
152
+
153
+ $driver.navigate.to opts[:url] if not opts[:url].nil?
154
+
155
+ if not opts[:timeout].nil? then
156
+ wait = Selenium::WebDriver::Wait.new(:timeout => opts[:timeout][:sec]) # seconds
157
+ begin
158
+ wait.until { $driver.find_element(:xpath => opts[:timeout][:xpath]) }
159
+ rescue
160
+ puts "[#{action}] Action timeout for #{opts[:timeout][:xpath]}"
161
+ stop()
162
+ end
163
+ data(opts)
164
+ end
165
+
166
+ end # action
167
+ end
168
+
169
+
170
+ def store()
171
+ cfg = $config[:robotok]
172
+
173
+ if not cfg[:mongo].nil? then
174
+ require 'mongo'
175
+ mongo = cfg[:mongo]
176
+ conn = Mongo::Connection.new(mongo[:url], mongo[:port])
177
+ db = conn.db(mongo[:db])
178
+ co = db.collection(mongo[:co])
179
+ co.insert($config.dup) if co.find("robotok.id" => cfg[:id]).count == 0
180
+ end
181
+ end
182
+
183
+
184
+ # main
185
+ exit run(ARGV)
@@ -0,0 +1,3 @@
1
+ module Robotok
2
+ VERSION = '0.0.1'
3
+ end
data/lib/robotok.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'robotok/version.rb'
2
+
3
+ # Add requires for other files you add to your project here, so
4
+ # you just need to require this one file in your bin file
5
+
6
+ require "selenium-webdriver"
7
+ require 'JSON'
data/robotok.rdoc ADDED
@@ -0,0 +1,5 @@
1
+ = robotok
2
+
3
+ Generate this with
4
+ robotok rdoc
5
+ After you have described your command line interface
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: robotok
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tom Hornos
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rdoc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: aruba
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: selenium-webdriver
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: gli
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 2.0.0
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 2.0.0
94
+ description:
95
+ email: tom.hornos@gmail.com
96
+ executables:
97
+ - robotok
98
+ extensions: []
99
+ extra_rdoc_files:
100
+ - README.rdoc
101
+ - robotok.rdoc
102
+ files:
103
+ - bin/robotok
104
+ - lib/robotok/version.rb
105
+ - lib/robotok.rb
106
+ - README.rdoc
107
+ - robotok.rdoc
108
+ homepage: http://your.website.com
109
+ licenses: []
110
+ post_install_message:
111
+ rdoc_options:
112
+ - --title
113
+ - robotok
114
+ - --main
115
+ - README.rdoc
116
+ - -ri
117
+ require_paths:
118
+ - lib
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 1.8.24
135
+ signing_key:
136
+ specification_version: 3
137
+ summary: Robotrock
138
+ test_files: []