posting_zon 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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/posting_zon.rb +271 -206
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8c154b4aa2f0a37fca64bf6930931583efbd3e33ecd018a99e14cb035a242b0
4
- data.tar.gz: bc408d687b31918daaeaabcdc712a175cf0a64121c7ff6872e42b4081e6c89bc
3
+ metadata.gz: fc55647bc90f49690abd0af0efd979637e70b7530ef8f538a02a420d3ed85f79
4
+ data.tar.gz: 3b888e57fd01a3cdc9a5901652a6ee952166b56df94479583803f034896b778a
5
5
  SHA512:
6
- metadata.gz: 82c15d27f451417f3febfda71934621b0dc0e019588ce8ae0284779d4b6e82e35b3e92b43c7ad37262e975158a4483164a663c70a62c1f09d0bcbfdecfa42726
7
- data.tar.gz: a1eae45db5239b4d27417287efe840d93641ac92620e7641fa02af20e0186ff3fda2f752fe39c63aa4fbdfa63f5d075f2fb498333b7c51af219115cf9c736511
6
+ metadata.gz: 203e26bc1059943858642d00b763b38b3a9e913d1a116561a5f7e21741d684ec31836f3660c498f7deddd5bb6a053dc131cd782868368de13db4cbf30fd6af1e
7
+ data.tar.gz: b223d5de7f843424a69ff718925bcce08f598f44c47b55335a475c73e843d62015bbb1ba137355a4a35f46e630794cf8376404f5f3330013938920e740e17f0e
data/lib/posting_zon.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
@@ -197,8 +224,41 @@ begin
197
224
  @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
198
225
  sleep(1)
199
226
  @driver.find_element(:xpath, '/html/body/div/div[1]/table/tbody/tr[1]/td[3]/button').click
200
- sleep(2)
201
- @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
+
202
262
 
203
263
  rescue
204
264
  begin
@@ -227,8 +287,40 @@ rescue
227
287
  sleep(1)
228
288
  begin
229
289
  @driver.find_element(:class_name, 'default-btn').click
230
- sleep(2)
231
- @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
232
324
 
233
325
  rescue => e
234
326
  @driver.window_handles.each do |handle|
@@ -237,7 +329,7 @@ rescue
237
329
  # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
238
330
  @driver.close
239
331
  rescue Selenium::WebDriver::Error::WebDriverError => e
240
- puts "Failed to close tab: #{e.message}"
332
+ puts "크롬 브라우저 종료: #{e.message}"
241
333
  end
242
334
  end
243
335
  return 0
@@ -253,7 +345,7 @@ rescue
253
345
  # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
254
346
  @driver.close
255
347
  rescue Selenium::WebDriver::Error::WebDriverError => e
256
- puts "Failed to close tab: #{e.message}"
348
+ puts "크롬 브라우저 종료: #{e.message}"
257
349
  end
258
350
  end
259
351
  return 0
@@ -278,53 +370,48 @@ sleep(2)
278
370
 
279
371
  else
280
372
 
281
-
282
-
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
- sleep(2)
377
+ sleep(1)
287
378
  puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
288
- rescue Selenium::WebDriver::Error::UnknownError => e
379
+
380
+ # Alert 처리 부분
381
+ begin
382
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3) # 3초 대기
383
+ alert = wait.until { driver.switch_to.alert } # alert가 나타날 때까지 기다림
384
+ alert.accept # 알림을 확인
385
+ rescue
386
+ # 알림이 나타나지 않으면 예외 처리하고 넘어감
387
+ end
388
+
389
+
390
+ rescue Selenium::WebDriver::Error::UnknownError => e
289
391
  puts "#{signup_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
290
392
  # 열린 모든 창을 닫음
291
393
  @driver.window_handles.each do |handle|
292
- @driver.switch_to.window(handle)
293
- begin
294
- @driver.close
295
- rescue Selenium::WebDriver::Error::WebDriverError => e
296
- puts "Failed to close tab: #{e.message}"
297
- end
394
+ @driver.switch_to.window(handle)
395
+ begin
396
+ @driver.close
397
+ rescue Selenium::WebDriver::Error::WebDriverError => e
398
+ puts "사이트 내부에 예외 발생: #{e.message}"
399
+ end
298
400
  end
299
-
401
+
300
402
  # 드라이버 종료
301
403
  @driver.quit if @driver
302
404
  return 0
303
- end
304
-
405
+
406
+ rescue Selenium::WebDriver::Error::TimeoutError => e
407
+ puts "웹 페이지 로드가 시간 초과되었습니다: #{e.message}"
408
+ @driver.quit if @driver
409
+ return 0
410
+
411
+ rescue
412
+ end
413
+
305
414
 
306
- begin
307
- # 요소 찾기 타임아웃을 10초로 설정
308
- wait = Selenium::WebDriver::Wait.new(:timeout => 20)
309
- #요소가 나타날 때까지 20초 동안 기다립니다.
310
- wait.until { @driver.find_element(:xpath, '/html') }
311
- @driver.find_element(:xpath, '/html')
312
- rescue
313
- begin
314
- @driver.get(signup_url)
315
- # 요소 찾기 타임아웃을 10초로 설정
316
- wait = Selenium::WebDriver::Wait.new(:timeout => 20)
317
- #요소가 나타날 때까지 20초 동안 기다립니다.
318
- wait.until { @driver.find_element(:xpath, '/html') }
319
- @driver.find_element(:xpath, '/html')
320
- rescue => e
321
- puts '-[√] 회원가입 1차 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
322
- puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
323
- puts e
324
- @driver.close
325
- return 0
326
- end
327
- end
328
415
 
329
416
 
330
417
 
@@ -2463,10 +2550,14 @@ end
2463
2550
  return 0
2464
2551
  end
2465
2552
 
2553
+
2554
+ # Alert 처리 부분
2466
2555
  begin
2467
- sleep(1)
2468
- @driver.switch_to.alert.accept
2469
- rescue
2556
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3) # 3초 대기
2557
+ alert = wait.until { driver.switch_to.alert } # alert가 나타날 때까지 기다림
2558
+ alert.accept # 알림을 확인
2559
+ rescue
2560
+ # 알림이 나타나지 않으면 예외 처리하고 넘어감
2470
2561
  end
2471
2562
 
2472
2563
 
@@ -2486,55 +2577,48 @@ login_url = option['login_url'].to_s
2486
2577
  if login_url == '' or login_url == '로그인 페이지 url'
2487
2578
 
2488
2579
  else
2580
+
2489
2581
  begin
2582
+ wait = Selenium::WebDriver::Wait.new(:timeout => 20) # 최대 20초 대기
2583
+ wait.until { @driver.execute_script("return document.readyState") == "complete" }
2490
2584
  @driver.get(login_url)
2491
- sleep(2)
2492
- puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
2493
- rescue Selenium::WebDriver::Error::UnknownError => e
2494
- puts "#{login_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
2495
- # 열린 모든 창을 닫음
2496
- @driver.window_handles.each do |handle|
2585
+ sleep(1)
2586
+ puts '-[√] 로그인 페이지 URL 이동.......'.magenta
2587
+ # Alert 처리 부분
2588
+ begin
2589
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3) # 3초 대기
2590
+ alert = wait.until { driver.switch_to.alert } # alert가 나타날 때까지 기다림
2591
+ alert.accept # 알림을 확인
2592
+ rescue
2593
+ # 알림이 나타나지 않으면 예외 처리하고 넘어감
2594
+ end
2595
+
2596
+ rescue Selenium::WebDriver::Error::UnknownError => e
2597
+ puts "#{login_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
2598
+ # 열린 모든 창을 닫음
2599
+ @driver.window_handles.each do |handle|
2497
2600
  @driver.switch_to.window(handle)
2498
2601
  begin
2499
- @driver.close
2602
+ @driver.close
2500
2603
  rescue Selenium::WebDriver::Error::WebDriverError => e
2501
- puts "Failed to close tab: #{e.message}"
2604
+ puts "사이트 내부에 예외 발생: #{e.message}"
2502
2605
  end
2503
- end
2606
+ end
2504
2607
 
2505
- # 드라이버 종료
2506
- @driver.quit if @driver
2507
- return 0
2508
- end
2608
+ # 드라이버 종료
2609
+ @driver.quit if @driver
2610
+ return 0
2611
+
2612
+ rescue Selenium::WebDriver::Error::TimeoutError => e
2613
+ puts "웹 페이지 로드가 시간 초과되었습니다: #{e.message}"
2614
+ @driver.quit if @driver
2615
+ return 0
2616
+
2617
+ rescue
2618
+ end
2509
2619
 
2510
2620
 
2511
- begin
2512
- # 요소 찾기 타임아웃을 10초로 설정
2513
- wait = Selenium::WebDriver::Wait.new(:timeout => 20)
2514
- #요소가 나타날 때까지 20초 동안 기다립니다.
2515
- wait.until { @driver.find_element(:xpath, '/html') }
2516
- @driver.find_element(:xpath, '/html')
2517
- rescue
2518
- begin
2519
- new_login__url = @driver.current_url #현제 페이지 URL 추출
2520
- sleep(1)
2521
- @driver.get(new_login__url)
2522
- # 요소 찾기 타임아웃을 10초로 설정
2523
- wait = Selenium::WebDriver::Wait.new(:timeout => 20)
2524
- #요소가 나타날 때까지 20초 동안 기다립니다.
2525
- wait.until { @driver.find_element(:xpath, '/html') }
2526
- @driver.find_element(:xpath, '/html')
2527
- rescue => e
2528
- puts '-[√] 로그인 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
2529
- puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
2530
- puts e
2531
- @driver.close
2532
- return 0
2533
- end
2534
- end
2535
-
2536
-
2537
-
2621
+
2538
2622
  sleep(1)
2539
2623
  ##캡챠 해제 입력 코드 부분─────────────────────────────────────────────────────────────────────>
2540
2624
 
@@ -3445,7 +3529,7 @@ login_url = option['login_url'].to_s
3445
3529
  # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
3446
3530
  @driver.close
3447
3531
  rescue Selenium::WebDriver::Error::WebDriverError => e
3448
- puts "Failed to close tab: #{e.message}"
3532
+ puts "크롬 브라우저 종료: #{e.message}"
3449
3533
  end
3450
3534
  end
3451
3535
  return 0
@@ -3665,11 +3749,15 @@ login_url = option['login_url'].to_s
3665
3749
  end
3666
3750
  end
3667
3751
  ##로그인 버튼 코드 부분─────────────────────────────────────────────────────────────────────<
3752
+
3753
+ # Alert 처리 부분
3668
3754
  begin
3669
- sleep(1)
3670
- @driver.switch_to.alert.accept
3671
- rescue
3672
- end
3755
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3) # 3초 대기
3756
+ alert = wait.until { driver.switch_to.alert } # alert가 나타날 때까지 기다림
3757
+ alert.accept # 알림을 확인
3758
+ rescue
3759
+ # 알림이 나타나지 않으면 예외 처리하고 넘어감
3760
+ end
3673
3761
 
3674
3762
  end
3675
3763
 
@@ -3695,58 +3783,46 @@ begin
3695
3783
 
3696
3784
  else
3697
3785
 
3698
-
3699
3786
  begin
3787
+ wait = Selenium::WebDriver::Wait.new(:timeout => 20) # 최대 20초 대기
3788
+ wait.until { @driver.execute_script("return document.readyState") == "complete" }
3700
3789
  @driver.get(cc_check_url)
3701
- sleep(2)
3702
- puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
3703
- rescue Selenium::WebDriver::Error::UnknownError => e
3704
- puts "#{cc_check_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
3705
- # 열린 모든 창을 닫음
3706
- @driver.window_handles.each do |handle|
3790
+ sleep(1)
3791
+ puts '-[√] 출석체크 페이지 URL 이동.......'.magenta
3792
+ # Alert 처리 부분
3793
+ begin
3794
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3) # 3초 대기
3795
+ alert = wait.until { driver.switch_to.alert } # alert가 나타날 때까지 기다림
3796
+ alert.accept # 알림을 확인
3797
+ rescue
3798
+ # 알림이 나타나지 않으면 예외 처리하고 넘어감
3799
+ end
3800
+
3801
+ rescue Selenium::WebDriver::Error::UnknownError => e
3802
+ puts "#{cc_check_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
3803
+ # 열린 모든 창을 닫음
3804
+ @driver.window_handles.each do |handle|
3707
3805
  @driver.switch_to.window(handle)
3708
3806
  begin
3709
- @driver.close
3807
+ @driver.close
3710
3808
  rescue Selenium::WebDriver::Error::WebDriverError => e
3711
- puts "Failed to close tab: #{e.message}"
3809
+ puts "사이트 내부에 예외 발생: #{e.message}"
3712
3810
  end
3713
- end
3811
+ end
3714
3812
 
3715
- # 드라이버 종료
3716
- @driver.quit if @driver
3717
- return 0
3718
- end
3813
+ # 드라이버 종료
3814
+ @driver.quit if @driver
3815
+ return 0
3816
+
3817
+ rescue Selenium::WebDriver::Error::TimeoutError => e
3818
+ puts "웹 페이지 로드가 시간 초과되었습니다: #{e.message}"
3819
+ @driver.quit if @driver
3820
+ return 0
3821
+
3822
+ rescue
3823
+ end
3719
3824
 
3720
- begin
3721
- sleep(1)
3722
- @driver.switch_to.alert.accept
3723
- rescue
3724
- end
3725
3825
 
3726
- begin
3727
- # 요소 찾기 타임아웃을 10초로 설정
3728
- wait = Selenium::WebDriver::Wait.new(:timeout => 20)
3729
- #요소가 나타날 때까지 20초 동안 기다립니다.
3730
- wait.until { @driver.find_element(:xpath, '/html') }
3731
- @driver.find_element(:xpath, '/html')
3732
- rescue
3733
- begin
3734
- new_check_url = @driver.current_url #현제 페이지 URL 추출
3735
- sleep(1)
3736
- @driver.get(new_check_url)
3737
- # 요소 찾기 타임아웃을 10초로 설정
3738
- wait = Selenium::WebDriver::Wait.new(:timeout => 20)
3739
- #요소가 나타날 때까지 20초 동안 기다립니다.
3740
- wait.until { @driver.find_element(:xpath, '/html') }
3741
- @driver.find_element(:xpath, '/html')
3742
- rescue => e
3743
- puts '-[√] 출석체크 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
3744
- puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
3745
- puts e
3746
- @driver.close
3747
- return 0
3748
- end
3749
- end
3750
3826
 
3751
3827
 
3752
3828
  sleep(1)
@@ -3925,11 +4001,15 @@ begin
3925
4001
  end
3926
4002
 
3927
4003
  ##<─────────────────────────────────────────────────────────────────────출석 체크 입력 코드 부분
3928
- begin
3929
- sleep(1)
3930
- @driver.switch_to.alert.accept
3931
- rescue
3932
- end
4004
+
4005
+ # Alert 처리 부분
4006
+ begin
4007
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3) # 3초 대기
4008
+ alert = wait.until { driver.switch_to.alert } # alert가 나타날 때까지 기다림
4009
+ alert.accept # 알림을 확인
4010
+ rescue
4011
+ # 알림이 나타나지 않으면 예외 처리하고 넘어감
4012
+ end
3933
4013
 
3934
4014
 
3935
4015
  end
@@ -3956,63 +4036,48 @@ post_url = option['post_url'].to_s
3956
4036
  else
3957
4037
  puts '-[√] 글쓰기 페이지 URL 이동.......'.magenta
3958
4038
 
3959
-
4039
+
3960
4040
  begin
4041
+ wait = Selenium::WebDriver::Wait.new(:timeout => 20) # 최대 20초 대기
4042
+ wait.until { @driver.execute_script("return document.readyState") == "complete" }
3961
4043
  @driver.get(post_url)
3962
- sleep(2)
3963
- puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
3964
- rescue Selenium::WebDriver::Error::UnknownError => e
3965
- puts "#{post_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
3966
- # 열린 모든 창을 닫음
3967
- @driver.window_handles.each do |handle|
4044
+ sleep(1)
4045
+ puts '-[√] 글쓰기 페이지 URL 이동.......'.magenta
4046
+ # Alert 처리 부분
4047
+ begin
4048
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3) # 3초 대기
4049
+ alert = wait.until { driver.switch_to.alert } # alert가 나타날 때까지 기다림
4050
+ alert.accept # 알림을 확인
4051
+ rescue
4052
+ # 알림이 나타나지 않으면 예외 처리하고 넘어감
4053
+ end
4054
+
4055
+ rescue Selenium::WebDriver::Error::UnknownError => e
4056
+ puts "#{post_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
4057
+ # 열린 모든 창을 닫음
4058
+ @driver.window_handles.each do |handle|
3968
4059
  @driver.switch_to.window(handle)
3969
4060
  begin
3970
- @driver.close
4061
+ @driver.close
3971
4062
  rescue Selenium::WebDriver::Error::WebDriverError => e
3972
- puts "Failed to close tab: #{e.message}"
4063
+ puts "사이트 내부에 예외 발생: #{e.message}"
3973
4064
  end
3974
- end
4065
+ end
3975
4066
 
3976
- # 드라이버 종료
3977
- @driver.quit if @driver
3978
- return 0
3979
- end
3980
-
3981
- begin
3982
- sleep(2)
3983
- @driver.switch_to.alert.accept
3984
- rescue
3985
- end
3986
-
3987
-
4067
+ # 드라이버 종료
4068
+ @driver.quit if @driver
4069
+ return 0
4070
+
4071
+ rescue Selenium::WebDriver::Error::TimeoutError => e
4072
+ puts "웹 페이지 로드가 시간 초과되었습니다: #{e.message}"
4073
+ @driver.quit if @driver
4074
+ return 0
4075
+
4076
+ rescue
4077
+ end
3988
4078
 
3989
4079
 
3990
4080
 
3991
- begin
3992
- # 요소 찾기 타임아웃을 10초로 설정
3993
- wait = Selenium::WebDriver::Wait.new(:timeout => 20)
3994
- #요소가 나타날 때까지 20초 동안 기다립니다.
3995
- wait.until { @driver.find_element(:xpath, '/html') }
3996
- @driver.find_element(:xpath, '/html')
3997
- rescue
3998
- begin
3999
- new_post_url = @driver.current_url #현제 페이지 URL 추출
4000
- sleep(1)
4001
- @driver.get(new_post_url)
4002
- # 요소 찾기 타임아웃을 10초로 설정
4003
- wait = Selenium::WebDriver::Wait.new(:timeout => 20)
4004
- #요소가 나타날 때까지 20초 동안 기다립니다.
4005
- wait.until { @driver.find_element(:xpath, '/html') }
4006
- @driver.find_element(:xpath, '/html')
4007
- sleep(1)
4008
- rescue => e
4009
- puts '-[√] 글쓰기 페이지 접속 시도 실패 (페이지 로딩 지연 및 접속 불량).......'.red
4010
- puts '-[√] 다음 작업 준비로 약 1초~60초 내외 시간이 소요됩니다.......'.red
4011
- puts e
4012
- @driver.close
4013
- return 0
4014
- end
4015
- end
4016
4081
 
4017
4082
  sleep(1)
4018
4083
  begin
@@ -5731,7 +5796,7 @@ begin
5731
5796
  @driver.close
5732
5797
 
5733
5798
  rescue Selenium::WebDriver::Error::WebDriverError => e
5734
- puts "Failed to close tab: #{e.message}"
5799
+ puts "크롬 브라우저 종료: #{e.message}"
5735
5800
  end
5736
5801
  end
5737
5802
  return 0
@@ -8732,7 +8797,7 @@ rescue
8732
8797
  # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
8733
8798
  @driver.close
8734
8799
  rescue Selenium::WebDriver::Error::WebDriverError => e
8735
- puts "Failed to close tab: #{e.message}"
8800
+ puts "크롬 브라우저 종료: #{e.message}"
8736
8801
  end
8737
8802
  end
8738
8803
  return 0
@@ -8854,7 +8919,7 @@ rescue => e
8854
8919
  @driver.close
8855
8920
 
8856
8921
  rescue Selenium::WebDriver::Error::WebDriverError => e
8857
- puts "Failed to close tab: #{e.message}"
8922
+ puts "크롬 브라우저 종료: #{e.message}"
8858
8923
  end
8859
8924
  end
8860
8925
  return 0
@@ -8870,7 +8935,7 @@ begin
8870
8935
  @driver.close
8871
8936
 
8872
8937
  rescue Selenium::WebDriver::Error::WebDriverError => e
8873
- puts "Failed to close tab: #{e.message}"
8938
+ puts "크롬 브라우저 종료: #{e.message}"
8874
8939
  end
8875
8940
  end
8876
8941
  @driver.quit
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posting_zon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.52
4
+ version: 0.0.55
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: posting app
14
14
  email: mymin26@naver.com