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.
- checksums.yaml +4 -4
- data/lib/posting_zon.rb +271 -206
- 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: fc55647bc90f49690abd0af0efd979637e70b7530ef8f538a02a420d3ed85f79
|
4
|
+
data.tar.gz: 3b888e57fd01a3cdc9a5901652a6ee952166b56df94479583803f034896b778a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
#
|
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
|
@@ -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(
|
201
|
-
|
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(
|
231
|
-
|
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 "
|
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 "
|
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(
|
377
|
+
sleep(1)
|
287
378
|
puts '-[√] 회원가입 페이지 URL 이동.......'.magenta
|
288
|
-
|
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
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
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
|
-
|
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
|
-
|
2468
|
-
|
2469
|
-
|
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(
|
2492
|
-
puts '-[√]
|
2493
|
-
|
2494
|
-
|
2495
|
-
|
2496
|
-
|
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
|
-
|
2602
|
+
@driver.close
|
2500
2603
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
2501
|
-
|
2604
|
+
puts "사이트 내부에 예외 발생: #{e.message}"
|
2502
2605
|
end
|
2503
|
-
|
2606
|
+
end
|
2504
2607
|
|
2505
|
-
|
2506
|
-
|
2507
|
-
|
2508
|
-
|
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
|
-
|
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 "
|
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
|
-
|
3670
|
-
|
3671
|
-
|
3672
|
-
|
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(
|
3702
|
-
puts '-[√]
|
3703
|
-
|
3704
|
-
|
3705
|
-
|
3706
|
-
|
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
|
-
|
3807
|
+
@driver.close
|
3710
3808
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
3711
|
-
|
3809
|
+
puts "사이트 내부에 예외 발생: #{e.message}"
|
3712
3810
|
end
|
3713
|
-
|
3811
|
+
end
|
3714
3812
|
|
3715
|
-
|
3716
|
-
|
3717
|
-
|
3718
|
-
|
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
|
-
|
3929
|
-
|
3930
|
-
|
3931
|
-
|
3932
|
-
|
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(
|
3963
|
-
puts '-[√]
|
3964
|
-
|
3965
|
-
|
3966
|
-
|
3967
|
-
|
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
|
-
|
4061
|
+
@driver.close
|
3971
4062
|
rescue Selenium::WebDriver::Error::WebDriverError => e
|
3972
|
-
|
4063
|
+
puts "사이트 내부에 예외 발생: #{e.message}"
|
3973
4064
|
end
|
3974
|
-
|
4065
|
+
end
|
3975
4066
|
|
3976
|
-
|
3977
|
-
|
3978
|
-
|
3979
|
-
|
3980
|
-
|
3981
|
-
|
3982
|
-
|
3983
|
-
|
3984
|
-
|
3985
|
-
|
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 "
|
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 "
|
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 "
|
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 "
|
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.
|
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-
|
11
|
+
date: 2025-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: posting app
|
14
14
|
email: mymin26@naver.com
|