posting_duo 0.0.51 → 0.0.53
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/posting_duo.rb +454 -249
- 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: fc359a857b425b1365169ae81e5acded00d804db9806b4bd66bc1ff9c7aabbcf
|
4
|
+
data.tar.gz: a8005949efb1edb0b4b704138617bde7df718558e7c242f8ccc8c4a12d0c2074
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 483f55350ae4c9331afa45df6139fd633a4788215cf80b694742fbb82170243c53777f59412d2098dfa3cabdbc67fba211be35d43054eb43cfea9f9787d3d739
|
7
|
+
data.tar.gz: a78fef544d381d13dec78026e26c5bebbcec30c26cadf60bd6a288c393da2e02605d5e15b71484d23726f51ca4058ef5336427990bed9f2a6a4d12beb0fd4f63
|
data/lib/posting_duo.rb
CHANGED
@@ -18,9 +18,10 @@ require 'cgi'
|
|
18
18
|
require 'digest'
|
19
19
|
require 'auto_click'
|
20
20
|
require 'rainbow/refinement'
|
21
|
+
require 'watir'
|
22
|
+
require 'timeout'
|
21
23
|
include AutoClickMethods
|
22
24
|
using Rainbow
|
23
|
-
require 'watir'
|
24
25
|
|
25
26
|
|
26
27
|
|
@@ -48,16 +49,24 @@ class Naver
|
|
48
49
|
options.add_preference("credentials_enable_service", false) # 비밀번호 저장 기능 비활성화
|
49
50
|
options.add_preference("profile.default_content_setting_values.notifications", 2) # 알림 차단
|
50
51
|
options.add_argument("--disable-save-password-bubble") # 비밀번호 저장 팝업 차단
|
51
|
-
|
52
|
-
#
|
53
|
-
options.add_argument(
|
52
|
+
options.add_argument('--disable-software-rasterizer') # 소프트웨어 렌더링 비활성화
|
53
|
+
options.add_argument('--remote-debugging-port=9222') # 디버깅 포트 설정
|
54
|
+
options.add_argument("--disable-logging")
|
55
|
+
options.add_argument("--silent") # 로그를 최소화 (최소한의 경고만)
|
56
|
+
options.add_argument("--log-level=3") # LogLevel: 3 = ERROR
|
57
|
+
options.add_argument('--disable-blink-features=AutomationControlled') # JavaScript로 navigator.webdriver 숨기기
|
54
58
|
|
55
|
-
#
|
56
|
-
|
59
|
+
# 'capabilities'과 'options' 배열로 설정
|
60
|
+
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome
|
61
|
+
capabilities["goog:chromeOptions"] = options.as_json
|
62
|
+
|
63
|
+
# Selenium 4에서는 'capabilities'만 사용하는 방식
|
64
|
+
@driver = Selenium::WebDriver.for(:chrome, capabilities: [capabilities, options])
|
65
|
+
|
57
66
|
@driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: function(){ return false; }});") # 셀레니움 감지 방지
|
58
|
-
|
59
|
-
rescue
|
60
|
-
|
67
|
+
|
68
|
+
rescue => e
|
69
|
+
@driver = Selenium::WebDriver.for(:chrome, capabilities: [capabilities, options])
|
61
70
|
end
|
62
71
|
else
|
63
72
|
begin
|
@@ -83,12 +92,21 @@ class Naver
|
|
83
92
|
options.add_preference("credentials_enable_service", false) # 비밀번호 저장 기능 비활성화
|
84
93
|
options.add_preference("profile.default_content_setting_values.notifications", 2) # 알림 차단
|
85
94
|
options.add_argument("--disable-save-password-bubble") # 비밀번호 저장 팝업 차단
|
86
|
-
|
95
|
+
options.add_argument('--disable-software-rasterizer') # 소프트웨어 렌더링 비활성화
|
96
|
+
options.add_argument('--remote-debugging-port=9222') # 디버깅 포트 설정
|
97
|
+
options.add_argument("--disable-logging")
|
98
|
+
options.add_argument("--silent") # 로그를 최소화 (최소한의 경고만)
|
99
|
+
options.add_argument("--log-level=3") # LogLevel: 3 = ERROR
|
87
100
|
# JavaScript로 navigator.webdriver 숨기기
|
88
101
|
options.add_argument('--disable-blink-features=AutomationControlled')
|
89
102
|
|
90
|
-
#
|
91
|
-
|
103
|
+
# 'capabilities'과 'options' 배열로 설정
|
104
|
+
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome
|
105
|
+
capabilities["goog:chromeOptions"] = options.as_json
|
106
|
+
|
107
|
+
# Selenium 4에서는 'capabilities'만 사용하는 방식
|
108
|
+
@driver = Selenium::WebDriver.for(:chrome, capabilities: [capabilities, options])
|
109
|
+
|
92
110
|
@driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: function(){ return false; }});") # 셀레니움 감지 방지
|
93
111
|
|
94
112
|
rescue => e
|
@@ -113,13 +131,22 @@ class Naver
|
|
113
131
|
options.add_preference("credentials_enable_service", false) # 비밀번호 저장 기능 비활성화
|
114
132
|
options.add_preference("profile.default_content_setting_values.notifications", 2) # 알림 차단
|
115
133
|
options.add_argument("--disable-save-password-bubble") # 비밀번호 저장 팝업 차단
|
116
|
-
|
117
|
-
#
|
118
|
-
|
134
|
+
options.add_argument('--disable-software-rasterizer') # 소프트웨어 렌더링 비활성화
|
135
|
+
options.add_argument('--remote-debugging-port=9222') # 디버깅 포트 설정
|
136
|
+
options.add_argument("--disable-logging")
|
137
|
+
options.add_argument("--silent") # 로그를 최소화 (최소한의 경고만)
|
138
|
+
options.add_argument("--log-level=3") # LogLevel: 3 = ERROR
|
139
|
+
|
140
|
+
# 'capabilities'과 'options' 배열로 설정
|
141
|
+
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome
|
142
|
+
capabilities["goog:chromeOptions"] = options.as_json
|
143
|
+
|
144
|
+
# Selenium 4에서는 'capabilities'만 사용하는 방식
|
145
|
+
@driver = Selenium::WebDriver.for(:chrome, capabilities: [capabilities, options])
|
146
|
+
|
119
147
|
@driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: function(){ return false; }});") # 셀레니움 감지 방지
|
120
|
-
|
121
148
|
rescue
|
122
|
-
@driver = Selenium::WebDriver.for(:chrome,
|
149
|
+
@driver = Selenium::WebDriver.for(:chrome, capabilities: [capabilities, options])
|
123
150
|
end
|
124
151
|
end
|
125
152
|
end
|
@@ -129,8 +156,8 @@ class Naver
|
|
129
156
|
def login(proxy)
|
130
157
|
chrome_start(proxy)
|
131
158
|
|
132
|
-
|
133
|
-
sleep(
|
159
|
+
@driver.get('about:blank')
|
160
|
+
sleep(2)
|
134
161
|
all_windows = @driver.window_handles
|
135
162
|
|
136
163
|
# 원하는 탭을 확인하고, 닫기
|
@@ -141,7 +168,7 @@ class Naver
|
|
141
168
|
if @driver.current_url.start_with?('chrome-extension://')
|
142
169
|
puts "확장 프로그램 탭 발견: #{@driver.current_url}"
|
143
170
|
@driver.close
|
144
|
-
|
171
|
+
sleep(1)
|
145
172
|
break
|
146
173
|
end
|
147
174
|
end
|
@@ -152,12 +179,10 @@ class Naver
|
|
152
179
|
sleep(1)
|
153
180
|
|
154
181
|
all_windows = @driver.window_handles # 다시 탭 목록 초기화
|
155
|
-
|
156
|
-
|
157
182
|
sleep(1)
|
158
183
|
|
159
184
|
@driver.get('chrome-extension://ifibfemgeogfhoebkmokieepdoobkbpo/options/options.html')
|
160
|
-
|
185
|
+
sleep(1)
|
161
186
|
end
|
162
187
|
|
163
188
|
|
@@ -199,8 +224,41 @@ begin
|
|
199
224
|
@driver.action.key_down(:control).send_keys('v').key_up(:control).perform
|
200
225
|
sleep(1)
|
201
226
|
@driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[3]/button').click
|
202
|
-
sleep(
|
203
|
-
|
227
|
+
sleep(1)
|
228
|
+
|
229
|
+
begin
|
230
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 10)
|
231
|
+
wait.until do
|
232
|
+
begin
|
233
|
+
alert = @driver.switch_to.alert
|
234
|
+
alert.accept
|
235
|
+
true
|
236
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
237
|
+
false
|
238
|
+
end
|
239
|
+
end
|
240
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
241
|
+
puts "alert이 없으므로 버튼 클릭"
|
242
|
+
@driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[3]/button').click
|
243
|
+
begin
|
244
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 10)
|
245
|
+
wait.until do
|
246
|
+
begin
|
247
|
+
alert = @driver.switch_to.alert
|
248
|
+
alert.accept
|
249
|
+
true
|
250
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
251
|
+
false
|
252
|
+
end
|
253
|
+
end
|
254
|
+
puts "두 번째 alert 처리 완료"
|
255
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
256
|
+
puts "두 번째 alert이 10초 내에 나타나지 않음. Chrome 종료."
|
257
|
+
system('taskkill /F /IM chrome.exe')
|
258
|
+
@driver.quit if @driver
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
204
262
|
|
205
263
|
rescue
|
206
264
|
begin
|
@@ -229,8 +287,40 @@ rescue
|
|
229
287
|
sleep(1)
|
230
288
|
begin
|
231
289
|
@driver.find_element(:class_name, 'default-btn').click
|
232
|
-
sleep(
|
233
|
-
|
290
|
+
sleep(1)
|
291
|
+
|
292
|
+
begin
|
293
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 10)
|
294
|
+
wait.until do
|
295
|
+
begin
|
296
|
+
alert = @driver.switch_to.alert
|
297
|
+
alert.accept
|
298
|
+
true
|
299
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
300
|
+
false
|
301
|
+
end
|
302
|
+
end
|
303
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
304
|
+
puts "alert이 없으므로 버튼 클릭"
|
305
|
+
@driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[3]/button').click
|
306
|
+
begin
|
307
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 10)
|
308
|
+
wait.until do
|
309
|
+
begin
|
310
|
+
alert = @driver.switch_to.alert
|
311
|
+
alert.accept
|
312
|
+
true
|
313
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
314
|
+
false
|
315
|
+
end
|
316
|
+
end
|
317
|
+
puts "두 번째 alert 처리 완료"
|
318
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
319
|
+
puts "두 번째 alert이 10초 내에 나타나지 않음. Chrome 종료."
|
320
|
+
system('taskkill /F /IM chrome.exe')
|
321
|
+
@driver.quit if @driver
|
322
|
+
end
|
323
|
+
end
|
234
324
|
|
235
325
|
rescue => e
|
236
326
|
@driver.window_handles.each do |handle|
|
@@ -239,7 +329,7 @@ rescue
|
|
239
329
|
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
240
330
|
@driver.close
|
241
331
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
242
|
-
puts "
|
332
|
+
puts "크롬 브라우저 종료: #{e.message}"
|
243
333
|
end
|
244
334
|
end
|
245
335
|
return 0
|
@@ -255,7 +345,7 @@ rescue
|
|
255
345
|
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
256
346
|
@driver.close
|
257
347
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
258
|
-
puts "
|
348
|
+
puts "크롬 브라우저 종료: #{e.message}"
|
259
349
|
end
|
260
350
|
end
|
261
351
|
return 0
|
@@ -280,55 +370,50 @@ sleep(2)
|
|
280
370
|
|
281
371
|
else
|
282
372
|
|
283
|
-
|
284
373
|
begin
|
374
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 20) # 최대 20초 대기
|
375
|
+
wait.until { @driver.execute_script("return document.readyState") == "complete" } # 페이지가 완전히 로드될 때까지 기다림
|
285
376
|
@driver.get(signup_url)
|
286
377
|
sleep(1)
|
287
378
|
puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
|
288
|
-
|
289
|
-
|
290
|
-
|
379
|
+
begin
|
380
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 3) # 3초 동안 대기
|
381
|
+
wait.until do
|
382
|
+
begin
|
383
|
+
@driver.switch_to.alert.accept
|
384
|
+
true
|
385
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
386
|
+
false
|
387
|
+
end
|
388
|
+
end
|
389
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
390
|
+
end
|
391
|
+
rescue Selenium::WebDriver::Error::UnknownError => e
|
291
392
|
puts "#{signup_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
|
292
|
-
|
393
|
+
# 열린 모든 창을 닫음
|
293
394
|
@driver.window_handles.each do |handle|
|
294
|
-
|
295
|
-
|
296
|
-
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
395
|
+
@driver.switch_to.window(handle)
|
396
|
+
begin
|
297
397
|
@driver.close
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
end
|
398
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
399
|
+
puts "사이트 내부에 예외 발생: #{e.message}"
|
400
|
+
end
|
302
401
|
end
|
402
|
+
|
403
|
+
# 드라이버 종료
|
404
|
+
@driver.quit if @driver
|
303
405
|
return 0
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
406
|
+
rescue Selenium::WebDriver::Error::TimeoutError => e
|
407
|
+
puts "웹 페이지 로드가 시간 초과되었습니다: #{e.message}"
|
408
|
+
@driver.quit if @driver
|
409
|
+
return 0
|
410
|
+
rescue => e
|
411
|
+
puts "사이트 내부에 사이트 내부에 알 수 없는 오류 발생: #{e.message}"
|
412
|
+
@driver.quit if @driver
|
413
|
+
return 0
|
414
|
+
end
|
308
415
|
|
309
416
|
|
310
|
-
begin
|
311
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
312
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
313
|
-
#요소가 나타날 때까지 20초 동안 기다립니다.
|
314
|
-
wait.until { @driver.find_element(:xpath, '/html') }
|
315
|
-
@driver.find_element(:xpath, '/html')
|
316
|
-
rescue
|
317
|
-
begin
|
318
|
-
@driver.get(signup_url)
|
319
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
320
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
321
|
-
#요소가 나타날 때까지 20초 동안 기다립니다.
|
322
|
-
wait.until { @driver.find_element(:xpath, '/html') }
|
323
|
-
@driver.find_element(:xpath, '/html')
|
324
|
-
rescue => e
|
325
|
-
puts '-[√] 회원가입 1차 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
|
326
|
-
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
327
|
-
puts e
|
328
|
-
@driver.close
|
329
|
-
return 0
|
330
|
-
end
|
331
|
-
end
|
332
417
|
|
333
418
|
|
334
419
|
|
@@ -356,9 +441,19 @@ sleep(2)
|
|
356
441
|
sleep(10)
|
357
442
|
begin
|
358
443
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
359
|
-
puts '-[√]
|
360
|
-
puts '-[√]
|
361
|
-
@driver.
|
444
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
445
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
446
|
+
@driver.window_handles.each do |handle|
|
447
|
+
@driver.switch_to.window(handle)
|
448
|
+
begin
|
449
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
450
|
+
@driver.close
|
451
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
452
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
453
|
+
end
|
454
|
+
end
|
455
|
+
return 0
|
456
|
+
@driver.quit
|
362
457
|
rescue
|
363
458
|
begin
|
364
459
|
# 타임아웃을 77초로 설정
|
@@ -392,9 +487,19 @@ sleep(2)
|
|
392
487
|
sleep(10)
|
393
488
|
begin
|
394
489
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
395
|
-
puts '-[√]
|
396
|
-
puts '-[√]
|
397
|
-
@driver.
|
490
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
491
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
492
|
+
@driver.window_handles.each do |handle|
|
493
|
+
@driver.switch_to.window(handle)
|
494
|
+
begin
|
495
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
496
|
+
@driver.close
|
497
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
498
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
499
|
+
end
|
500
|
+
end
|
501
|
+
return 0
|
502
|
+
@driver.quit
|
398
503
|
rescue
|
399
504
|
begin
|
400
505
|
# 타임아웃을 77초로 설정
|
@@ -426,9 +531,19 @@ sleep(2)
|
|
426
531
|
sleep(10)
|
427
532
|
begin
|
428
533
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
429
|
-
puts '-[√]
|
430
|
-
puts '-[√]
|
431
|
-
@driver.
|
534
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
535
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
536
|
+
@driver.window_handles.each do |handle|
|
537
|
+
@driver.switch_to.window(handle)
|
538
|
+
begin
|
539
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
540
|
+
@driver.close
|
541
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
542
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
543
|
+
end
|
544
|
+
end
|
545
|
+
return 0
|
546
|
+
@driver.quit
|
432
547
|
rescue
|
433
548
|
begin
|
434
549
|
# 타임아웃을 77초로 설정
|
@@ -2321,9 +2436,19 @@ end
|
|
2321
2436
|
sleep(10)
|
2322
2437
|
begin
|
2323
2438
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
2324
|
-
puts '-[√]
|
2325
|
-
puts '-[√]
|
2326
|
-
@driver.
|
2439
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
2440
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
2441
|
+
@driver.window_handles.each do |handle|
|
2442
|
+
@driver.switch_to.window(handle)
|
2443
|
+
begin
|
2444
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
2445
|
+
@driver.close
|
2446
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
2447
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
2448
|
+
end
|
2449
|
+
end
|
2450
|
+
return 0
|
2451
|
+
@driver.quit
|
2327
2452
|
rescue
|
2328
2453
|
# 타임아웃을 77초로 설정
|
2329
2454
|
wait = Selenium::WebDriver::Wait.new(:timeout => 150)
|
@@ -2428,9 +2553,16 @@ end
|
|
2428
2553
|
end
|
2429
2554
|
|
2430
2555
|
begin
|
2431
|
-
|
2432
|
-
|
2433
|
-
|
2556
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 3) # 3초 동안 대기
|
2557
|
+
wait.until do
|
2558
|
+
begin
|
2559
|
+
@driver.switch_to.alert.accept
|
2560
|
+
true
|
2561
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
2562
|
+
false
|
2563
|
+
end
|
2564
|
+
end
|
2565
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
2434
2566
|
end
|
2435
2567
|
|
2436
2568
|
|
@@ -2450,55 +2582,53 @@ login_url = option['login_url'].to_s
|
|
2450
2582
|
if login_url == '' or login_url == '로그인 페이지 url'
|
2451
2583
|
|
2452
2584
|
else
|
2585
|
+
|
2453
2586
|
begin
|
2587
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 20) # 최대 20초 대기
|
2588
|
+
wait.until { @driver.execute_script("return document.readyState") == "complete" } # 페이지가 완전히 로드될 때까지 기다림
|
2454
2589
|
@driver.get(login_url)
|
2455
2590
|
sleep(1)
|
2456
2591
|
puts '-[√] 로그인 페이지 URL 이동.......'.magenta
|
2457
|
-
|
2458
|
-
|
2592
|
+
begin
|
2593
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 3) # 3초 동안 대기
|
2594
|
+
wait.until do
|
2595
|
+
begin
|
2596
|
+
@driver.switch_to.alert.accept
|
2597
|
+
true
|
2598
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
2599
|
+
false
|
2600
|
+
end
|
2601
|
+
end
|
2602
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
2603
|
+
end
|
2459
2604
|
|
2605
|
+
rescue Selenium::WebDriver::Error::UnknownError => e
|
2606
|
+
puts "#{signup_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
|
2607
|
+
# 열린 모든 창을 닫음
|
2460
2608
|
@driver.window_handles.each do |handle|
|
2461
|
-
|
2462
|
-
|
2463
|
-
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
2609
|
+
@driver.switch_to.window(handle)
|
2610
|
+
begin
|
2464
2611
|
@driver.close
|
2465
|
-
|
2466
|
-
|
2467
|
-
|
2468
|
-
end
|
2612
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
2613
|
+
puts "사이트 내부에 예외 발생: #{e.message}"
|
2614
|
+
end
|
2469
2615
|
end
|
2616
|
+
|
2617
|
+
# 드라이버 종료
|
2618
|
+
@driver.quit if @driver
|
2470
2619
|
return 0
|
2471
|
-
|
2472
|
-
|
2620
|
+
rescue Selenium::WebDriver::Error::TimeoutError => e
|
2621
|
+
puts "웹 페이지 로드가 시간 초과되었습니다: #{e.message}"
|
2622
|
+
@driver.quit if @driver
|
2623
|
+
return 0
|
2624
|
+
rescue => e
|
2625
|
+
puts "사이트 내부에 알 수 없는 오류 발생: #{e.message}"
|
2626
|
+
@driver.quit if @driver
|
2627
|
+
return 0
|
2628
|
+
end
|
2473
2629
|
|
2474
2630
|
|
2475
|
-
|
2476
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
2477
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
2478
|
-
#요소가 나타날 때까지 20초 동안 기다립니다.
|
2479
|
-
wait.until { @driver.find_element(:xpath, '/html') }
|
2480
|
-
@driver.find_element(:xpath, '/html')
|
2481
|
-
rescue
|
2482
|
-
begin
|
2483
|
-
new_login__url = @driver.current_url #현제 페이지 URL 추출
|
2484
|
-
sleep(1)
|
2485
|
-
@driver.get(new_login__url)
|
2486
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
2487
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
2488
|
-
#요소가 나타날 때까지 20초 동안 기다립니다.
|
2489
|
-
wait.until { @driver.find_element(:xpath, '/html') }
|
2490
|
-
@driver.find_element(:xpath, '/html')
|
2491
|
-
rescue => e
|
2492
|
-
puts '-[√] 로그인 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
|
2493
|
-
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
2494
|
-
puts e
|
2495
|
-
@driver.close
|
2496
|
-
return 0
|
2497
|
-
end
|
2498
|
-
end
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2631
|
+
|
2502
2632
|
sleep(1)
|
2503
2633
|
##캡챠 해제 입력 코드 부분─────────────────────────────────────────────────────────────────────>
|
2504
2634
|
|
@@ -2523,9 +2653,19 @@ login_url = option['login_url'].to_s
|
|
2523
2653
|
sleep(10)
|
2524
2654
|
begin
|
2525
2655
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
2526
|
-
puts '-[√]
|
2527
|
-
puts '-[√]
|
2528
|
-
@driver.
|
2656
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
2657
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
2658
|
+
@driver.window_handles.each do |handle|
|
2659
|
+
@driver.switch_to.window(handle)
|
2660
|
+
begin
|
2661
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
2662
|
+
@driver.close
|
2663
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
2664
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
2665
|
+
end
|
2666
|
+
end
|
2667
|
+
return 0
|
2668
|
+
@driver.quit
|
2529
2669
|
rescue
|
2530
2670
|
begin
|
2531
2671
|
# 타임아웃을 77초로 설정
|
@@ -2559,9 +2699,19 @@ login_url = option['login_url'].to_s
|
|
2559
2699
|
sleep(10)
|
2560
2700
|
begin
|
2561
2701
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
2562
|
-
puts '-[√]
|
2563
|
-
puts '-[√]
|
2564
|
-
@driver.
|
2702
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
2703
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
2704
|
+
@driver.window_handles.each do |handle|
|
2705
|
+
@driver.switch_to.window(handle)
|
2706
|
+
begin
|
2707
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
2708
|
+
@driver.close
|
2709
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
2710
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
2711
|
+
end
|
2712
|
+
end
|
2713
|
+
return 0
|
2714
|
+
@driver.quit
|
2565
2715
|
rescue
|
2566
2716
|
begin
|
2567
2717
|
# 타임아웃을 77초로 설정
|
@@ -2593,9 +2743,19 @@ login_url = option['login_url'].to_s
|
|
2593
2743
|
sleep(10)
|
2594
2744
|
begin
|
2595
2745
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
2596
|
-
puts '-[√]
|
2597
|
-
puts '-[√]
|
2598
|
-
@driver.
|
2746
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
2747
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
2748
|
+
@driver.window_handles.each do |handle|
|
2749
|
+
@driver.switch_to.window(handle)
|
2750
|
+
begin
|
2751
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
2752
|
+
@driver.close
|
2753
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
2754
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
2755
|
+
end
|
2756
|
+
end
|
2757
|
+
return 0
|
2758
|
+
@driver.quit
|
2599
2759
|
rescue
|
2600
2760
|
begin
|
2601
2761
|
# 타임아웃을 77초로 설정
|
@@ -3379,7 +3539,7 @@ login_url = option['login_url'].to_s
|
|
3379
3539
|
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
3380
3540
|
@driver.close
|
3381
3541
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
3382
|
-
puts "
|
3542
|
+
puts "크롬 브라우저 종료: #{e.message}"
|
3383
3543
|
end
|
3384
3544
|
end
|
3385
3545
|
return 0
|
@@ -3600,10 +3760,17 @@ login_url = option['login_url'].to_s
|
|
3600
3760
|
end
|
3601
3761
|
##로그인 버튼 코드 부분─────────────────────────────────────────────────────────────────────<
|
3602
3762
|
begin
|
3603
|
-
|
3604
|
-
|
3605
|
-
|
3606
|
-
|
3763
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 3) # 3초 동안 대기
|
3764
|
+
wait.until do
|
3765
|
+
begin
|
3766
|
+
@driver.switch_to.alert.accept
|
3767
|
+
true
|
3768
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
3769
|
+
false
|
3770
|
+
end
|
3771
|
+
end
|
3772
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
3773
|
+
end
|
3607
3774
|
|
3608
3775
|
end
|
3609
3776
|
|
@@ -3629,58 +3796,50 @@ begin
|
|
3629
3796
|
|
3630
3797
|
else
|
3631
3798
|
|
3632
|
-
|
3633
|
-
|
3634
|
-
|
3635
|
-
|
3636
|
-
|
3637
|
-
|
3638
|
-
|
3639
|
-
|
3799
|
+
begin
|
3800
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 20) # 최대 20초 대기
|
3801
|
+
wait.until { @driver.execute_script("return document.readyState") == "complete" } # 페이지가 완전히 로드될 때까지 기다림
|
3802
|
+
@driver.get(cc_check_url)
|
3803
|
+
sleep(1)
|
3804
|
+
puts '-[√] 출석체크 페이지 URL 이동.......'.magenta
|
3805
|
+
begin
|
3806
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 3) # 3초 동안 대기
|
3807
|
+
wait.until do
|
3808
|
+
begin
|
3809
|
+
@driver.switch_to.alert.accept
|
3810
|
+
true
|
3811
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
3812
|
+
false
|
3813
|
+
end
|
3814
|
+
end
|
3815
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
3816
|
+
end
|
3817
|
+
rescue Selenium::WebDriver::Error::UnknownError => e
|
3818
|
+
puts "#{signup_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
|
3819
|
+
# 열린 모든 창을 닫음
|
3640
3820
|
@driver.window_handles.each do |handle|
|
3641
|
-
|
3642
|
-
|
3643
|
-
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
3821
|
+
@driver.switch_to.window(handle)
|
3822
|
+
begin
|
3644
3823
|
@driver.close
|
3645
|
-
|
3646
|
-
|
3647
|
-
|
3648
|
-
end
|
3824
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
3825
|
+
puts "사이트 내부에 예외 발생: #{e.message}"
|
3826
|
+
end
|
3649
3827
|
end
|
3828
|
+
|
3829
|
+
# 드라이버 종료
|
3830
|
+
@driver.quit if @driver
|
3650
3831
|
return 0
|
3651
|
-
|
3652
|
-
|
3832
|
+
rescue Selenium::WebDriver::Error::TimeoutError => e
|
3833
|
+
puts "웹 페이지 로드가 시간 초과되었습니다: #{e.message}"
|
3834
|
+
@driver.quit if @driver
|
3835
|
+
return 0
|
3836
|
+
rescue => e
|
3837
|
+
puts "사이트 내부에 알 수 없는 오류 발생: #{e.message}"
|
3838
|
+
@driver.quit if @driver
|
3839
|
+
return 0
|
3840
|
+
end
|
3653
3841
|
|
3654
|
-
|
3655
|
-
sleep(1)
|
3656
|
-
@driver.switch_to.alert.accept
|
3657
|
-
rescue
|
3658
|
-
end
|
3659
|
-
|
3660
|
-
begin
|
3661
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
3662
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
3663
|
-
#요소가 나타날 때까지 20초 동안 기다립니다.
|
3664
|
-
wait.until { @driver.find_element(:xpath, '/html') }
|
3665
|
-
@driver.find_element(:xpath, '/html')
|
3666
|
-
rescue
|
3667
|
-
begin
|
3668
|
-
new_check_url = @driver.current_url #현제 페이지 URL 추출
|
3669
|
-
sleep(1)
|
3670
|
-
@driver.get(new_check_url)
|
3671
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
3672
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
3673
|
-
#요소가 나타날 때까지 20초 동안 기다립니다.
|
3674
|
-
wait.until { @driver.find_element(:xpath, '/html') }
|
3675
|
-
@driver.find_element(:xpath, '/html')
|
3676
|
-
rescue => e
|
3677
|
-
puts '-[√] 출석체크 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
|
3678
|
-
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
3679
|
-
puts e
|
3680
|
-
@driver.close
|
3681
|
-
return 0
|
3682
|
-
end
|
3683
|
-
end
|
3842
|
+
|
3684
3843
|
|
3685
3844
|
|
3686
3845
|
sleep(1)
|
@@ -3702,9 +3861,19 @@ begin
|
|
3702
3861
|
sleep(10)
|
3703
3862
|
begin
|
3704
3863
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
3705
|
-
puts '-[√]
|
3706
|
-
puts '-[√]
|
3707
|
-
@driver.
|
3864
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
3865
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
3866
|
+
@driver.window_handles.each do |handle|
|
3867
|
+
@driver.switch_to.window(handle)
|
3868
|
+
begin
|
3869
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
3870
|
+
@driver.close
|
3871
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
3872
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
3873
|
+
end
|
3874
|
+
end
|
3875
|
+
return 0
|
3876
|
+
@driver.quit
|
3708
3877
|
rescue
|
3709
3878
|
# 타임아웃을 77초로 설정
|
3710
3879
|
wait = Selenium::WebDriver::Wait.new(:timeout => 150)
|
@@ -3850,10 +4019,17 @@ begin
|
|
3850
4019
|
|
3851
4020
|
##<─────────────────────────────────────────────────────────────────────출석 체크 입력 코드 부분
|
3852
4021
|
begin
|
3853
|
-
|
3854
|
-
|
3855
|
-
|
3856
|
-
|
4022
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 3) # 3초 동안 대기
|
4023
|
+
wait.until do
|
4024
|
+
begin
|
4025
|
+
@driver.switch_to.alert.accept
|
4026
|
+
true
|
4027
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
4028
|
+
false
|
4029
|
+
end
|
4030
|
+
end
|
4031
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
4032
|
+
end
|
3857
4033
|
|
3858
4034
|
|
3859
4035
|
end
|
@@ -3880,64 +4056,53 @@ post_url = option['post_url'].to_s
|
|
3880
4056
|
else
|
3881
4057
|
puts '-[√] 글쓰기 페이지 URL 이동.......'.magenta
|
3882
4058
|
|
3883
|
-
|
4059
|
+
|
3884
4060
|
begin
|
4061
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 20) # 최대 20초 대기
|
4062
|
+
wait.until { @driver.execute_script("return document.readyState") == "complete" } # 페이지가 완전히 로드될 때까지 기다림
|
3885
4063
|
@driver.get(post_url)
|
3886
4064
|
sleep(1)
|
3887
4065
|
puts '-[√] 글쓰기 페이지 URL 이동.......'.magenta
|
3888
|
-
|
3889
|
-
|
3890
|
-
|
4066
|
+
begin
|
4067
|
+
wait = Selenium::WebDriver::Wait.new(timeout: 3) # 3초 동안 대기
|
4068
|
+
wait.until do
|
4069
|
+
begin
|
4070
|
+
@driver.switch_to.alert.accept
|
4071
|
+
true
|
4072
|
+
rescue Selenium::WebDriver::Error::NoSuchAlertError
|
4073
|
+
false
|
4074
|
+
end
|
4075
|
+
end
|
4076
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
4077
|
+
end
|
4078
|
+
rescue Selenium::WebDriver::Error::UnknownError => e
|
4079
|
+
puts "#{signup_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
|
4080
|
+
# 열린 모든 창을 닫음
|
3891
4081
|
@driver.window_handles.each do |handle|
|
3892
|
-
|
3893
|
-
|
3894
|
-
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
4082
|
+
@driver.switch_to.window(handle)
|
4083
|
+
begin
|
3895
4084
|
@driver.close
|
3896
|
-
|
3897
|
-
|
3898
|
-
|
3899
|
-
end
|
4085
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
4086
|
+
puts "사이트 내부에 예외 발생: #{e.message}"
|
4087
|
+
end
|
3900
4088
|
end
|
4089
|
+
|
4090
|
+
# 드라이버 종료
|
4091
|
+
@driver.quit if @driver
|
3901
4092
|
return 0
|
3902
|
-
|
3903
|
-
|
3904
|
-
|
3905
|
-
|
3906
|
-
|
3907
|
-
|
3908
|
-
|
4093
|
+
rescue Selenium::WebDriver::Error::TimeoutError => e
|
4094
|
+
puts "웹 페이지 로드가 시간 초과되었습니다: #{e.message}"
|
4095
|
+
@driver.quit if @driver
|
4096
|
+
return 0
|
4097
|
+
rescue => e
|
4098
|
+
puts "사이트 내부에 알 수 없는 오류 발생: #{e.message}"
|
4099
|
+
@driver.quit if @driver
|
4100
|
+
return 0
|
3909
4101
|
end
|
3910
4102
|
|
3911
4103
|
|
3912
4104
|
|
3913
4105
|
|
3914
|
-
|
3915
|
-
begin
|
3916
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
3917
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
3918
|
-
#요소가 나타날 때까지 20초 동안 기다립니다.
|
3919
|
-
wait.until { @driver.find_element(:xpath, '/html') }
|
3920
|
-
@driver.find_element(:xpath, '/html')
|
3921
|
-
rescue
|
3922
|
-
begin
|
3923
|
-
new_post_url = @driver.current_url #현제 페이지 URL 추출
|
3924
|
-
sleep(1)
|
3925
|
-
@driver.get(new_post_url)
|
3926
|
-
# 요소 찾기 타임아웃을 10초로 설정
|
3927
|
-
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
|
3928
|
-
#요소가 나타날 때까지 20초 동안 기다립니다.
|
3929
|
-
wait.until { @driver.find_element(:xpath, '/html') }
|
3930
|
-
@driver.find_element(:xpath, '/html')
|
3931
|
-
sleep(1)
|
3932
|
-
rescue => e
|
3933
|
-
puts '-[√] 글쓰기 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
|
3934
|
-
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
3935
|
-
puts e
|
3936
|
-
@driver.close
|
3937
|
-
return 0
|
3938
|
-
end
|
3939
|
-
end
|
3940
|
-
|
3941
4106
|
sleep(1)
|
3942
4107
|
begin
|
3943
4108
|
puts '-[√] 글쓰기 버튼 클릭이 필수인지 탐색합니다.......'.green
|
@@ -3994,9 +4159,19 @@ post_url = option['post_url'].to_s
|
|
3994
4159
|
sleep(10)
|
3995
4160
|
begin
|
3996
4161
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
3997
|
-
puts '-[√]
|
3998
|
-
puts '-[√]
|
3999
|
-
@driver.
|
4162
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
4163
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
4164
|
+
@driver.window_handles.each do |handle|
|
4165
|
+
@driver.switch_to.window(handle)
|
4166
|
+
begin
|
4167
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
4168
|
+
@driver.close
|
4169
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
4170
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
4171
|
+
end
|
4172
|
+
end
|
4173
|
+
return 0
|
4174
|
+
@driver.quit
|
4000
4175
|
rescue
|
4001
4176
|
begin
|
4002
4177
|
# 타임아웃을 77초로 설정
|
@@ -4030,9 +4205,19 @@ post_url = option['post_url'].to_s
|
|
4030
4205
|
sleep(10)
|
4031
4206
|
begin
|
4032
4207
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
4033
|
-
puts '-[√]
|
4034
|
-
puts '-[√]
|
4035
|
-
@driver.
|
4208
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
4209
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
4210
|
+
@driver.window_handles.each do |handle|
|
4211
|
+
@driver.switch_to.window(handle)
|
4212
|
+
begin
|
4213
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
4214
|
+
@driver.close
|
4215
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
4216
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
4217
|
+
end
|
4218
|
+
end
|
4219
|
+
return 0
|
4220
|
+
@driver.quit
|
4036
4221
|
rescue
|
4037
4222
|
begin
|
4038
4223
|
# 타임아웃을 77초로 설정
|
@@ -4064,9 +4249,19 @@ post_url = option['post_url'].to_s
|
|
4064
4249
|
sleep(10)
|
4065
4250
|
begin
|
4066
4251
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
4067
|
-
puts '-[√]
|
4068
|
-
puts '-[√]
|
4069
|
-
@driver.
|
4252
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
4253
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
4254
|
+
@driver.window_handles.each do |handle|
|
4255
|
+
@driver.switch_to.window(handle)
|
4256
|
+
begin
|
4257
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
4258
|
+
@driver.close
|
4259
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
4260
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
4261
|
+
end
|
4262
|
+
end
|
4263
|
+
return 0
|
4264
|
+
@driver.quit
|
4070
4265
|
rescue
|
4071
4266
|
begin
|
4072
4267
|
# 타임아웃을 77초로 설정
|
@@ -5625,7 +5820,7 @@ begin
|
|
5625
5820
|
@driver.close
|
5626
5821
|
|
5627
5822
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
5628
|
-
puts "
|
5823
|
+
puts "크롬 브라우저 종료: #{e.message}"
|
5629
5824
|
end
|
5630
5825
|
end
|
5631
5826
|
return 0
|
@@ -8100,9 +8295,19 @@ end
|
|
8100
8295
|
sleep(10)
|
8101
8296
|
begin
|
8102
8297
|
@driver.find_element(:xpath, '//*[@data-state="error"]').click
|
8103
|
-
puts '-[√]
|
8104
|
-
puts '-[√]
|
8105
|
-
@driver.
|
8298
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
8299
|
+
puts '-[√] 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
|
8300
|
+
@driver.window_handles.each do |handle|
|
8301
|
+
@driver.switch_to.window(handle)
|
8302
|
+
begin
|
8303
|
+
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
8304
|
+
@driver.close
|
8305
|
+
rescue Selenium::WebDriver::Error::WebDriverError => e
|
8306
|
+
puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
|
8307
|
+
end
|
8308
|
+
end
|
8309
|
+
return 0
|
8310
|
+
@driver.quit
|
8106
8311
|
rescue
|
8107
8312
|
# 타임아웃을 77초로 설정
|
8108
8313
|
wait = Selenium::WebDriver::Wait.new(:timeout => 150)
|
@@ -8616,7 +8821,7 @@ rescue
|
|
8616
8821
|
# 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
|
8617
8822
|
@driver.close
|
8618
8823
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
8619
|
-
puts "
|
8824
|
+
puts "크롬 브라우저 종료: #{e.message}"
|
8620
8825
|
end
|
8621
8826
|
end
|
8622
8827
|
return 0
|
@@ -8738,7 +8943,7 @@ rescue => e
|
|
8738
8943
|
@driver.close
|
8739
8944
|
|
8740
8945
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
8741
|
-
puts "
|
8946
|
+
puts "크롬 브라우저 종료: #{e.message}"
|
8742
8947
|
end
|
8743
8948
|
end
|
8744
8949
|
return 0
|
@@ -8754,7 +8959,7 @@ begin
|
|
8754
8959
|
@driver.close
|
8755
8960
|
|
8756
8961
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
8757
|
-
puts "
|
8962
|
+
puts "크롬 브라우저 종료: #{e.message}"
|
8758
8963
|
end
|
8759
8964
|
end
|
8760
8965
|
@driver.quit
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: posting_duo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.53
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-02-
|
11
|
+
date: 2025-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: File to Clipboard gem
|
14
14
|
email: mymin26@naver.com
|