adspower-client 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3a9434e320523ee5a5676284d6b29b624d21b63e1cb90df721c1893cfcfe4cb6
4
+ data.tar.gz: 1ab3136aa74b7bb88740e3961269521a013cc92e12374820fa9c1fd684d822de
5
+ SHA512:
6
+ metadata.gz: 3ef12998ca4207573303b3597400cf47f9588edd6d7f1966ff057b7bd53ab9472c36da75c7e783d0b3a11909374608a557ccef3ea2d1980ca8ef542fb8dcb3a0
7
+ data.tar.gz: ae5149a707c5852f4a1ee184f634949ce42e43d150d45089a1705fcee4d8767676d1ad11710497d23af4f8fc112f2fd3d66dba34361e4b67d9a97dbb8b37a2c1
@@ -0,0 +1,21 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'adspower-client'
3
+ s.version = '1.0.1'
4
+ s.date = '2023-12-05'
5
+ s.summary = "Ruby library for operating AdsPower API."
6
+ s.description = "Ruby library for operating AdsPower API."
7
+ s.authors = ["Leandro Daniel Sardi"]
8
+ s.email = 'leandro@connectionsphere.com'
9
+ s.files = [
10
+ 'lib/adspower-client.rb',
11
+ 'adspower-client.gemspec'
12
+ ]
13
+ s.homepage = 'https://github.com/leandrosardi/adspower-client'
14
+ s.license = 'MIT'
15
+ s.add_runtime_dependency 'uri', '~> 0.12.2', '>= 0.12.2'
16
+ s.add_runtime_dependency 'net-http', '~> 0.2.0', '>= 0.2.0'
17
+ s.add_runtime_dependency 'json', '~> 2.6.3', '>= 2.6.3'
18
+ s.add_runtime_dependency 'blackstack-core', '~> 1.2.15', '>= 1.2.15'
19
+ s.add_runtime_dependency 'selenium-webdriver', '~> 4.10.0', '>= 4.10.0'
20
+ s.add_runtime_dependency 'watir', '~> 7.3.0', '>= 7.3.0'
21
+ end
@@ -0,0 +1,141 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'json'
4
+ require 'pry'
5
+ require 'blackstack-core'
6
+ require 'selenium-webdriver'
7
+ require 'watir'
8
+
9
+ class AdsPowerClient
10
+ # reference: https://localapi-doc-en.adspower.com/
11
+ # reference: https://localapi-doc-en.adspower.com/docs/Rdw7Iu
12
+ attr_accessor :key, :adspower_listener, :adspower_default_browser_version
13
+
14
+ def initialize(h={})
15
+ self.key = h[:key] # mandatory
16
+ self.adspower_listener = h[:adspower_listener] || 'http://127.0.0.1:50325'
17
+ self.adspower_default_browser_version = h[:adspower_default_browser_version] || '116'
18
+ end
19
+
20
+ # send an GET request to "#{url}/status"
21
+ # and return the response body.
22
+ #
23
+ # reference: https://localapi-doc-en.adspower.com/docs/6DSiws
24
+ #
25
+ def status
26
+ url = "#{self.adspower_listener}/status"
27
+ uri = URI.parse(url)
28
+ res = Net::HTTP.get(uri)
29
+ # show respose body
30
+ return JSON.parse(res)['msg']
31
+ end
32
+
33
+ # send a post request to "#{url}/api/v1/user/create"
34
+ # and return the response body.
35
+ #
36
+ # return id of the created user
37
+ #
38
+ # reference: https://localapi-doc-en.adspower.com/docs/6DSiws
39
+ # reference: https://localapi-doc-en.adspower.com/docs/Lb8pOg
40
+ # reference: https://localapi-doc-en.adspower.com/docs/Awy6Dg
41
+ #
42
+ def create
43
+ url = "#{self.adspower_listener}/api/v1/user/create"
44
+ body = {
45
+ #'api_key' => self.key,
46
+ 'group_id' => '0',
47
+ 'proxyid' => '1',
48
+ 'fingerprint_config' => {
49
+ 'browser_kernel_config' => {"version": self.adspower_default_browser_version, "type":"chrome"}
50
+ }
51
+ }
52
+ # api call
53
+ res = BlackStack::Netting.call_post(url, body)
54
+ # show respose body
55
+ ret = JSON.parse(res.body)
56
+ raise "Error: #{ret.to_s}" if ret['msg'].to_s.downcase != 'success'
57
+ # return id of the created user
58
+ ret['data']['id']
59
+ end
60
+
61
+ def delete(id)
62
+ url = "#{self.adspower_listener}/api/v1/user/delete"
63
+ body = {
64
+ 'api_key' => self.key,
65
+ 'user_ids' => [id],
66
+ }
67
+ # api call
68
+ res = BlackStack::Netting.call_post(url, body)
69
+ # show respose body
70
+ ret = JSON.parse(res.body)
71
+ # validation
72
+ raise "Error: #{ret.to_s}" if ret['msg'].to_s.downcase != 'success'
73
+ end
74
+
75
+ # run the browser
76
+ # return the URL to operate the browser thru selenium
77
+ #
78
+ # reference: https://localapi-doc-en.adspower.com/docs/FFMFMf
79
+ #
80
+ def start(id)
81
+ uri = URI.parse("#{self.adspower_listener}/api/v1/browser/start?user_id=#{id}")
82
+ res = Net::HTTP.get(uri)
83
+ # show respose bo
84
+ ret = JSON.parse(res)
85
+ raise "Error: #{ret.to_s}" if ret['msg'].to_s.downcase != 'success'
86
+ # return id of the created user
87
+ ret
88
+ end
89
+
90
+ # run the browser
91
+ # return the URL to operate the browser thru selenium
92
+ #
93
+ # reference: https://localapi-doc-en.adspower.com/docs/DXam94
94
+ #
95
+ def stop(id)
96
+ uri = URI.parse("#{self.adspower_listener}/api/v1/browser/stop?user_id=#{id}")
97
+ res = Net::HTTP.get(uri)
98
+ # show respose body
99
+ ret = JSON.parse(res)
100
+ raise "Error: #{ret.to_s}" if ret['msg'].to_s.downcase != 'success'
101
+ # return id of the created user
102
+ ret
103
+ end
104
+
105
+ #
106
+ def driver(id)
107
+ ret = self.start(id)
108
+
109
+ # Attach test execution to the existing browser
110
+ # reference: https://zhiminzhan.medium.com/my-innovative-solution-to-test-automation-attach-test-execution-to-the-existing-browser-b90cda3b7d4a
111
+ url = ret['data']['ws']['selenium']
112
+ opts = Selenium::WebDriver::Chrome::Options.new
113
+ opts.add_option("debuggerAddress", url)
114
+
115
+ # connect to the existing browser
116
+ # reference: https://localapi-doc-en.adspower.com/docs/K4IsTq
117
+ driver = Selenium::WebDriver.for(:chrome, :options=>opts)
118
+
119
+ # return
120
+ driver
121
+ end # def driver
122
+
123
+ # create a new profile
124
+ # start the browser
125
+ # visit the page
126
+ # grab the html
127
+ # quit the browser from webdriver
128
+ # stop the broser from adspower
129
+ # delete the profile
130
+ # return the html
131
+ def html(url)
132
+ id = self.create
133
+ driver = self.driver(id)
134
+ driver.get(url)
135
+ html = driver.find_element(:tag_name => 'html')
136
+ self.stop(id)
137
+ driver.quit
138
+ self.delete(id)
139
+ html
140
+ end
141
+ end # class AdsPowerClient
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: adspower-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Leandro Daniel Sardi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-12-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: uri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.12.2
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.12.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 0.12.2
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.12.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: net-http
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.2.0
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.2.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 0.2.0
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.2.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: json
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 2.6.3
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.6.3
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 2.6.3
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.6.3
73
+ - !ruby/object:Gem::Dependency
74
+ name: blackstack-core
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: 1.2.15
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.2.15
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.2.15
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.2.15
93
+ - !ruby/object:Gem::Dependency
94
+ name: selenium-webdriver
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: 4.10.0
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 4.10.0
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 4.10.0
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 4.10.0
113
+ - !ruby/object:Gem::Dependency
114
+ name: watir
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: 7.3.0
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 7.3.0
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: 7.3.0
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 7.3.0
133
+ description: Ruby library for operating AdsPower API.
134
+ email: leandro@connectionsphere.com
135
+ executables: []
136
+ extensions: []
137
+ extra_rdoc_files: []
138
+ files:
139
+ - adspower-client.gemspec
140
+ - lib/adspower-client.rb
141
+ homepage: https://github.com/leandrosardi/adspower-client
142
+ licenses:
143
+ - MIT
144
+ metadata: {}
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubygems_version: 3.3.7
161
+ signing_key:
162
+ specification_version: 4
163
+ summary: Ruby library for operating AdsPower API.
164
+ test_files: []