mass-client 1.0.16 → 1.0.18
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/lib/first-line/profile_rpa.rb +85 -45
- data/lib/mass-client.rb +2 -0
- metadata +31 -45
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 226f48f9298fc4e264e311c3544c19935e985a9d5bab26b11740ceba9770fec7
|
|
4
|
+
data.tar.gz: 0a5943bb27e3a9b58e212ab4929dec83462712fb9614edb2019458065d53b22c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a91705cfe04215ec98a8d2418dc87fad48fb724fc0e60a6a80d52de28f2b6631a3e88d5047673fa583d0eba9630c2fe5e917ee0f382d748f1182f79f8020d85c
|
|
7
|
+
data.tar.gz: cf042ef9442239c66aecf000392b315d804c662d0f240e79125ef90109471f28da072da178ff0069cc9ee1602f5d3d2b0c6e97b63f1eca3be4e3b644d2205abe
|
|
@@ -175,69 +175,109 @@ module Mass
|
|
|
175
175
|
automaticDownloads.find_element(:id => status.to_s).click()
|
|
176
176
|
end # def automatic_downloads
|
|
177
177
|
|
|
178
|
+
|
|
179
|
+
def wait_for_file(file_paths, timeout = 30)
|
|
180
|
+
Timeout.timeout(timeout) do
|
|
181
|
+
loop do
|
|
182
|
+
file_paths.each do |path|
|
|
183
|
+
return path if File.exist?(path)
|
|
184
|
+
end
|
|
185
|
+
sleep(1)
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
rescue Timeout::Error
|
|
189
|
+
raise "Downloaded file not found in paths #{file_paths.join(',')} after #{timeout} seconds."
|
|
190
|
+
end
|
|
191
|
+
|
|
178
192
|
# download image from Selenium using JavaScript and upload to Dropbox
|
|
179
193
|
# return the URL of the screenshot
|
|
180
194
|
#
|
|
181
195
|
# Parameters:
|
|
182
196
|
# - url: Internet address of the image to download from the website and upload to dropbox.
|
|
183
197
|
# - dropbox_folder: Dropbox folder name to store the image.
|
|
184
|
-
#
|
|
185
|
-
def download_image_0(url, dropbox_folder=nil)
|
|
198
|
+
#
|
|
199
|
+
def download_image_0(url, dropbox_folder = nil)
|
|
186
200
|
raise "Either dropbox_folder parameter or self.desc['id_account'] are required." if dropbox_folder.nil? && self.desc['id_account'].nil?
|
|
187
201
|
dropbox_folder = self.desc['id_account'] if dropbox_folder.nil?
|
|
188
|
-
|
|
202
|
+
|
|
203
|
+
# Parameters
|
|
189
204
|
id = SecureRandom.uuid
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
tmp_paths = Mass.download_path.map { |s| "#{s}/#{filename}" } if Mass.download_path.is_a?(Array)
|
|
193
|
-
|
|
194
|
-
# excute JavaScript function downloadImage with the parameter src
|
|
195
|
-
#binding.pry
|
|
196
|
-
# this function is to download images from the same browser, using the proxy of the browser.
|
|
197
|
-
# never download images from the server, because sites can track the IP.
|
|
205
|
+
|
|
206
|
+
# JavaScript to get base64 image data
|
|
198
207
|
js0 = "
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
208
|
+
function getImageBase64(imageSrc) {
|
|
209
|
+
return new Promise(async (resolve, reject) => {
|
|
210
|
+
try {
|
|
211
|
+
const response = await fetch(imageSrc);
|
|
212
|
+
const blob = await response.blob();
|
|
213
|
+
const reader = new FileReader();
|
|
214
|
+
reader.onloadend = function() {
|
|
215
|
+
resolve(reader.result);
|
|
216
|
+
};
|
|
217
|
+
reader.onerror = function(error) {
|
|
218
|
+
reject(error);
|
|
219
|
+
};
|
|
220
|
+
reader.readAsDataURL(blob);
|
|
221
|
+
} catch (error) {
|
|
222
|
+
reject(error);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
210
225
|
}
|
|
211
|
-
|
|
226
|
+
return getImageBase64('#{url}');
|
|
212
227
|
"
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
#
|
|
217
|
-
|
|
218
|
-
|
|
228
|
+
|
|
229
|
+
# Execute JavaScript and get base64 image data
|
|
230
|
+
base64_image = driver.execute_script(js0)
|
|
231
|
+
raise "Failed to retrieve image data from URL: #{url}" if base64_image.nil?
|
|
232
|
+
|
|
233
|
+
# Extract MIME type and base64 data
|
|
234
|
+
mime_type_match = base64_image.match(/^data:image\/([a-zA-Z0-9.+-]+);base64,/)
|
|
235
|
+
if mime_type_match
|
|
236
|
+
mime_subtype = mime_type_match[1] # e.g., 'png', 'jpeg', 'gif'
|
|
237
|
+
# Map common MIME subtypes to file extensions
|
|
238
|
+
extension = case mime_subtype
|
|
239
|
+
when 'jpeg' then 'jpg'
|
|
240
|
+
else mime_subtype
|
|
241
|
+
end
|
|
242
|
+
# Remove the data URL prefix
|
|
243
|
+
image_data = base64_image.sub(/^data:image\/[a-zA-Z0-9.+-]+;base64,/, '')
|
|
244
|
+
else
|
|
245
|
+
raise "Unsupported or invalid image data format."
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# Update filename and paths
|
|
249
|
+
filename = "#{id}.#{extension}"
|
|
250
|
+
tmp_paths = if Mass.download_path.is_a?(String)
|
|
251
|
+
["#{Mass.download_path}/#{filename}"]
|
|
252
|
+
elsif Mass.download_path.is_a?(Array)
|
|
253
|
+
Mass.download_path.map { |s| "#{s}/#{filename}" }
|
|
254
|
+
else
|
|
255
|
+
raise "Invalid Mass.download_path configuration."
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# Save the image to the first available path
|
|
259
|
+
tmp_path = tmp_paths.find { |path| File.writable?(File.dirname(path)) }
|
|
260
|
+
raise "No writable path found in #{tmp_paths.join(', ')}." if tmp_path.nil?
|
|
261
|
+
|
|
262
|
+
File.open(tmp_path, 'wb') do |file|
|
|
263
|
+
file.write(Base64.decode64(image_data))
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
# Proceed with Dropbox operations
|
|
267
|
+
year = Time.now.year.to_s.rjust(4, '0')
|
|
268
|
+
month = Time.now.month.to_s.rjust(2, '0')
|
|
219
269
|
folder = "/massprospecting.rpa/#{dropbox_folder}.#{year}.#{month}"
|
|
220
270
|
path = "#{folder}/#{filename}"
|
|
221
271
|
BlackStack::DropBox.dropbox_create_folder(folder)
|
|
222
|
-
|
|
223
|
-
#
|
|
224
|
-
tmp_path = nil
|
|
225
|
-
tmp_paths.each { |s|
|
|
226
|
-
if File.exist?(s)
|
|
227
|
-
tmp_path = s
|
|
228
|
-
break
|
|
229
|
-
end
|
|
230
|
-
}
|
|
231
|
-
raise "Downloaded file #{filename} not found in paths #{tmp_paths.join(',')}." if tmp_path.nil?
|
|
232
|
-
|
|
233
|
-
# upload the file to dropbox
|
|
272
|
+
|
|
273
|
+
# Upload the file to Dropbox
|
|
234
274
|
BlackStack::DropBox.dropbox_upload_file(tmp_path, path)
|
|
235
|
-
#
|
|
275
|
+
# Delete the local file
|
|
236
276
|
File.delete(tmp_path)
|
|
237
|
-
#
|
|
277
|
+
# Return the URL of the file in Dropbox
|
|
238
278
|
BlackStack::DropBox.get_file_url(path).gsub('&dl=1', '&dl=0')
|
|
239
|
-
end
|
|
240
|
-
|
|
279
|
+
end
|
|
280
|
+
|
|
241
281
|
# download image from Selenium using JavaScript and upload to Dropbox
|
|
242
282
|
# return the URL of the screenshot
|
|
243
283
|
#
|
data/lib/mass-client.rb
CHANGED
metadata
CHANGED
|
@@ -1,33 +1,55 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mass-client
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.18
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Leandro Daniel Sardi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-09-
|
|
11
|
+
date: 2024-09-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: timeout
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
20
|
-
|
|
19
|
+
version: 0.4.1
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
21
25
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: 0.
|
|
26
|
+
version: 0.4.1
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: base64
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 0.1.1
|
|
23
34
|
type: :runtime
|
|
24
35
|
prerelease: false
|
|
25
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 0.1.1
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: uri
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
26
44
|
requirements:
|
|
27
45
|
- - "~>"
|
|
28
46
|
- !ruby/object:Gem::Version
|
|
29
47
|
version: 0.11.2
|
|
30
|
-
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
31
53
|
- !ruby/object:Gem::Version
|
|
32
54
|
version: 0.11.2
|
|
33
55
|
- !ruby/object:Gem::Dependency
|
|
@@ -37,9 +59,6 @@ dependencies:
|
|
|
37
59
|
- - "~>"
|
|
38
60
|
- !ruby/object:Gem::Version
|
|
39
61
|
version: 0.2.0
|
|
40
|
-
- - ">="
|
|
41
|
-
- !ruby/object:Gem::Version
|
|
42
|
-
version: 0.2.0
|
|
43
62
|
type: :runtime
|
|
44
63
|
prerelease: false
|
|
45
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -47,9 +66,6 @@ dependencies:
|
|
|
47
66
|
- - "~>"
|
|
48
67
|
- !ruby/object:Gem::Version
|
|
49
68
|
version: 0.2.0
|
|
50
|
-
- - ">="
|
|
51
|
-
- !ruby/object:Gem::Version
|
|
52
|
-
version: 0.2.0
|
|
53
69
|
- !ruby/object:Gem::Dependency
|
|
54
70
|
name: json
|
|
55
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -57,9 +73,6 @@ dependencies:
|
|
|
57
73
|
- - "~>"
|
|
58
74
|
- !ruby/object:Gem::Version
|
|
59
75
|
version: 2.6.3
|
|
60
|
-
- - ">="
|
|
61
|
-
- !ruby/object:Gem::Version
|
|
62
|
-
version: 2.6.3
|
|
63
76
|
type: :runtime
|
|
64
77
|
prerelease: false
|
|
65
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -67,9 +80,6 @@ dependencies:
|
|
|
67
80
|
- - "~>"
|
|
68
81
|
- !ruby/object:Gem::Version
|
|
69
82
|
version: 2.6.3
|
|
70
|
-
- - ">="
|
|
71
|
-
- !ruby/object:Gem::Version
|
|
72
|
-
version: 2.6.3
|
|
73
83
|
- !ruby/object:Gem::Dependency
|
|
74
84
|
name: blackstack-core
|
|
75
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -77,9 +87,6 @@ dependencies:
|
|
|
77
87
|
- - "~>"
|
|
78
88
|
- !ruby/object:Gem::Version
|
|
79
89
|
version: 1.2.20
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: 1.2.20
|
|
83
90
|
type: :runtime
|
|
84
91
|
prerelease: false
|
|
85
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -87,9 +94,6 @@ dependencies:
|
|
|
87
94
|
- - "~>"
|
|
88
95
|
- !ruby/object:Gem::Version
|
|
89
96
|
version: 1.2.20
|
|
90
|
-
- - ">="
|
|
91
|
-
- !ruby/object:Gem::Version
|
|
92
|
-
version: 1.2.20
|
|
93
97
|
- !ruby/object:Gem::Dependency
|
|
94
98
|
name: colorize
|
|
95
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -97,9 +101,6 @@ dependencies:
|
|
|
97
101
|
- - "~>"
|
|
98
102
|
- !ruby/object:Gem::Version
|
|
99
103
|
version: 0.8.1
|
|
100
|
-
- - ">="
|
|
101
|
-
- !ruby/object:Gem::Version
|
|
102
|
-
version: 0.8.1
|
|
103
104
|
type: :runtime
|
|
104
105
|
prerelease: false
|
|
105
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -107,9 +108,6 @@ dependencies:
|
|
|
107
108
|
- - "~>"
|
|
108
109
|
- !ruby/object:Gem::Version
|
|
109
110
|
version: 0.8.1
|
|
110
|
-
- - ">="
|
|
111
|
-
- !ruby/object:Gem::Version
|
|
112
|
-
version: 0.8.1
|
|
113
111
|
- !ruby/object:Gem::Dependency
|
|
114
112
|
name: simple_cloud_logging
|
|
115
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -117,9 +115,6 @@ dependencies:
|
|
|
117
115
|
- - "~>"
|
|
118
116
|
- !ruby/object:Gem::Version
|
|
119
117
|
version: 1.2.6
|
|
120
|
-
- - ">="
|
|
121
|
-
- !ruby/object:Gem::Version
|
|
122
|
-
version: 1.2.6
|
|
123
118
|
type: :runtime
|
|
124
119
|
prerelease: false
|
|
125
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -127,9 +122,6 @@ dependencies:
|
|
|
127
122
|
- - "~>"
|
|
128
123
|
- !ruby/object:Gem::Version
|
|
129
124
|
version: 1.2.6
|
|
130
|
-
- - ">="
|
|
131
|
-
- !ruby/object:Gem::Version
|
|
132
|
-
version: 1.2.6
|
|
133
125
|
- !ruby/object:Gem::Dependency
|
|
134
126
|
name: simple_command_line_parser
|
|
135
127
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -137,9 +129,6 @@ dependencies:
|
|
|
137
129
|
- - "~>"
|
|
138
130
|
- !ruby/object:Gem::Version
|
|
139
131
|
version: 1.1.2
|
|
140
|
-
- - ">="
|
|
141
|
-
- !ruby/object:Gem::Version
|
|
142
|
-
version: 1.1.2
|
|
143
132
|
type: :runtime
|
|
144
133
|
prerelease: false
|
|
145
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -147,10 +136,7 @@ dependencies:
|
|
|
147
136
|
- - "~>"
|
|
148
137
|
- !ruby/object:Gem::Version
|
|
149
138
|
version: 1.1.2
|
|
150
|
-
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: 1.1.2
|
|
153
|
-
description: Ruby library for Mass API.
|
|
139
|
+
description: Ruby library for MassProspecting API.
|
|
154
140
|
email: leandro@massprospecting.com
|
|
155
141
|
executables: []
|
|
156
142
|
extensions: []
|
|
@@ -206,5 +192,5 @@ requirements: []
|
|
|
206
192
|
rubygems_version: 3.3.7
|
|
207
193
|
signing_key:
|
|
208
194
|
specification_version: 4
|
|
209
|
-
summary: Ruby library for
|
|
195
|
+
summary: Ruby library for MassProspecting API.
|
|
210
196
|
test_files: []
|