board_posting_duo 0.0.52 → 0.0.55
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/board_posting_duo.rb +319 -120
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd7fc37f45c4caaba9ebc3526ae0596865098dc2563232022e70dc6809440d87
|
4
|
+
data.tar.gz: dd2fa6f21d1b79a4a94cd5dfe914447ef4f4581956ba9bce80ea8b1f45062a91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a1048a21d7c31a398d36a75f8a108910bccb145cd6f15a3f64c0c70c6b3079e0e259811922a57ab54957daafb9ca61b087d5d787e1421ca09595143d16dab9b
|
7
|
+
data.tar.gz: 6cebb506ceeabab1da136c11fffb579063fae5a901fa28f33cb91246b0da7c69ce277ea67a0946d568a3224452cfe0a7d98263c9b10b6ac27fdd6dc366374df6
|
data/lib/board_posting_duo.rb
CHANGED
@@ -28,7 +28,6 @@ require 'watir'
|
|
28
28
|
# or
|
29
29
|
#driver.find_element(:class_name, 'highlight-java')
|
30
30
|
|
31
|
-
|
32
31
|
class Naver
|
33
32
|
|
34
33
|
def chrome_start(proxy)
|
@@ -134,9 +133,9 @@ class Naver
|
|
134
133
|
|
135
134
|
|
136
135
|
|
137
|
-
def login(proxy
|
136
|
+
def login(proxy)
|
138
137
|
chrome_start(proxy)
|
139
|
-
|
138
|
+
|
140
139
|
|
141
140
|
@driver.get('chrome-extension://ifibfemgeogfhoebkmokieepdoobkbpo/options/options.html')
|
142
141
|
sleep(1)
|
@@ -148,79 +147,11 @@ class Naver
|
|
148
147
|
@driver.switch_to.window(@driver.window_handles[0])
|
149
148
|
end
|
150
149
|
sleep(1)
|
151
|
-
|
152
|
-
|
153
|
-
####################탭나누기 수정중######################################
|
154
|
-
begin
|
155
|
-
puts '-[√] 투 캡챠 api 입력 시도 1.......'.green
|
156
|
-
|
157
|
-
@driver.switch_to.window(@driver.window_handles[0])
|
158
|
-
|
159
|
-
|
160
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
161
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 5)
|
162
|
-
#요소가 나타날 때까지 60초 동안 기다립니다.
|
163
|
-
wait.until { @driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[2]/input') }
|
164
|
-
@driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[2]/input').click
|
165
|
-
sleep(1)
|
166
|
-
Clipboard.copy(captcha_key)
|
167
|
-
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
168
|
-
sleep(1)
|
169
|
-
@driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[3]/button').click
|
170
|
-
sleep(1)
|
171
|
-
@driver.switch_to.alert.dismiss
|
172
|
-
|
173
|
-
rescue
|
174
|
-
begin
|
175
|
-
puts '-[√] 투 캡챠 api 입력 시도 2.......'.green
|
176
|
-
sleep(1)
|
177
|
-
@driver.switch_to.window(@driver.window_handles[0])
|
178
|
-
sleep(1)
|
179
|
-
|
180
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
181
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 5)
|
182
|
-
#요소가 나타날 때까지 60초 동안 기다립니다.
|
183
|
-
wait.until { @driver.find_element(:name, 'apiKey') }
|
184
|
-
@driver.find_element(:name, 'apiKey').click
|
185
|
-
sleep(1)
|
186
|
-
begin
|
187
|
-
@driver.find_element(:name, 'apiKey').click
|
188
|
-
rescue
|
189
|
-
|
190
|
-
puts '-[√] 로딩 및 코드인식 실패등 기타 이유로 다음 게시판 작업으로 이동합니다.......'.red
|
191
|
-
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
192
|
-
|
193
|
-
end
|
194
|
-
|
195
|
-
Clipboard.copy(captcha_key)
|
196
|
-
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
197
|
-
sleep(1)
|
198
|
-
@driver.find_element(:class_name, 'default-btn').click
|
199
|
-
sleep(1)
|
200
|
-
@driver.switch_to.alert.dismiss
|
201
|
-
|
202
|
-
rescue => e
|
203
|
-
puts '-[√] 로딩 및 코드인식 실패등 기타 이유로 다음 게시판 작업으로 이동합니다.......'.red
|
204
|
-
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
205
|
-
puts e
|
206
|
-
@driver.close
|
207
|
-
return 0
|
208
|
-
end
|
209
|
-
end
|
210
|
-
@driver.switch_to.window(@driver.window_handles[0])
|
211
|
-
####################탭나누기 수정중######################################
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
end
|
150
|
+
end
|
220
151
|
|
221
152
|
sleep(1)
|
222
153
|
|
223
|
-
def update(user_id, user_pw, title, content, option, post_url, signup_url, login_url, cc_check_url, image_url_cheng, img_link2, category, more_txt1, more_txt2, more_txt3, more_txt4, keyword)
|
154
|
+
def update(user_id, user_pw, title, content, option, post_url, signup_url, login_url, cc_check_url, image_url_cheng, img_link2, category, more_txt1, more_txt2, more_txt3, more_txt4, captcha_key, keyword)
|
224
155
|
puts 'start...'.yellow
|
225
156
|
@user_id = user_id
|
226
157
|
@user_pw = user_pw
|
@@ -235,14 +166,85 @@ def update(user_id, user_pw, title, content, option, post_url, signup_url, login
|
|
235
166
|
@more_txt2 = more_txt2
|
236
167
|
@more_txt3 = more_txt3
|
237
168
|
@more_txt4 = more_txt4
|
169
|
+
@captcha_key = captcha_key
|
238
170
|
sleep(1)
|
239
171
|
|
240
172
|
|
173
|
+
####################탭나누기 수정중######################################
|
174
|
+
begin
|
175
|
+
puts '-[√] 투 캡챠 api 입력 시도 1.......'.green
|
176
|
+
|
177
|
+
@driver.switch_to.window(@driver.window_handles[0])
|
178
|
+
|
179
|
+
|
180
|
+
# 요소 찾기 타임아웃을 10초로 설정
|
181
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 5)
|
182
|
+
#요소가 나타날 때까지 60초 동안 기다립니다.
|
183
|
+
wait.until { @driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[2]/input') }
|
184
|
+
@driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[2]/input').click
|
185
|
+
sleep(1)
|
186
|
+
Clipboard.copy(captcha_key)
|
187
|
+
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
188
|
+
sleep(1)
|
189
|
+
@driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[3]/button').click
|
190
|
+
sleep(2)
|
191
|
+
@driver.switch_to.alert.accept
|
192
|
+
|
193
|
+
rescue
|
194
|
+
begin
|
195
|
+
puts '-[√] 투 캡챠 api 입력 시도 2.......'.green
|
196
|
+
sleep(1)
|
197
|
+
@driver.switch_to.window(@driver.window_handles[0])
|
198
|
+
|
199
|
+
|
200
|
+
# 요소 찾기 타임아웃을 10초로 설정
|
201
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 5)
|
202
|
+
#요소가 나타날 때까지 60초 동안 기다립니다.
|
203
|
+
wait.until { @driver.find_element(:xpath, '//*[@name="apiKey"]') }
|
204
|
+
@driver.find_element(:xpath, '//*[@name="apiKey"]').click
|
205
|
+
sleep(1)
|
206
|
+
begin
|
207
|
+
@driver.find_element(:xpath, '//*[@name="apiKey"]').click
|
208
|
+
rescue
|
209
|
+
|
210
|
+
puts '-[√] 로딩 및 코드인식 실패등 기타 이유로 다음 게시판 작업으로 이동합니다.......'.red
|
211
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
212
|
+
|
213
|
+
end
|
214
|
+
|
215
|
+
Clipboard.copy(captcha_key)
|
216
|
+
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
217
|
+
sleep(1)
|
218
|
+
begin
|
219
|
+
@driver.find_element(:class_name, 'default-btn').click
|
220
|
+
sleep(2)
|
221
|
+
@driver.switch_to.alert.accept
|
222
|
+
rescue => e
|
223
|
+
puts e
|
224
|
+
@driver.quit
|
225
|
+
return 0
|
226
|
+
end
|
227
|
+
|
228
|
+
rescue => e
|
229
|
+
puts '-[√] 로딩 및 코드인식 실패등 기타 이유로 다음 게시판 작업으로 이동합니다.......'.red
|
230
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
231
|
+
puts e
|
232
|
+
@driver.quit
|
233
|
+
return 0
|
234
|
+
end
|
235
|
+
end
|
236
|
+
@driver.switch_to.window(@driver.window_handles[0])
|
237
|
+
####################탭나누기 수정중######################################
|
238
|
+
sleep(2)
|
239
|
+
|
240
|
+
|
241
241
|
|
242
242
|
##################
|
243
243
|
signup_url = option['signup_url'].to_s
|
244
244
|
|
245
245
|
|
246
|
+
|
247
|
+
|
246
248
|
begin
|
247
249
|
if signup_url == '' or signup_url == '회원가입 페이지 url'
|
248
250
|
|
@@ -250,7 +252,8 @@ def update(user_id, user_pw, title, content, option, post_url, signup_url, login
|
|
250
252
|
|
251
253
|
@driver.get(signup_url)
|
252
254
|
puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
|
253
|
-
|
255
|
+
|
256
|
+
|
254
257
|
begin
|
255
258
|
# 요소 찾기 타임아웃을 10초로 설정
|
256
259
|
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
@@ -3377,13 +3380,15 @@ post_url = option['post_url'].to_s
|
|
3377
3380
|
@driver.get(post_url)
|
3378
3381
|
|
3379
3382
|
begin
|
3380
|
-
sleep(
|
3381
|
-
@driver.switch_to.alert.accept
|
3383
|
+
sleep(2)
|
3384
|
+
@driver.switch_to.alert.accept
|
3382
3385
|
rescue
|
3383
3386
|
end
|
3384
3387
|
|
3385
3388
|
|
3386
3389
|
|
3390
|
+
|
3391
|
+
|
3387
3392
|
begin
|
3388
3393
|
# 요소 찾기 타임아웃을 10초로 설정
|
3389
3394
|
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
@@ -3400,6 +3405,7 @@ post_url = option['post_url'].to_s
|
|
3400
3405
|
#요소가 나타날 때까지 20초 동안 기다립니다.
|
3401
3406
|
wait.until { @driver.find_element(:xpath, '/html') }
|
3402
3407
|
@driver.find_element(:xpath, '/html')
|
3408
|
+
sleep(1)
|
3403
3409
|
rescue => e
|
3404
3410
|
puts '-[√] 글쓰기 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
|
3405
3411
|
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
@@ -3586,21 +3592,23 @@ post_url = option['post_url'].to_s
|
|
3586
3592
|
sleep(1)
|
3587
3593
|
#@driver.execute_script("document.body.style.zoom = '0.70'")
|
3588
3594
|
rescue => e
|
3595
|
+
begin
|
3596
|
+
@driver.switch_to.alert.accept
|
3597
|
+
rescue
|
3598
|
+
end
|
3589
3599
|
puts '-[√] 글쓰기 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
|
3590
3600
|
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
3591
3601
|
puts e
|
3592
|
-
@driver.
|
3602
|
+
@driver.quit
|
3593
3603
|
return 0
|
3594
3604
|
end
|
3595
3605
|
end
|
3596
3606
|
|
3597
|
-
|
3598
|
-
|
3599
|
-
|
3600
|
-
|
3601
|
-
|
3602
|
-
#rescue
|
3603
|
-
#end
|
3607
|
+
begin
|
3608
|
+
@driver.switch_to.alert.accept
|
3609
|
+
sleep(2)
|
3610
|
+
rescue
|
3611
|
+
end
|
3604
3612
|
|
3605
3613
|
|
3606
3614
|
begin
|
@@ -3650,8 +3658,6 @@ post_url = option['post_url'].to_s
|
|
3650
3658
|
|
3651
3659
|
|
3652
3660
|
|
3653
|
-
|
3654
|
-
|
3655
3661
|
end
|
3656
3662
|
|
3657
3663
|
|
@@ -4238,66 +4244,86 @@ post_url = option['post_url'].to_s
|
|
4238
4244
|
|
4239
4245
|
##닉네임 입력 코드 부분─────────────────────────────────────────────────────────────────────>
|
4240
4246
|
puts '-[√] 닉네임 패스워드 입력 가능 여부 체크.......'.yellow
|
4241
|
-
|
4247
|
+
|
4242
4248
|
begin
|
4243
4249
|
@driver.find_element(:xpath, '//*[@id="wr_name"]').send_keys(user_id)
|
4250
|
+
sleep(1)
|
4244
4251
|
rescue
|
4245
4252
|
begin
|
4246
4253
|
@driver.find_element(:xpath, '//*[@fw-label="작성자"]').send_keys(user_id)
|
4254
|
+
sleep(1)
|
4247
4255
|
rescue
|
4248
4256
|
begin
|
4249
4257
|
@driver.find_element(:xpath, '//*[@name="member_display"]').send_keys(user_id)
|
4258
|
+
sleep(1)
|
4250
4259
|
rescue
|
4251
4260
|
begin
|
4252
4261
|
@driver.find_element(:xpath, '//*[@title="닉네임"]').send_keys(user_id)
|
4262
|
+
sleep(1)
|
4253
4263
|
rescue
|
4254
4264
|
begin
|
4255
4265
|
@driver.find_element(:xpath, '//*[@name="name"]').send_keys(user_id)
|
4266
|
+
sleep(1)
|
4256
4267
|
rescue
|
4257
4268
|
begin
|
4258
4269
|
@driver.find_element(:xpath, '//*[@name="writer"]').send_keys(user_id)
|
4270
|
+
sleep(1)
|
4259
4271
|
rescue
|
4260
4272
|
begin
|
4261
4273
|
@driver.find_element(:xpath, '//*[@name="hname"]').send_keys(user_id)
|
4274
|
+
sleep(1)
|
4262
4275
|
rescue
|
4263
4276
|
begin
|
4264
4277
|
@driver.find_element(:xpath, '//*[@name="wr_name"]').send_keys(user_id)
|
4278
|
+
sleep(1)
|
4265
4279
|
rescue
|
4266
4280
|
begin
|
4267
4281
|
@driver.find_element(:xpath, '//*[@name="post_nickname"]').send_keys(user_id)
|
4282
|
+
sleep(1)
|
4268
4283
|
rescue
|
4269
4284
|
begin
|
4270
4285
|
@driver.find_element(:xpath, '//*[@name="user_name"]').send_keys(user_id)
|
4286
|
+
sleep(1)
|
4271
4287
|
rescue
|
4272
4288
|
begin
|
4273
4289
|
@driver.find_element(:xpath, '//*[@class="mb-user-name"]').send_keys(user_id)
|
4290
|
+
sleep(1)
|
4274
4291
|
rescue
|
4275
4292
|
begin
|
4276
4293
|
@driver.find_element(:xpath, '//*[@placeholder="비회원 닉네임"]').send_keys(user_id)
|
4294
|
+
sleep(1)
|
4277
4295
|
rescue
|
4278
4296
|
begin
|
4279
4297
|
@driver.find_element(:xpath, '//*[@placeholder="이름"]').send_keys(user_id)
|
4298
|
+
sleep(1)
|
4280
4299
|
rescue
|
4281
4300
|
begin
|
4282
4301
|
@driver.find_element(:xpath, '//*[@name="nickname"]').send_keys(user_id)
|
4302
|
+
sleep(1)
|
4283
4303
|
rescue
|
4284
4304
|
begin
|
4285
4305
|
@driver.find_element(:xpath, '//*[@name="nick"]').send_keys(user_id)
|
4306
|
+
sleep(1)
|
4286
4307
|
rescue
|
4287
4308
|
begin
|
4288
4309
|
@driver.find_element(:xpath, '//*[@placeholder="작성자 이름"]').send_keys(user_id)
|
4310
|
+
sleep(1)
|
4289
4311
|
rescue
|
4290
4312
|
begin
|
4291
4313
|
@driver.find_element(:xpath, '//*[@id="reg_name"]').send_keys(user_id)
|
4314
|
+
sleep(1)
|
4292
4315
|
rescue
|
4293
4316
|
begin
|
4294
4317
|
@driver.find_element(:xpath, '//*[@id="postWriter"]').send_keys(user_id)
|
4318
|
+
sleep(1)
|
4295
4319
|
rescue
|
4296
4320
|
begin
|
4297
4321
|
@driver.find_element(:xpath, '//*[@id="kboard-input-member-display"]').send_keys(user_id)
|
4322
|
+
sleep(1)
|
4298
4323
|
rescue
|
4299
4324
|
begin
|
4300
4325
|
@driver.find_element(:xpath, '//*[@name="nick_name"]').send_keys(user_id)
|
4326
|
+
sleep(1)
|
4301
4327
|
rescue
|
4302
4328
|
|
4303
4329
|
end
|
@@ -4322,53 +4348,68 @@ begin
|
|
4322
4348
|
|
4323
4349
|
end
|
4324
4350
|
##<─────────────────────────────────────────────────────────────────────닉네임 입력 코드 부분
|
4325
|
-
|
4351
|
+
|
4326
4352
|
|
4327
4353
|
##패스워드 입력 코드 부분─────────────────────────────────────────────────────────────────────>
|
4328
4354
|
begin
|
4329
4355
|
@driver.find_element(:xpath, '//*[@id="wr_password"]').send_keys(user_pw)
|
4356
|
+
sleep(1)
|
4330
4357
|
rescue
|
4331
4358
|
begin
|
4332
4359
|
@driver.find_element(:xpath, '//*[@fw-label="비밀번호"]').send_keys(user_pw)
|
4360
|
+
sleep(1)
|
4333
4361
|
rescue
|
4334
4362
|
begin
|
4335
4363
|
@driver.find_element(:xpath, '//*[@name="password"]').send_keys(user_pw)
|
4364
|
+
sleep(1)
|
4336
4365
|
rescue
|
4337
4366
|
begin
|
4338
4367
|
@driver.find_element(:xpath, '//*[@title="비밀번호"]').send_keys(user_pw)
|
4368
|
+
sleep(1)
|
4339
4369
|
rescue
|
4340
4370
|
begin
|
4341
4371
|
@driver.find_element(:xpath, '//*[@type="password"]').send_keys(user_pw)
|
4372
|
+
sleep(1)
|
4342
4373
|
rescue
|
4343
4374
|
begin
|
4344
4375
|
@driver.find_element(:xpath, '//*[@name="wr_password"]').send_keys(user_pw)
|
4376
|
+
sleep(1)
|
4345
4377
|
rescue
|
4346
4378
|
begin
|
4347
4379
|
@driver.find_element(:xpath, '//*[@name="passwd"]').send_keys(user_pw)
|
4380
|
+
sleep(1)
|
4348
4381
|
rescue
|
4349
4382
|
begin
|
4350
4383
|
@driver.find_element(:xpath, '//*[@name="post_password"]').send_keys(user_pw)
|
4384
|
+
sleep(1)
|
4351
4385
|
rescue
|
4352
4386
|
begin
|
4353
4387
|
@driver.find_element(:xpath, '//*[@class="mb-passwd"]').send_keys(user_pw)
|
4388
|
+
sleep(1)
|
4354
4389
|
rescue
|
4355
4390
|
begin
|
4356
4391
|
@driver.find_element(:xpath, '//*[@placeholder="비밀번호"]').send_keys(user_pw)
|
4392
|
+
sleep(1)
|
4357
4393
|
rescue
|
4358
4394
|
begin
|
4359
4395
|
@driver.find_element(:xpath, '//*[@id="passwd"]').send_keys(user_pw)
|
4396
|
+
sleep(1)
|
4360
4397
|
rescue
|
4361
4398
|
begin
|
4362
4399
|
@driver.find_element(:xpath, '//*[@id="blogPostPassword1"]').send_keys(user_pw)
|
4400
|
+
sleep(1)
|
4363
4401
|
rescue
|
4364
4402
|
begin
|
4365
4403
|
@driver.find_element(:xpath, '//*[@name="secret_pass"]').send_keys(user_pw)
|
4404
|
+
sleep(1)
|
4366
4405
|
rescue
|
4367
4406
|
begin
|
4368
4407
|
@driver.find_element(:xpath, '//*[@id="reg_pwd"]').send_keys(user_pw)
|
4408
|
+
sleep(1)
|
4369
4409
|
rescue
|
4370
4410
|
begin
|
4371
4411
|
@driver.find_element(:xpath, '//*[@id="kboard-input-password"]').send_keys(user_pw)
|
4412
|
+
sleep(1)
|
4372
4413
|
rescue
|
4373
4414
|
|
4374
4415
|
end
|
@@ -4393,9 +4434,11 @@ begin
|
|
4393
4434
|
##패스워드 입력 2차 코드 부분─────────────────────────────────────────────────────────────────────>
|
4394
4435
|
begin
|
4395
4436
|
@driver.find_element(:xpath, '//*[@for="blogPostPassword2"]').send_keys(user_pw)
|
4437
|
+
sleep(1)
|
4396
4438
|
rescue
|
4397
4439
|
begin
|
4398
4440
|
@driver.find_element(:xpath, '//*[@id="blogPostPassword2"]').send_keys(user_pw)
|
4441
|
+
sleep(1)
|
4399
4442
|
rescue
|
4400
4443
|
puts '-[√] 닉네임 패스워드 2차 코드 탐색 종료.......'.yellow
|
4401
4444
|
sleep(1)
|
@@ -4600,28 +4643,41 @@ begin
|
|
4600
4643
|
begin
|
4601
4644
|
|
4602
4645
|
@driver.find_element(:xpath, '//*[@id="ca_name"]').click
|
4646
|
+
sleep(1)
|
4603
4647
|
rescue
|
4604
4648
|
begin
|
4605
4649
|
@driver.find_element(:xpath, '//*[@name="ca_name"]').click
|
4650
|
+
sleep(1)
|
4606
4651
|
rescue
|
4607
4652
|
begin
|
4608
4653
|
@driver.find_element(:xpath, '//*[@name="category1"]').click
|
4654
|
+
sleep(1)
|
4609
4655
|
rescue
|
4610
4656
|
begin
|
4611
4657
|
@driver.find_element(:xpath, '//*[@title="Category1"]').click
|
4658
|
+
sleep(1)
|
4612
4659
|
rescue
|
4613
4660
|
begin
|
4614
4661
|
@driver.find_element(:xpath, '//*[@id="kboard-tree-category-1"]').click
|
4662
|
+
sleep(1)
|
4615
4663
|
rescue
|
4616
4664
|
begin
|
4617
4665
|
@driver.find_element(:xpath, '//*[@name="category_srl"]').click
|
4666
|
+
sleep(1)
|
4618
4667
|
rescue
|
4619
4668
|
begin
|
4620
4669
|
@driver.find_element(:xpath, '//*[@class="category"]').click
|
4670
|
+
sleep(1)
|
4621
4671
|
rescue
|
4622
4672
|
begin
|
4623
4673
|
@driver.find_element(:xpath, '//*[@id="datepicker"]').click
|
4674
|
+
sleep(1)
|
4624
4675
|
rescue
|
4676
|
+
begin
|
4677
|
+
@driver.find_element(:xpath, '//*[@name="CATEGORY"]').click
|
4678
|
+
sleep(1)
|
4679
|
+
rescue
|
4680
|
+
end
|
4625
4681
|
end
|
4626
4682
|
end
|
4627
4683
|
end
|
@@ -4630,7 +4686,7 @@ begin
|
|
4630
4686
|
end
|
4631
4687
|
end
|
4632
4688
|
end
|
4633
|
-
|
4689
|
+
|
4634
4690
|
|
4635
4691
|
puts '-[√] 카테고리 2차 코드 탐색.......'.magenta
|
4636
4692
|
begin
|
@@ -4642,7 +4698,7 @@ begin
|
|
4642
4698
|
sleep(1)
|
4643
4699
|
|
4644
4700
|
end
|
4645
|
-
|
4701
|
+
|
4646
4702
|
|
4647
4703
|
|
4648
4704
|
end
|
@@ -4654,39 +4710,52 @@ begin
|
|
4654
4710
|
puts '-[√] 다음 작업 준비 중으로 1~60 초 정도 기다려주세요.......'.red
|
4655
4711
|
@driver.close
|
4656
4712
|
end
|
4657
|
-
|
4713
|
+
|
4658
4714
|
##<─────────────────────────────────────────────────────────────────────카테고리 선택 코드 부분
|
4659
4715
|
|
4660
4716
|
|
4661
|
-
|
4717
|
+
|
4662
4718
|
##체크박스 코드 부분─────────────────────────────────────────────────────────────────────>
|
4663
4719
|
puts '-[√] 체크 항목 탐색 시작.......'.yellow
|
4664
4720
|
begin
|
4665
4721
|
@driver.find_element(:xpath, '//*[@for="privacy_agreement_radio0"]').click
|
4722
|
+
sleep(1)
|
4666
4723
|
rescue
|
4667
4724
|
begin
|
4668
4725
|
@driver.find_element(:partial_link_text, '동의함').click #요소같고 텍스트가 다를때 텍스트로 타겟
|
4726
|
+
sleep(1)
|
4669
4727
|
rescue
|
4670
4728
|
begin
|
4671
4729
|
@driver.find_element(:xpath, '/*[@id="tags"]').click
|
4730
|
+
sleep(1)
|
4672
4731
|
rescue
|
4673
4732
|
begin
|
4674
4733
|
@driver.find_element(:xpath, '//*[@id="moreMisc-1"]').click
|
4734
|
+
sleep(1)
|
4675
4735
|
rescue
|
4736
|
+
begin
|
4737
|
+
@driver.find_element(:xpath, '//*[@value="html"]').click
|
4738
|
+
sleep(1)
|
4739
|
+
rescue
|
4676
4740
|
begin
|
4677
4741
|
@driver.find_element(:xpath, '//*[@type="radio"]').click
|
4742
|
+
sleep(1)
|
4678
4743
|
rescue
|
4679
4744
|
begin
|
4680
4745
|
@driver.find_element(:xpath, '//*[@id="subjects"]/label[1]').click
|
4746
|
+
sleep(1)
|
4681
4747
|
rescue
|
4682
4748
|
begin
|
4683
4749
|
@driver.find_element(:xpath, '//*[@id="boardPrivacyCheck"]').click
|
4750
|
+
sleep(1)
|
4684
4751
|
rescue
|
4685
4752
|
begin
|
4686
4753
|
@driver.find_element(:xpath, '//*[@for="boardPrivacyCheck"]').click
|
4754
|
+
sleep(1)
|
4687
4755
|
rescue
|
4688
4756
|
|
4689
4757
|
end
|
4758
|
+
end
|
4690
4759
|
end
|
4691
4760
|
end
|
4692
4761
|
end
|
@@ -4694,15 +4763,34 @@ begin
|
|
4694
4763
|
end
|
4695
4764
|
end
|
4696
4765
|
end
|
4697
|
-
##<─────────────────────────────────────────────────────────────────────체크박스코드 부분
|
4766
|
+
##<─────────────────────────────────────────────────────────────────────체크박스코드 부분
|
4698
4767
|
|
4699
4768
|
|
4769
|
+
begin
|
4770
|
+
#요소 자체 제거 하기 기능
|
4771
|
+
|
4772
|
+
chat_box = @driver.find_element(:xpath, '//*[@bgcolor="#F6F5F5"]')
|
4773
|
+
@driver.execute_script("arguments[0].remove();", chat_box)
|
4774
|
+
puts '숨김 code 제거 완료.......'.green
|
4775
|
+
sleep(1)
|
4776
|
+
rescue
|
4777
|
+
end
|
4778
|
+
|
4779
|
+
begin
|
4780
|
+
#요소 자체 제거 하기 기능
|
4781
|
+
|
4782
|
+
chat_box = @driver.find_element(:xpath, '//*[@id="tempSaveContent"]')
|
4783
|
+
@driver.execute_script("arguments[0].remove();", chat_box)
|
4784
|
+
puts '숨김 code 제거 완료.......'.green
|
4785
|
+
sleep(1)
|
4786
|
+
rescue
|
4787
|
+
end
|
4700
4788
|
|
4701
4789
|
|
4702
4790
|
title = title.strip
|
4703
4791
|
##제목 입력 코드 부분─────────────────────────────────────────────────────────────────────>
|
4704
4792
|
puts '-[√] 제목 입력 필드 탐색 시작.......'.yellow
|
4705
|
-
|
4793
|
+
|
4706
4794
|
begin
|
4707
4795
|
@driver.find_element(:xpath, '//*[@id="wr_subject"]').click
|
4708
4796
|
sleep(1)
|
@@ -4892,14 +4980,24 @@ begin
|
|
4892
4980
|
@driver.find_element(:xpath, '//*[@for="wr_subject"]').send_keys(title)
|
4893
4981
|
puts '-[√] 제목 code 35.......'.yellow
|
4894
4982
|
|
4895
|
-
rescue
|
4896
|
-
|
4897
|
-
|
4898
|
-
|
4899
|
-
|
4900
|
-
|
4901
|
-
|
4902
|
-
|
4983
|
+
rescue
|
4984
|
+
begin
|
4985
|
+
|
4986
|
+
@driver.find_element(:xpath, '//*[@name="SUBJECT"]').send_keys(title)
|
4987
|
+
sleep(1)
|
4988
|
+
@driver.action.key_down(:tab).key_up(:tab).perform #x탭
|
4989
|
+
puts '-[√] 제목 code 36.......'.yellow
|
4990
|
+
|
4991
|
+
rescue => e
|
4992
|
+
|
4993
|
+
puts '-[√] 제목 입력 항목 코드 탐색 실패!!.......'.red
|
4994
|
+
puts '-[√] 다음 작업 준비 중으로 1~60 초 정도 기다려주세요.......'.red
|
4995
|
+
puts e
|
4996
|
+
@driver.close
|
4997
|
+
return 0
|
4998
|
+
|
4999
|
+
|
5000
|
+
end
|
4903
5001
|
|
4904
5002
|
end
|
4905
5003
|
end
|
@@ -4943,7 +5041,6 @@ begin
|
|
4943
5041
|
##<─────────────────────────────────────────────────────────────────────제목 입력 코드 부분
|
4944
5042
|
|
4945
5043
|
|
4946
|
-
|
4947
5044
|
##HTML 버튼 코드 부분─────────────────────────────────────────────────────────────────────>
|
4948
5045
|
puts '-[√] HTML 코드 변경 버튼 탐색 시작.......'.yellow
|
4949
5046
|
sleep(1)
|
@@ -4954,102 +5051,147 @@ begin
|
|
4954
5051
|
@driver.find_element(:xpath, '//*[@class="se2_to_html"]').click
|
4955
5052
|
#아이프레임 나오기
|
4956
5053
|
@driver.switch_to.default_content()
|
5054
|
+
puts '-[√] HTML 코드 1 code.......'.yellow
|
4957
5055
|
rescue
|
4958
5056
|
begin
|
4959
5057
|
|
4960
5058
|
@driver.find_element(:xpath, '//*[@title="HTML 편집"]').click
|
5059
|
+
puts '-[√] HTML 코드 2 code.......'.yellow
|
4961
5060
|
|
4962
5061
|
rescue
|
4963
5062
|
begin
|
4964
5063
|
|
4965
5064
|
@driver.find_element(:xpath, '//*[@id="html"]').click
|
5065
|
+
puts '-[√] HTML 코드 3 code.......'.yellow
|
4966
5066
|
rescue
|
4967
5067
|
begin
|
4968
5068
|
|
4969
5069
|
@driver.find_element(:xpath, '//*[@title="코드보기"]').click
|
5070
|
+
puts '-[√] HTML 코드 4 code.......'.yellow
|
4970
5071
|
rescue
|
4971
5072
|
begin
|
4972
5073
|
|
4973
5074
|
@driver.find_element(:xpath, '//*[@id="chk_html"]').click
|
5075
|
+
puts '-[√] HTML 코드 5 code.......'.yellow
|
4974
5076
|
rescue
|
4975
5077
|
begin
|
4976
5078
|
|
4977
5079
|
@driver.find_element(:xpath, '//*[@id="kboard_content-html"]').click
|
5080
|
+
puts '-[√] HTML 코드 6 code.......'.yellow
|
4978
5081
|
rescue
|
4979
5082
|
begin
|
4980
5083
|
|
4981
5084
|
@driver.find_element(:xpath, '//*[@alt="코드"]').click
|
5085
|
+
puts '-[√] HTML 코드 7 code.......'.yellow
|
4982
5086
|
rescue
|
4983
5087
|
begin
|
4984
5088
|
|
4985
5089
|
@driver.find_element(:xpath, '//*[@title="HTML 편집기"]').click
|
5090
|
+
puts '-[√] HTML 코드 8 code.......'.yellow
|
4986
5091
|
rescue
|
4987
5092
|
begin
|
4988
5093
|
|
4989
5094
|
@driver.find_element(:xpath, '//*[@name="tag"]').click
|
5095
|
+
puts '-[√] HTML 코드 9 code.......'.yellow
|
4990
5096
|
rescue
|
4991
5097
|
begin
|
4992
|
-
|
4993
|
-
|
5098
|
+
@driver.find_element(:xpath, '//*[@name="html"]').click
|
5099
|
+
puts '-[√] HTML 코드 10 code.......'.yellow
|
5100
|
+
sleep(1.5)
|
5101
|
+
|
4994
5102
|
rescue
|
4995
5103
|
begin
|
4996
5104
|
|
4997
5105
|
@driver.find_element(:xpath, '//*[@id="html"]').click
|
5106
|
+
puts '-[√] HTML 코드 12 code.......'.yellow
|
5107
|
+
sleep(1)
|
4998
5108
|
rescue
|
4999
5109
|
begin
|
5000
5110
|
|
5001
5111
|
@driver.find_element(:xpath, '//*[@data-wp-editor-id="kboard_content"]').click
|
5112
|
+
puts '-[√] HTML 코드 13 code.......'.yellow
|
5113
|
+
sleep(1)
|
5002
5114
|
rescue
|
5003
5115
|
begin
|
5004
5116
|
|
5005
5117
|
@driver.find_element(:xpath, '//*[@title="소스"]').click
|
5118
|
+
puts '-[√] HTML 코드 14 code.......'.yellow
|
5119
|
+
sleep(1)
|
5006
5120
|
rescue
|
5007
5121
|
begin
|
5008
5122
|
|
5009
5123
|
@driver.find_element(:xpath, '//*[@class="note-btn btn-codeview note-codeview-keep active"]').click
|
5124
|
+
puts '-[√] HTML 코드 15 code.......'.yellow
|
5125
|
+
sleep(1)
|
5010
5126
|
rescue
|
5011
5127
|
begin
|
5012
5128
|
|
5013
5129
|
@driver.find_element(:xpath, '//*[@for="html"]').click
|
5130
|
+
puts '-[√] HTML 코드 16 code.......'.yellow
|
5131
|
+
sleep(1)
|
5014
5132
|
rescue
|
5015
5133
|
begin
|
5016
5134
|
|
5017
5135
|
@driver.find_element(:xpath, '//*[@onclick="html_auto_br(this);"]').click
|
5136
|
+
puts '-[√] HTML 코드 17 code.......'.yellow
|
5137
|
+
sleep(1)
|
5018
5138
|
rescue
|
5019
5139
|
begin
|
5020
5140
|
|
5021
5141
|
@driver.find_element(:xpath, '//*[@data-title="코드보기"]').click
|
5142
|
+
puts '-[√] HTML 코드 18 code.......'.yellow
|
5143
|
+
sleep(1)
|
5022
5144
|
rescue
|
5023
5145
|
begin
|
5024
5146
|
|
5025
5147
|
@driver.find_element(:xpath, '//*[@title="에디터 타입"]').click
|
5148
|
+
puts '-[√] HTML 코드 19 code.......'.yellow
|
5149
|
+
sleep(1)
|
5026
5150
|
rescue
|
5027
5151
|
begin
|
5028
5152
|
|
5029
5153
|
@driver.find_element(:xpath, '//*[@aria-label="코드 보기"]').click
|
5154
|
+
puts '-[√] HTML 코드 20 code.......'.yellow
|
5155
|
+
sleep(1)
|
5030
5156
|
rescue
|
5031
5157
|
begin
|
5032
5158
|
|
5033
5159
|
@driver.find_element(:xpath, '//*[@id="fwrite"]/ul/li[2]/div/div/div').click
|
5160
|
+
puts '-[√] HTML 코드 21 code.......'.yellow
|
5161
|
+
sleep(1)
|
5034
5162
|
rescue
|
5035
5163
|
begin
|
5036
5164
|
|
5037
5165
|
@driver.find_element(:xpath, '//*[@data-cke-tooltip-text="소스"]').click
|
5166
|
+
puts '-[√] HTML 코드 22 code.......'.yellow
|
5167
|
+
sleep(1)
|
5038
5168
|
rescue
|
5039
5169
|
begin
|
5040
5170
|
|
5041
5171
|
@driver.find_element(:xpath, '//*[@id="html-1"]').click
|
5172
|
+
puts '-[√] HTML 코드 23 code.......'.yellow
|
5173
|
+
sleep(1)
|
5042
5174
|
rescue
|
5043
5175
|
begin
|
5044
5176
|
|
5045
5177
|
@driver.find_element(:xpath, '//*[@id="html-1"]').click
|
5178
|
+
puts '-[√] HTML 코드 24 code.......'.yellow
|
5179
|
+
sleep(1)
|
5046
5180
|
rescue
|
5047
5181
|
begin
|
5048
5182
|
|
5049
5183
|
@driver.find_element(:xpath, '//*[@class="fas fa-code"]').click
|
5184
|
+
puts '-[√] HTML 코드 25 code.......'.yellow
|
5185
|
+
sleep(1)
|
5050
5186
|
rescue
|
5051
|
-
|
5052
|
-
|
5187
|
+
begin
|
5188
|
+
|
5189
|
+
@driver.find_element(:xpath, '//*[@title="HTML모드"]').click
|
5190
|
+
puts '-[√] HTML 코드 26 code.......'.yellow
|
5191
|
+
sleep(1)
|
5192
|
+
rescue
|
5193
|
+
|
5194
|
+
end
|
5053
5195
|
end
|
5054
5196
|
|
5055
5197
|
end
|
@@ -5273,7 +5415,25 @@ rescue
|
|
5273
5415
|
sleep(1)
|
5274
5416
|
puts '내용 항목 코드 타겟 31.......'.red
|
5275
5417
|
rescue
|
5276
|
-
|
5418
|
+
begin
|
5419
|
+
@driver.find_element(:xpath, '//*[@id="CONTENT"]').click
|
5420
|
+
sleep(1)
|
5421
|
+
puts '내용 항목 코드 타겟 32.......'.red
|
5422
|
+
rescue
|
5423
|
+
begin
|
5424
|
+
@driver.find_element(:xpath, '//*[@id="div_text"]').click
|
5425
|
+
sleep(1)
|
5426
|
+
puts '내용 항목 코드 타겟 32.......'.red
|
5427
|
+
rescue
|
5428
|
+
begin
|
5429
|
+
@driver.find_element(:xpath, '//*[@align="center"]').click
|
5430
|
+
sleep(1)
|
5431
|
+
puts '내용 항목 코드 타겟 32.......'.red
|
5432
|
+
rescue
|
5433
|
+
|
5434
|
+
end
|
5435
|
+
end
|
5436
|
+
end
|
5277
5437
|
end
|
5278
5438
|
end
|
5279
5439
|
end
|
@@ -6244,7 +6404,26 @@ if option['내용사진자동삽입'] == 'true'
|
|
6244
6404
|
end
|
6245
6405
|
#◀◀◀──────────────────────링크 삽입시
|
6246
6406
|
rescue
|
6247
|
-
|
6407
|
+
begin
|
6408
|
+
@driver.find_element(:xpath, '//*[@data-label="이미지 업로드"]').click
|
6409
|
+
sleep(5)
|
6410
|
+
Clipboard.copy(image_url_cheng) # 이미지 폴더에서 이미지 선택
|
6411
|
+
key_down('ctrl')
|
6412
|
+
key_stroke('v')
|
6413
|
+
key_up('ctrl')
|
6414
|
+
sleep(3)
|
6415
|
+
key_stroke('enter')
|
6416
|
+
sleep(3)
|
6417
|
+
#링크 삽입시──────────────────────▶▶▶
|
6418
|
+
if option['내용사진링크'] == 'true'
|
6419
|
+
puts '-[√] 이미지 링크 삽입 불가 유형 게시판.......'.green
|
6420
|
+
else
|
6421
|
+
sleep(1)
|
6422
|
+
end
|
6423
|
+
#◀◀◀──────────────────────링크 삽입시
|
6424
|
+
rescue
|
6425
|
+
|
6426
|
+
end
|
6248
6427
|
end
|
6249
6428
|
end
|
6250
6429
|
end
|
@@ -7258,10 +7437,10 @@ rescue
|
|
7258
7437
|
sleep(5)
|
7259
7438
|
rescue
|
7260
7439
|
begin
|
7261
|
-
@driver.find_element(:xpath, '//*[@
|
7440
|
+
@driver.find_element(:xpath, '//*[@id="bttnComplete1"]').send_keys()
|
7262
7441
|
sleep(2)
|
7263
7442
|
|
7264
|
-
@driver.find_element(:xpath, '//*[@
|
7443
|
+
@driver.find_element(:xpath, '//*[@id="bttnComplete1"]').click
|
7265
7444
|
puts '-[√] 등록을 14번 코드로 시도하였습니다.......'.magenta
|
7266
7445
|
sleep(5)
|
7267
7446
|
rescue
|
@@ -7334,6 +7513,15 @@ rescue
|
|
7334
7513
|
sleep(5)
|
7335
7514
|
|
7336
7515
|
rescue
|
7516
|
+
begin
|
7517
|
+
@driver.find_element(:xpath, '//*[@type="submit"]').send_keys()
|
7518
|
+
sleep(2)
|
7519
|
+
|
7520
|
+
@driver.find_element(:xpath, '//*[@type="submit"]').click
|
7521
|
+
puts '-[√] 등록을 23번 코드로 시도하였습니다.......'.magenta
|
7522
|
+
sleep(5)
|
7523
|
+
|
7524
|
+
rescue
|
7337
7525
|
########─────────────────────────────▼▼▼▼▼▼▼ 등록버튼 2차 시도 ▼▼▼▼▼▼▼──────────────────────────────#######
|
7338
7526
|
begin
|
7339
7527
|
puts '-[√] 등록 버튼 코드 탐색에 실패하였습니다.......'.magenta
|
@@ -7483,10 +7671,21 @@ rescue
|
|
7483
7671
|
puts '-[√] 등록을 시도하였습니다.......'.magenta
|
7484
7672
|
sleep(5)
|
7485
7673
|
rescue
|
7486
|
-
|
7487
|
-
|
7488
|
-
|
7489
|
-
|
7674
|
+
begin
|
7675
|
+
@driver.find_element(:xpath, '//*[@name="SUBJECT"]').send_keys()
|
7676
|
+
sleep(1)
|
7677
|
+
@driver.find_element(:xpath, '//*[@name="SUBJECT"]').click
|
7678
|
+
sleep(1)
|
7679
|
+
@driver.action.key_down(:enter).key_up(:enter).perform #엔터
|
7680
|
+
puts '-[√] 등록을 시도하였습니다.......'.magenta
|
7681
|
+
sleep(5)
|
7682
|
+
rescue
|
7683
|
+
puts '-[√] 등록 실패.......'.red
|
7684
|
+
puts '-[√] 로딩 및 코드인식 실패등 기타 이유로 다음 게시판 작업으로 이동합니다.......'.red
|
7685
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
7686
|
+
@driver.close
|
7687
|
+
|
7688
|
+
end
|
7490
7689
|
|
7491
7690
|
end
|
7492
7691
|
|
@@ -7515,7 +7714,7 @@ rescue
|
|
7515
7714
|
|
7516
7715
|
|
7517
7716
|
|
7518
|
-
|
7717
|
+
end
|
7519
7718
|
end
|
7520
7719
|
end
|
7521
7720
|
end
|
@@ -7592,13 +7791,13 @@ rescue
|
|
7592
7791
|
|
7593
7792
|
|
7594
7793
|
begin
|
7595
|
-
@driver.
|
7794
|
+
@driver.quit
|
7596
7795
|
rescue
|
7597
7796
|
end
|
7598
7797
|
|
7599
7798
|
rescue => e
|
7600
7799
|
puts '-[√] 글쓰기 페이지 접근 및 코드 탐색 ERROR 발생.......'.red
|
7601
|
-
@driver.
|
7800
|
+
@driver.quit
|
7602
7801
|
end
|
7603
7802
|
sleep(3)
|
7604
7803
|
@driver.quit
|
@@ -8228,7 +8427,7 @@ class Wordpress
|
|
8228
8427
|
@data['table'].pop
|
8229
8428
|
|
8230
8429
|
#네이버로그인
|
8231
|
-
login_check = naver.login(option['proxy']
|
8430
|
+
login_check = naver.login(option['proxy'])
|
8232
8431
|
if login_check == 0
|
8233
8432
|
black_users << table[1].to_s
|
8234
8433
|
next
|
@@ -8781,7 +8980,7 @@ class Wordpress
|
|
8781
8980
|
|
8782
8981
|
|
8783
8982
|
puts 'start...'
|
8784
|
-
naver.update(user_id, user_pw, title, content, option, post_url, signup_url, login_url, cc_check_url, image_url_cheng, img_link2, category, more_txt1, more_txt2, more_txt3, more_txt4, keyword)
|
8983
|
+
naver.update(user_id, user_pw, title, content, option, post_url, signup_url, login_url, cc_check_url, image_url_cheng, img_link2, category, more_txt1, more_txt2, more_txt3, more_txt4, captcha_key, keyword)
|
8785
8984
|
|
8786
8985
|
@data['table'][index][10] = @data['table'][index][10].to_i + 1
|
8787
8986
|
@data['table'][index][-1] = 100
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: board_posting_duo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.55
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- soonje
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: File to Clipboard gem
|
14
14
|
email: rnjstnswp123@naver.com
|