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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/posting_duo.rb +454 -249
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4af89a0cefdfea4b5feae42d2b06504550cef6a3306a15f2d37db63c407f21a
4
- data.tar.gz: 31932984180766f3ad4182b04ab5dbe15a72e893fc8d4eeb91545f16de5fb354
3
+ metadata.gz: fc359a857b425b1365169ae81e5acded00d804db9806b4bd66bc1ff9c7aabbcf
4
+ data.tar.gz: a8005949efb1edb0b4b704138617bde7df718558e7c242f8ccc8c4a12d0c2074
5
5
  SHA512:
6
- metadata.gz: 8f66b423f6267ef1ab810c19c505d4b67baddbb01789c298b99ccb783f9b8bfabac13cd98fc27a85f7d4bab907ade06e88c0892b8ee3564798fd9b5e3e49e064
7
- data.tar.gz: 64169f24459dd695de9cdb690aa7f42bd4497ab4959e257da8598ea7a89bccca3ea844f1fc73b267027ace882cf63868a3b7d349b0e02bdf34dd9b217dfd88e4
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
- # JavaScript로 navigator.webdriver 숨기기
53
- options.add_argument('--disable-blink-features=AutomationControlled')
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
- # Selenium의 webdriver 인식을 숨기는 JavaScript 코드 삽입
56
- @driver = Selenium::WebDriver.for(:chrome, options: options)
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
- @driver = Selenium::WebDriver.for(:chrome, options: options)
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
- # Selenium의 webdriver 인식을 숨기는 JavaScript 코드 삽입
91
- @driver = Selenium::WebDriver.for(:chrome, options: options)
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
- # JavaScript로 navigator.webdriver 숨기기
118
- @driver = Selenium::WebDriver.for(:chrome, options: options)
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, options: options)
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
- @driver.get('about:blank')
133
- sleep(1)
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
- puts "확장 프로그램 탭 발견 닫았스~"
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(2)
203
- @driver.switch_to.alert.accept
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(2)
233
- @driver.switch_to.alert.accept
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 "Failed to close tab: #{e.message}"
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 "Failed to close tab: #{e.message}"
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
- rescue => e
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
- @driver.switch_to.window(handle)
295
- begin
296
- # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
395
+ @driver.switch_to.window(handle)
396
+ begin
297
397
  @driver.close
298
-
299
- rescue Selenium::WebDriver::Error::WebDriverError => e
300
- puts "Failed to close tab: #{e.message}"
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
- @driver.quit
305
- end
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
360
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
361
- @driver.quit
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
396
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
397
- @driver.quit
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
430
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
431
- @driver.quit
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
2325
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
2326
- @driver.quit
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
- sleep(1)
2432
- @driver.switch_to.alert.accept
2433
- rescue
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
- rescue => e
2458
- puts "#{login_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
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
- @driver.switch_to.window(handle)
2462
- begin
2463
- # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
2609
+ @driver.switch_to.window(handle)
2610
+ begin
2464
2611
  @driver.close
2465
-
2466
- rescue Selenium::WebDriver::Error::WebDriverError => e
2467
- puts "Failed to close tab: #{e.message}"
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
- @driver.quit
2472
- end
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
- begin
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
2527
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
2528
- @driver.quit
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
2563
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
2564
- @driver.quit
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
2597
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
2598
- @driver.quit
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 "Failed to close tab: #{e.message}"
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
- sleep(1)
3604
- @driver.switch_to.alert.accept
3605
- rescue
3606
- end
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
- begin
3634
- @driver.get(cc_check_url)
3635
- sleep(1)
3636
- puts '-[√] 출석체크 페이지 URL 이동.......'.magenta
3637
- rescue => e
3638
- puts "#{cc_check_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
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
- @driver.switch_to.window(handle)
3642
- begin
3643
- # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
3821
+ @driver.switch_to.window(handle)
3822
+ begin
3644
3823
  @driver.close
3645
-
3646
- rescue Selenium::WebDriver::Error::WebDriverError => e
3647
- puts "Failed to close tab: #{e.message}"
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
- @driver.quit
3652
- end
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
- begin
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
3706
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
3707
- @driver.quit
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
- sleep(1)
3854
- @driver.switch_to.alert.accept
3855
- rescue
3856
- end
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
- rescue => e
3889
- puts "#{post_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
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
- @driver.switch_to.window(handle)
3893
- begin
3894
- # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
4082
+ @driver.switch_to.window(handle)
4083
+ begin
3895
4084
  @driver.close
3896
-
3897
- rescue Selenium::WebDriver::Error::WebDriverError => e
3898
- puts "Failed to close tab: #{e.message}"
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
- @driver.quit
3903
- end
3904
-
3905
- begin
3906
- sleep(2)
3907
- @driver.switch_to.alert.accept
3908
- rescue
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
3998
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
3999
- @driver.quit
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
4034
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
4035
- @driver.quit
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
4068
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
4069
- @driver.quit
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 "Failed to close tab: #{e.message}"
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 '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
8104
- puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
8105
- @driver.quit
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 "Failed to close tab: #{e.message}"
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 "Failed to close tab: #{e.message}"
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 "Failed to close tab: #{e.message}"
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.51
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-07 00:00:00.000000000 Z
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