posting_duo 0.0.52 → 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 +282 -193
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0aabc20dcc0f09d7e6dcfe7739c4c85ea98f30405d7c10d40165cda5e442825a
4
- data.tar.gz: 037fc215336421be56e97c1a3f1c0beea34137e0b0cd16898802f6fbb5e1f049
3
+ metadata.gz: fc359a857b425b1365169ae81e5acded00d804db9806b4bd66bc1ff9c7aabbcf
4
+ data.tar.gz: a8005949efb1edb0b4b704138617bde7df718558e7c242f8ccc8c4a12d0c2074
5
5
  SHA512:
6
- metadata.gz: 9fd167e4d22dfbee5549ce185d12518ca5d72eb099c785d2dd57995fe40b8c0f88b67bd268ed6b660fea0adf9a2435df7eccbf18f76db4db3094458075d40483
7
- data.tar.gz: c1447f8e9097a3a22f0936c11bb72cde1acbad872b2a1a71d8367a0abfee2205478214103b48f392cc8404f4ae2f1f58a10c947576f8e7fe475865726b7093b6
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
@@ -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,50 @@ 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
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
288
391
  rescue Selenium::WebDriver::Error::UnknownError => e
289
392
  puts "#{signup_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
290
393
  # 열린 모든 창을 닫음
291
394
  @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
395
+ @driver.switch_to.window(handle)
396
+ begin
397
+ @driver.close
398
+ rescue Selenium::WebDriver::Error::WebDriverError => e
399
+ puts "사이트 내부에 예외 발생: #{e.message}"
400
+ end
298
401
  end
299
-
402
+
300
403
  # 드라이버 종료
301
404
  @driver.quit if @driver
302
405
  return 0
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
303
414
  end
304
415
 
305
416
 
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
417
 
329
418
 
330
419
 
@@ -2464,9 +2553,16 @@ end
2464
2553
  end
2465
2554
 
2466
2555
  begin
2467
- sleep(1)
2468
- @driver.switch_to.alert.accept
2469
- 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
2470
2566
  end
2471
2567
 
2472
2568
 
@@ -2486,55 +2582,53 @@ login_url = option['login_url'].to_s
2486
2582
  if login_url == '' or login_url == '로그인 페이지 url'
2487
2583
 
2488
2584
  else
2585
+
2489
2586
  begin
2587
+ wait = Selenium::WebDriver::Wait.new(timeout: 20) # 최대 20초 대기
2588
+ wait.until { @driver.execute_script("return document.readyState") == "complete" } # 페이지가 완전히 로드될 때까지 기다림
2490
2589
  @driver.get(login_url)
2491
- sleep(2)
2492
- puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
2590
+ sleep(1)
2591
+ puts '-[√] 로그인 페이지 URL 이동.......'.magenta
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
2604
+
2493
2605
  rescue Selenium::WebDriver::Error::UnknownError => e
2494
- puts "#{login_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
2606
+ puts "#{signup_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
2495
2607
  # 열린 모든 창을 닫음
2496
2608
  @driver.window_handles.each do |handle|
2497
- @driver.switch_to.window(handle)
2498
- begin
2499
- @driver.close
2500
- rescue Selenium::WebDriver::Error::WebDriverError => e
2501
- puts "Failed to close tab: #{e.message}"
2502
- end
2609
+ @driver.switch_to.window(handle)
2610
+ begin
2611
+ @driver.close
2612
+ rescue Selenium::WebDriver::Error::WebDriverError => e
2613
+ puts "사이트 내부에 예외 발생: #{e.message}"
2614
+ end
2503
2615
  end
2504
-
2616
+
2505
2617
  # 드라이버 종료
2506
2618
  @driver.quit if @driver
2507
2619
  return 0
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
2508
2628
  end
2509
2629
 
2510
2630
 
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
-
2631
+
2538
2632
  sleep(1)
2539
2633
  ##캡챠 해제 입력 코드 부분─────────────────────────────────────────────────────────────────────>
2540
2634
 
@@ -3445,7 +3539,7 @@ login_url = option['login_url'].to_s
3445
3539
  # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
3446
3540
  @driver.close
3447
3541
  rescue Selenium::WebDriver::Error::WebDriverError => e
3448
- puts "Failed to close tab: #{e.message}"
3542
+ puts "크롬 브라우저 종료: #{e.message}"
3449
3543
  end
3450
3544
  end
3451
3545
  return 0
@@ -3666,10 +3760,17 @@ login_url = option['login_url'].to_s
3666
3760
  end
3667
3761
  ##로그인 버튼 코드 부분─────────────────────────────────────────────────────────────────────<
3668
3762
  begin
3669
- sleep(1)
3670
- @driver.switch_to.alert.accept
3671
- rescue
3672
- 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
3673
3774
 
3674
3775
  end
3675
3776
 
@@ -3695,58 +3796,50 @@ begin
3695
3796
 
3696
3797
  else
3697
3798
 
3698
-
3699
3799
  begin
3800
+ wait = Selenium::WebDriver::Wait.new(timeout: 20) # 최대 20초 대기
3801
+ wait.until { @driver.execute_script("return document.readyState") == "complete" } # 페이지가 완전히 로드될 때까지 기다림
3700
3802
  @driver.get(cc_check_url)
3701
- sleep(2)
3702
- puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
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
3703
3817
  rescue Selenium::WebDriver::Error::UnknownError => e
3704
- puts "#{cc_check_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
3818
+ puts "#{signup_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
3705
3819
  # 열린 모든 창을 닫음
3706
3820
  @driver.window_handles.each do |handle|
3707
- @driver.switch_to.window(handle)
3708
- begin
3709
- @driver.close
3710
- rescue Selenium::WebDriver::Error::WebDriverError => e
3711
- puts "Failed to close tab: #{e.message}"
3712
- end
3821
+ @driver.switch_to.window(handle)
3822
+ begin
3823
+ @driver.close
3824
+ rescue Selenium::WebDriver::Error::WebDriverError => e
3825
+ puts "사이트 내부에 예외 발생: #{e.message}"
3826
+ end
3713
3827
  end
3714
-
3828
+
3715
3829
  # 드라이버 종료
3716
3830
  @driver.quit if @driver
3717
3831
  return 0
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
3718
3840
  end
3719
3841
 
3720
- begin
3721
- sleep(1)
3722
- @driver.switch_to.alert.accept
3723
- rescue
3724
- end
3725
3842
 
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
3843
 
3751
3844
 
3752
3845
  sleep(1)
@@ -3926,10 +4019,17 @@ begin
3926
4019
 
3927
4020
  ##<─────────────────────────────────────────────────────────────────────출석 체크 입력 코드 부분
3928
4021
  begin
3929
- sleep(1)
3930
- @driver.switch_to.alert.accept
3931
- rescue
3932
- 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
3933
4033
 
3934
4034
 
3935
4035
  end
@@ -3956,63 +4056,52 @@ post_url = option['post_url'].to_s
3956
4056
  else
3957
4057
  puts '-[√] 글쓰기 페이지 URL 이동.......'.magenta
3958
4058
 
3959
-
4059
+
3960
4060
  begin
4061
+ wait = Selenium::WebDriver::Wait.new(timeout: 20) # 최대 20초 대기
4062
+ wait.until { @driver.execute_script("return document.readyState") == "complete" } # 페이지가 완전히 로드될 때까지 기다림
3961
4063
  @driver.get(post_url)
3962
- sleep(2)
3963
- puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
4064
+ sleep(1)
4065
+ puts '-[√] 글쓰기 페이지 URL 이동.......'.magenta
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
3964
4078
  rescue Selenium::WebDriver::Error::UnknownError => e
3965
- puts "#{post_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
4079
+ puts "#{signup_url} 해당 사이트의 문제로 접속이 불가능합니다." # 오류 메시지 출력
3966
4080
  # 열린 모든 창을 닫음
3967
4081
  @driver.window_handles.each do |handle|
3968
- @driver.switch_to.window(handle)
3969
- begin
3970
- @driver.close
3971
- rescue Selenium::WebDriver::Error::WebDriverError => e
3972
- puts "Failed to close tab: #{e.message}"
3973
- end
4082
+ @driver.switch_to.window(handle)
4083
+ begin
4084
+ @driver.close
4085
+ rescue Selenium::WebDriver::Error::WebDriverError => e
4086
+ puts "사이트 내부에 예외 발생: #{e.message}"
4087
+ end
3974
4088
  end
3975
-
4089
+
3976
4090
  # 드라이버 종료
3977
4091
  @driver.quit if @driver
3978
4092
  return 0
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
3979
4101
  end
3980
4102
 
3981
- begin
3982
- sleep(2)
3983
- @driver.switch_to.alert.accept
3984
- rescue
3985
- end
3986
-
3987
-
3988
-
3989
4103
 
3990
4104
 
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
4105
 
4017
4106
  sleep(1)
4018
4107
  begin
@@ -5731,7 +5820,7 @@ begin
5731
5820
  @driver.close
5732
5821
 
5733
5822
  rescue Selenium::WebDriver::Error::WebDriverError => e
5734
- puts "Failed to close tab: #{e.message}"
5823
+ puts "크롬 브라우저 종료: #{e.message}"
5735
5824
  end
5736
5825
  end
5737
5826
  return 0
@@ -8732,7 +8821,7 @@ rescue
8732
8821
  # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
8733
8822
  @driver.close
8734
8823
  rescue Selenium::WebDriver::Error::WebDriverError => e
8735
- puts "Failed to close tab: #{e.message}"
8824
+ puts "크롬 브라우저 종료: #{e.message}"
8736
8825
  end
8737
8826
  end
8738
8827
  return 0
@@ -8854,7 +8943,7 @@ rescue => e
8854
8943
  @driver.close
8855
8944
 
8856
8945
  rescue Selenium::WebDriver::Error::WebDriverError => e
8857
- puts "Failed to close tab: #{e.message}"
8946
+ puts "크롬 브라우저 종료: #{e.message}"
8858
8947
  end
8859
8948
  end
8860
8949
  return 0
@@ -8870,7 +8959,7 @@ begin
8870
8959
  @driver.close
8871
8960
 
8872
8961
  rescue Selenium::WebDriver::Error::WebDriverError => e
8873
- puts "Failed to close tab: #{e.message}"
8962
+ puts "크롬 브라우저 종료: #{e.message}"
8874
8963
  end
8875
8964
  end
8876
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.52
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