tblog_duopack 0.0.5 → 0.0.7

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/tblog_duopack.rb +515 -363
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67aca1228ea382eedfe5cd4311bba5bac0f58c7086bab65742981b1fd94df259
4
- data.tar.gz: 4d9399e4ca2201f9124d730528fad53e94d6ea74e140202e8510a70eb51dcd9e
3
+ metadata.gz: 7d2ec466025951542ed1b0cf1990887b7c57cbdbea7e9fa25344485a0f9793a3
4
+ data.tar.gz: 600aab49423d538d4f88a71546f8d59cef1ea374f47b99b69d57189c19f0a042
5
5
  SHA512:
6
- metadata.gz: a5bfde0b177e7c1ec89d2651af06931fd4e54ff71e7f4ee5de1486fcaddea5f90c51945b7ed2c61c80a3d31d253de780a9381e34414c4e0bd3c11717ca01f9f0
7
- data.tar.gz: 04b37e0db153e7973c7b480e0affd256418358187bf51f02cfe105a280724d0e2352dc4ab900a053d945e0d829e70ffc906575cf70cb11e07acb45f3125acae2
6
+ metadata.gz: 8051d5f28729d24b9dea62e6ba844eb84b9f43173df5de48430d9b35a66ee70d154328fb61dcd53747462f80a87e8a727a6ba176ad320c80d02306d3290bc743
7
+ data.tar.gz: 17a834acd2a4a5bb8c40afbe6fa09021e8958927b52cd4aa66e845ef7c356ffb3b812919f8f43e222c69b668d1abd20879089732b0512139e4f10f123b424ee1
data/lib/tblog_duopack.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  require 'glimmer-dsl-libui'
3
2
  require 'selenium-webdriver'
4
3
  # require 'webdrivers'
@@ -18,8 +17,6 @@ require 'cgi'
18
17
  require 'digest'
19
18
  require 'auto_click'
20
19
  require 'rainbow/refinement'
21
- require 'net/http'
22
- require 'httparty'
23
20
  include AutoClickMethods
24
21
  using Rainbow
25
22
  include Glimmer
@@ -209,133 +206,109 @@ end
209
206
 
210
207
  class Naver
211
208
  def initialize
212
- @seed = 1
213
- @cookie = ''
209
+ @seed = 1
210
+ @cookie = ''
214
211
  end
215
-
212
+
216
213
  def chrome_start(proxy)
217
- # 공통 옵션 설정
218
- Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
219
- options = Selenium::WebDriver::Chrome::Options.new
220
-
221
- options.add_argument('--disable-blink-features=AutomationControlled')
222
- options.add_argument('--disable-popup-blocking')
223
- options.add_argument('--dns-prefetch-disable')
224
- options.add_argument('--disable-dev-shm-usage')
225
- options.add_argument('--disable-software-rasterizer')
226
- options.add_argument('--ignore-certificate-errors')
227
- options.add_argument('--disable-gpu') # GPU 가속 끄기
228
- options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36') # user-agent 위조
229
- options.add_argument('--disable-web-security')
230
- options.add_argument('--allow-running-insecure-content')
231
- options.add_argument('--allow-insecure-localhost')
232
- options.add_argument('--no-sandbox')
233
- options.add_argument('--disable-translate')
234
- options.add_argument('--disable-extensions-file-access-check')
235
- options.add_argument('--disable-impl-side-painting')
236
-
237
- # 자동화된 테스트 제거
238
- options.exclude_switches = ['enable-automation'] # 'excludeSwitches'를 'exclude_switches'로 수정
239
-
240
- prefs = {
241
- "profile.password_manager_enabled" => false, # 비밀번호 관리자 비활성화
242
- "credentials_enable_service" => false, # 비밀번호 저장 관련 기능 비활성화
243
- "password_manager.enabled" => false, # 비밀번호 관리자 비활성화 (추가적인 설정)
244
- "profile.managed_default_content_settings.cookies" => 2, # 쿠키 관련 팝업 차단
245
- "profile.default_content_setting_values.notifications" => 2 # 알림 관련 팝업 차단
246
- }
247
- options.add_preference('prefs', prefs)
248
-
249
- # Proxy가 설정되었으면 proxy 서버 설정
250
- if proxy != ''
251
- options.add_argument('--proxy-server=' + proxy.to_s.force_encoding('utf-8'))
252
- end
253
-
254
- # 브라우저 실행
255
- begin
256
- @driver = Selenium::WebDriver.for(:chrome, options: options)
257
- @driver.get("https://www.tistory.com/auth/login")
258
- rescue => e
259
- puts "Error: #{e.message}"
260
- puts 'Using default Chrome driver without proxy'
261
- @driver = Selenium::WebDriver.for(:chrome, options: options)
262
- @driver.get("https://www.tistory.com/auth/login")
263
- end
214
+ # 공통 옵션 설정
215
+ Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
216
+ options = Selenium::WebDriver::Chrome::Options.new
217
+
218
+ options.add_extension('./crx/app.crx') # 확장 프로그램을 첫 번째 탭에 추가
219
+ options.add_argument('--disable-blink-features=AutomationControlled')
220
+ options.add_argument('--disable-popup-blocking')
221
+ options.add_argument('--dns-prefetch-disable')
222
+ options.add_argument('--disable-dev-shm-usage')
223
+ options.add_argument('--disable-software-rasterizer')
224
+ options.add_argument('--ignore-certificate-errors')
225
+ options.add_argument('--disable-gpu') # GPU 가속 끄기
226
+ options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36') # user-agent 위조
227
+ options.add_argument('--disable-web-security')
228
+ options.add_argument('--allow-running-insecure-content')
229
+ options.add_argument('--allow-insecure-localhost')
230
+ options.add_argument('--no-sandbox')
231
+ options.add_argument('--disable-translate')
232
+ options.add_argument('--disable-extensions-file-access-check')
233
+ options.add_argument('--disable-impl-side-painting')
234
+
235
+ # 자동화된 테스트 제거
236
+ options.exclude_switches = ['enable-automation']
237
+
238
+ options.add_preference("profile.password_manager_enabled", false) # 비밀번호 관리자 비활성화
239
+ options.add_preference("credentials_enable_service", false) # 비밀번호 저장 기능 비활성화
240
+ #options.add_preference("profile.managed_default_content_settings.cookies", 2) # 쿠키 관련 팝업 차단
241
+ options.add_preference("profile.default_content_setting_values.notifications", 2) # 알림 차단
242
+ options.add_argument("--disable-save-password-bubble") # 비밀번호 저장 팝업 차단
243
+
244
+
245
+ # Proxy 설정
246
+ if proxy != ''
247
+ options.add_argument('--proxy-server=' + proxy.to_s.force_encoding('utf-8'))
264
248
  end
265
-
266
- def solve_captcha(captcha_api_key)
267
- page_url = @driver.current_url
268
- iframe_element = @driver.find_element(:css, "iframe[title='reCAPTCHA']")
269
- iframe_src = iframe_element.attribute("src")
249
+
250
+ # 브라우저 실행
251
+ begin
252
+ # 드라이버 실행
253
+ @driver = Selenium::WebDriver.for(:chrome, options: options)
254
+
255
+ # 첫 번째 탭에서 확장 프로그램을 로드
256
+ #@driver.get("chrome-extension://ifibfemgeogfhoebkmokieepdoobkbpo/options/options.html")
270
257
 
271
- google_key = URI.parse(iframe_src).query.split("&").map { |param| param.split("=") }.to_h["k"]
258
+ sleep(1)
259
+ # 두 번째 탭에서 로그인 페이지 열기
260
+ @driver.get('https://www.tistory.com/auth/login')
261
+ sleep(1)
262
+
263
+ rescue => e
272
264
 
273
- raise "reCAPTCHA site key를 iframe에서 찾을 수 없습니다." if google_key.nil?
274
-
275
- response = HTTParty.post("http://2captcha.com/in.php", body: {
276
- method: 'userrecaptcha',
277
- googlekey: google_key,
278
- pageurl: page_url,
279
- key: captcha_api_key,
280
- json: 1
281
- })
282
-
283
- if response.code != 200 || JSON.parse(response.body)["status"] != 1
284
- raise "2Captcha 요청에 실패했습니다. 응답: #{response.body}"
285
- end
286
-
287
- captcha_id = JSON.parse(response.body)["request"]
265
+ puts "Error: #{e.message}"
266
+ puts 'Using default Chrome driver without proxy'
267
+ @driver = Selenium::WebDriver.for(:chrome, options: options)
288
268
 
289
- # CAPTCHA 해결을 기다립니다.
290
- wait = Selenium::WebDriver::Wait.new(:timeout => 30)
291
- result = nil
292
-
293
- loop do
294
- result = HTTParty.get("http://2captcha.com/res.php?key=#{captcha_api_key}&action=get&id=#{captcha_id}&json=1")
295
- parsed_result = JSON.parse(result.body)
296
-
297
- if parsed_result["status"] == 1
298
- return parsed_result["request"]
299
- elsif parsed_result["request"] != "CAPCHA_NOT_READY"
300
- raise "2Captcha 에러 발생: #{parsed_result['request']}"
301
- end
302
- sleep(5) # 5초 간격으로 재시도
303
- end
269
+ # 번째 탭에서 확장 프로그램을 로드
270
+ #@driver.get("chrome-extension://ifibfemgeogfhoebkmokieepdoobkbpo/options/options.html")
271
+ sleep(1)
272
+ # 두 번째 탭에서 로그인 페이지 열기
273
+ @driver.get('https://www.tistory.com/auth/login')
274
+ sleep(1)
304
275
  end
305
-
306
-
307
-
276
+ end
277
+
308
278
  def login(user_id, user_pw, proxy, captcha_api_key)
309
- chrome_start(proxy)
310
- @captcha_api_key = captcha_api_key
311
- @user_id = user_id
312
-
313
- user_cookie_file = []
314
- begin
315
- Dir.entries('./cookie').each do |i|
316
- if i != '.' && i != '..'
317
- user_cookie_file << i
318
- end
319
- end
320
- rescue
321
- end
322
-
323
- @cookie4 = {}
324
- if user_cookie_file.include?(user_id+'.txt')
325
- f = File.open('./cookie/'+user_id+'.txt', 'r')
326
- @cookie4 = JSON.parse(f.read)
327
- f.close
279
+ chrome_start(proxy)
280
+ @captcha_api_key = captcha_api_key
281
+ @user_id = user_id
282
+
283
+ user_cookie_file = []
284
+ begin
285
+ Dir.entries('./cookie').each do |i|
286
+ if i != '.' && i != '..'
287
+ user_cookie_file << i
288
+ end
328
289
  end
329
-
330
- # 기존 쿠키가 있으면 쿠키를 추가
331
- begin
332
- @cookie4.each do |i|
333
- @driver.manage.add_cookie(name: i['name'], value: i['value'], same_site: i['same_site'], domain: i['domain'], path: i['path'])
334
- end
335
- rescue
290
+ rescue
291
+ end
292
+
293
+ @cookie4 = {}
294
+ if user_cookie_file.include?(user_id+'.txt')
295
+ f = File.open('./cookie/'+user_id+'.txt', 'r')
296
+ @cookie4 = JSON.parse(f.read)
297
+ f.close
298
+ end
299
+
300
+ # 기존 쿠키가 있으면 쿠키를 추가
301
+ begin
302
+ @cookie4.each do |i|
303
+ @driver.manage.add_cookie(name: i['name'], value: i['value'], same_site: i['same_site'], domain: i['domain'], path: i['path'])
336
304
  end
337
-
338
- @driver.get('https://www.tistory.com/auth/login')
305
+ rescue
306
+ end
307
+
308
+ @driver.switch_to.window(@driver.window_handles.last)
309
+ sleep(1.5)
310
+ @driver.get('https://www.tistory.com/auth/login')
311
+
339
312
  sleep(1)
340
313
  begin
341
314
  wait = Selenium::WebDriver::Wait.new(:timeout => 3)
@@ -364,72 +337,75 @@ class Naver
364
337
  puts '-[√] 2 비밀번호 입력.......'.yellow
365
338
 
366
339
  wait = Selenium::WebDriver::Wait.new(:timeout => 3)
367
- wait.until { @driver.find_element(:xpath, '//*[@type="submit"]') }
340
+ wait.until { @driver.find_element(:xpath, '//*[@class="btn_g highlight submit"]') }
368
341
  @driver.find_element(:xpath, '//*[@type="submit"]').click
369
342
  puts '-[√] 3 로그인 버튼 클릭.......'.yellow
370
-
371
- #예외 변수
343
+
344
+ #캡챠 해제시
372
345
  begin
373
- # CAPTCHA iframe 찾기
374
- captcha_iframe = wait.until {
375
- @driver.find_elements(:tag_name, "iframe").find do |iframe|
376
- iframe.attribute("title") == "reCAPTCHA" || (iframe.attribute("src")&.include?("google.com/recaptcha"))
377
- end
378
- }
346
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
347
+ wait.until { @driver.find_element(:xpath, '//*[@id="captchaContainer"]') }
348
+ puts '-[√] 로그인 중 캡챠 요구 발생 처리 진행.......'.yellow
379
349
  sleep(1)
380
-
381
- # CAPTCHA iframe이 없다면 예외 처리
382
- if captcha_iframe.nil?
383
- puts 'CAPTCHA 없음, 로그인 진행 중...'.cyan
384
- else
385
- # CAPTCHA iframe으로 전환
386
- @driver.switch_to.frame(captcha_iframe)
387
- puts 'CAPTCHA iframe 전환 성공'.cyan
388
- sleep(2)
389
-
390
- # CAPTCHA 클릭
391
- recaptcha_element = wait.until { @driver.find_element(:id, "recaptcha-anchor") }
392
- recaptcha_element.click
393
- puts 'CAPTCHA 클릭 완료'.cyan
394
- sleep(3)
395
-
396
- # CAPTCHA 해결
397
- @captcha_api_key = captcha_api_key
398
- captcha_answer = solve_captcha(@captcha_api_key)
399
- puts "CAPTCHA 해결된 답: #{captcha_answer}".cyan
400
- sleep(5)
401
-
402
- # CAPTCHA 답 입력
403
- begin
404
- # 다시 `wait`을 사용하여 `g-recaptcha-response` 필드를 기다립니다
405
- captcha_input = wait.until { @driver.find_element(:id, "g-recaptcha-response") }
406
- @driver.execute_script("arguments[0].style.display = 'block';", captcha_input) # 숨겨진 CAPTCHA 입력 필드를 표시
407
- captcha_input.send_keys(captcha_answer)
408
- puts 'CAPTCHA 답 입력 완료'.cyan
409
- rescue Selenium::WebDriver::Error::NoSuchElementError => e
410
- puts "g-recaptcha-response 필드를 찾을 수 없습니다. 다시 시도해주세요.".red
411
- raise e
412
- end
413
-
414
- # 로그인 버튼 다시 클릭
415
- wait.until { @driver.find_element(:xpath, '//*[@class="btn_g highlight submit"]') }
416
- @driver.find_element(:xpath, '//*[@class="btn_g highlight submit"]').click
417
- puts '-[√] 3-3 로그인 버튼 다시 클릭.......'.cyan
350
+ @driver.switch_to.window(@driver.window_handles[0])
351
+ sleep(1)
352
+ @driver.find_element(:xpath, '//*[@name="apiKey"]').click
353
+ Clipboard.copy(captcha_api_key)
354
+ sleep(0.5)
355
+ @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
356
+ sleep(0.5)
357
+ @driver.find_element(:xpath, '//*[@data-lang="login"]').click
358
+
359
+ begin
360
+ sleep(2)
361
+ @driver.switch_to.alert.dismiss
362
+ sleep(1)
363
+ rescue
364
+
418
365
  end
419
-
420
- rescue Selenium::WebDriver::Error::NoSuchElementError => e
421
- puts 'CAPTCHA 없음, 로그인 진행 중...'.cyan
422
- rescue => e
423
- puts "로그인 처리 중 오류 발생: #{e.message}".red
424
- end
425
366
 
367
+ # 두 번째 탭으로 전환
368
+ @driver.switch_to.window(@driver.window_handles[1])
369
+
370
+ begin
371
+ wait = Selenium::WebDriver::Wait.new(:timeout => 7)
372
+ wait.until { @driver.find_element(:xpath, '//*[@data-state="ready"]') }
373
+ @driver.find_element(:xpath, '//*[@data-state="ready"]').click #캡챠우회버튼
374
+ puts '-[√] 캡챠 해제 진행 중 (약 30~60 초 소요됩니다).......'.green
375
+ sleep(10)
376
+
377
+ begin
378
+ @driver.find_element(:xpath, '//*[@data-state="error"]').click
379
+ puts '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
380
+ puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
381
+ sleep(1)
382
+ @driver.quit
383
+ rescue
384
+ # 타임아웃을 77초로 설정
385
+ wait = Selenium::WebDriver::Wait.new(:timeout => 100)
386
+ # 요소가 나타날 때까지 100초 동안 기다립니다.
387
+ wait.until { @driver.find_element(:xpath, '//*[@data-state="solved"]') }
388
+ sleep(1)
389
+ @driver.find_element(:xpath, '//*[@data-state="solved"]').click
390
+ puts '-[√] 캡챠 해제 완료 → 이어서 진행 합니다.......'.green
391
+ sleep(3)
392
+ @driver.find_element(:xpath, '//*[@id="password--2"]').click #비번 클릭
393
+ sleep(1)
394
+ @driver.action.send_keys(:enter).perform #엔터키 주기
395
+ end
396
+
397
+ rescue
398
+ end
399
+
400
+ rescue
401
+ end
426
402
 
427
403
 
428
404
  # 아이디/비밀번호 오류 처리 부분
429
405
  begin
430
406
  @driver.find_element(:xpath, '//*[@class="desc_error"]')
431
407
  sleep(1)
432
- @driver.close
408
+ @driver.quit
433
409
  puts 'error = 아이디/비밀번호 오류'.yellow
434
410
  rescue
435
411
  end
@@ -459,10 +435,19 @@ class Naver
459
435
  begin
460
436
  @driver.find_element(:xpath, '//*[@class="inner_error inner_error_type2"]')
461
437
  puts 'error = 평소와 다른 로그인이 감지되어 추가 인증이 필요합니다.'.yellow
462
- sleep(1)
463
- @driver.close
438
+ @driver.quit
464
439
  rescue
465
440
  end
441
+
442
+ #최종 로그인 실패시
443
+ begin
444
+ wait = Selenium::WebDriver::Wait.new(:timeout => 5)
445
+ wait.until { @driver.find_element(:xpath, '//*[@class="my_tistory border_box"]') }
446
+ rescue => e
447
+ puts '-[√] 로그인 실패.......'.red
448
+ @driver.quit
449
+ return 0
450
+ end
466
451
 
467
452
  end
468
453
 
@@ -486,23 +471,28 @@ class Naver
486
471
 
487
472
 
488
473
 
489
- def update(title, content, option, dd_time, url, keyword, captcha_api_key)
474
+ def update(title, content, option, url, keyword, captcha_api_key)#dd_time
490
475
  puts 'start...'.yellow
491
476
  puts(url)
492
477
  sleep(1)
493
478
  @driver.get(url)
494
- sleep(5)
495
-
479
+ sleep(2)
480
+
496
481
 
497
482
 
498
483
  begin
484
+ # alert이 뜨기를 기다리기
485
+ wait = Selenium::WebDriver::Wait.new(:timeout => 5) # 10초 대기
486
+ alert = wait.until { @driver.switch_to.alert }
499
487
 
500
- @driver.switch_to.alert.dismiss
501
- rescue
502
-
488
+ # alert 처리 (예: dismiss나 accept)
489
+ alert.dismiss # 또는 alert.accept
490
+ sleep(2)
491
+ rescue
492
+ sleep(1)
503
493
  end
504
494
 
505
- sleep(1)
495
+
506
496
 
507
497
 
508
498
 
@@ -536,7 +526,7 @@ class Naver
536
526
  rescue => e
537
527
  puts '-[√] 카테고리 ERROR 발생.......'.red
538
528
  puts '-[√] 다음 작업이 준비중이니 1~60 초 정도 기다려주세요.......'.green
539
- @driver.close
529
+ @driver.quit
540
530
  return 0
541
531
  end
542
532
 
@@ -552,7 +542,7 @@ class Naver
552
542
  begin
553
543
  @driver.find_element(:xpath, '//*[@id="post-title-inp"]').send_keys(title)
554
544
  rescue => e
555
- @driver.close
545
+ @driver.quit
556
546
  return 0
557
547
  puts '-[√] 페이지 로드(로딩)시간 초과 및 알수없는 오류로 종료.......'.red
558
548
  puts '-[√] 다음 작업이 준비중이니 1~60 초 정도 기다려주세요.......'.green
@@ -571,7 +561,7 @@ class Naver
571
561
  @driver.find_element(:xpath, '//*[@id="mceu_9-button"]').click()
572
562
  @driver.find_element(:xpath, '//*[@id="mceu_9-button"]').click()
573
563
  rescue => e
574
- @driver.close
564
+ @driver.quit
575
565
  return 0
576
566
  puts '-[√] 페이지 로드(로딩)시간 초과 및 알수없는 오류로 종료.......'.red
577
567
  puts '-[√] 다음 작업이 준비중이니 1~60 초 정도 기다려주세요.......'.green
@@ -1072,31 +1062,7 @@ class Naver
1072
1062
  end
1073
1063
 
1074
1064
 
1075
-
1076
-
1077
-
1078
-
1079
-
1080
-
1081
-
1082
-
1083
-
1084
-
1085
-
1086
-
1087
-
1088
-
1089
-
1090
-
1091
-
1092
-
1093
-
1094
-
1095
-
1096
-
1097
-
1098
-
1099
- if option['중앙정렬'] == 'false'
1065
+ if option['중앙정렬'] == 'true'
1100
1066
  puts '-[√] 중앙정렬 선택.......'.yellow
1101
1067
  begin
1102
1068
 
@@ -1110,7 +1076,7 @@ class Naver
1110
1076
  sleep(1.5)
1111
1077
 
1112
1078
 
1113
- if option['좌측정렬'] == 'false'
1079
+ if option['좌측정렬'] == 'true'
1114
1080
  puts '-[√] 좌측정렬 선택.......'.yellow
1115
1081
  begin
1116
1082
  @driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
@@ -1122,7 +1088,7 @@ class Naver
1122
1088
  sleep(1.5)
1123
1089
 
1124
1090
 
1125
- if option['우측정렬'] == 'false'
1091
+ if option['우측정렬'] == 'true'
1126
1092
  puts '-[√] 우측정렬 선택.......'.yellow
1127
1093
  begin
1128
1094
  @driver.action.key_down(:control).key_down('a').key_up('a').key_up(:control).perform
@@ -1149,104 +1115,284 @@ class Naver
1149
1115
  #태그 입력 항목
1150
1116
 
1151
1117
  sleep(1.5)
1118
+
1119
+ ##################글 발행##################
1152
1120
 
1153
- @driver.find_element(:xpath, '/html/body/div[1]/div/div[2]/div[3]/button').click
1154
- #1차 완료버튼
1155
- sleep(1.5)
1121
+ if option['글발생하기'] == 'true'
1122
+ puts '-[√] 글 발행 선택.......'.yellow
1123
+ begin
1124
+
1125
+
1126
+ @driver.find_element(:xpath, '/html/body/div[1]/div/div[2]/div[3]/button').click
1127
+ #1차 완료버튼
1128
+ sleep(1.5)
1156
1129
 
1157
- # 타임아웃을 10초로 설정
1158
- wait = Selenium::WebDriver::Wait.new(:timeout => 60)
1159
- #요소가 나타날 때까지 60초 동안 기다립니다.
1160
- wait.until { @driver.find_element(:xpath, '//*[@id="open20"]') }
1130
+ # 타임아웃을 10초로 설정
1131
+ wait = Selenium::WebDriver::Wait.new(:timeout => 60)
1132
+ #요소가 나타날 때까지 60초 동안 기다립니다.
1133
+ wait.until { @driver.find_element(:xpath, '//*[@id="open20"]') }
1161
1134
 
1162
1135
 
1163
- if option['전체공개'] == 'false'
1164
- puts '-[√] 전체공개 선택.......'.yellow
1165
- begin
1166
-
1167
- @driver.find_element(:xpath, '//*[@id="open20"]').click
1168
- sleep(2)
1169
- rescue
1170
- end
1171
- end
1136
+ if option['전체공개'] == 'true'
1137
+ puts '-[√] 전체공개 선택.......'.yellow
1138
+ begin
1139
+
1140
+ @driver.find_element(:xpath, '//*[@id="open20"]').click
1141
+ sleep(1)
1142
+ rescue
1143
+ end
1144
+ end
1145
+
1146
+
1147
+ if option['비공개'] == 'true'
1148
+ puts '-[√] 비공개 선택.......'.yellow
1149
+ begin
1150
+ @driver.find_element(:xpath, '//*[@id="open0"]').click
1151
+ sleep(1)
1152
+ rescue
1153
+ end
1154
+ end
1172
1155
 
1173
1156
 
1174
- if option['비공개'] == 'false'
1175
- puts '-[√] 비공개 선택.......'.yellow
1176
- begin
1177
- @driver.find_element(:xpath, '//*[@id="open0"]').click
1178
- sleep(2)
1179
- rescue
1180
- end
1181
- end
1182
-
1157
+ if option['댓글허용'] == 'true'
1158
+ puts '-[√] 댓글허용 선택.......'.yellow
1159
+ begin
1160
+
1161
+ @driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
1162
+ sleep(2)
1163
+ @driver.find_element(:partial_link_text, '댓글 허용').click
1164
+ sleep(1)
1165
+ rescue
1166
+ end
1167
+ end
1168
+ sleep(2)
1169
+
1170
+ if option['댓글 비 허용'] == 'true'
1171
+ puts '-[√] 댓글 비 허용 선택.......'.yellow
1172
+ begin
1173
+ @driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
1174
+ sleep(2)
1175
+ @driver.find_element(:partial_link_text, '댓글 비허용').click
1176
+ sleep(1)
1177
+ rescue
1178
+ end
1179
+ end
1183
1180
 
1184
- if option['댓글허용'] == 'false'
1185
- puts '-[√] 댓글허용 선택.......'.yellow
1186
- begin
1187
-
1188
- @driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
1189
- sleep(2)
1190
- @driver.find_element(:partial_link_text, '댓글 허용').click
1191
- sleep(2)
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+ #캡챠 해제시######################################################################
1190
+ begin
1191
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3.7)
1192
+ wait.until { @driver.find_element(:xpath, '//*[@id="captchaContainer"]') }
1193
+ puts '-[√] 로그인 중 캡챠 요구 발생 처리 진행.......'.yellow
1194
+ sleep(1)
1195
+ @driver.switch_to.window(@driver.window_handles[0])
1196
+ sleep(1)
1197
+ @driver.find_element(:xpath, '//*[@name="apiKey"]').click
1198
+ sleep(0.5)
1199
+ @driver.find_element(:xpath, '//*[@name="apiKey"]').clear
1200
+ sleep(0.5)
1201
+ Clipboard.copy(captcha_api_key)
1202
+ sleep(0.5)
1203
+ @driver.action.key_down(:control).send_keys('v').key_up(:control).perform
1204
+ sleep(0.5)
1205
+ @driver.find_element(:xpath, '//*[@data-lang="login"]').click
1206
+
1207
+ begin
1208
+ sleep(2)
1209
+ @driver.switch_to.alert.dismiss
1210
+ sleep(1)
1211
+ rescue
1212
+
1213
+ end
1214
+
1215
+ # 두 번째 탭으로 전환
1216
+ @driver.switch_to.window(@driver.window_handles[1])
1217
+
1218
+ begin
1219
+ wait = Selenium::WebDriver::Wait.new(:timeout => 7)
1220
+ wait.until { @driver.find_element(:xpath, '//*[@data-state="ready"]') }
1221
+ @driver.find_element(:xpath, '//*[@data-state="ready"]').click #캡챠우회버튼
1222
+ puts '-[√] 캡챠 해제 진행 중 (약 30~60 초 소요됩니다).......'.green
1223
+ sleep(10)
1224
+
1225
+ begin
1226
+ @driver.find_element(:xpath, '//*[@data-state="error"]').click
1227
+ puts '-[√] 1 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
1228
+ puts '-[√] 2 캡챠 해제 실패 !! API번호 및 포인트를 체크해주세요.......'.red
1229
+
1230
+ @driver.quit
1231
+ puts '-[√] 다음 작업을 진행합니다. 약 10~60초 소요 될 수 있습니다.......'.red
1232
+ rescue
1233
+ # 타임아웃을 77초로 설정
1234
+ wait = Selenium::WebDriver::Wait.new(:timeout => 100)
1235
+ # 요소가 나타날 때까지 100초 동안 기다립니다.
1236
+ wait.until { @driver.find_element(:xpath, '//*[@data-state="solved"]') }
1237
+ sleep(1)
1238
+ @driver.find_element(:xpath, '//*[@data-state="solved"]').click
1239
+ puts '-[√] 캡챠 해제 완료 → 이어서 진행 합니다.......'.green
1240
+ sleep(1)
1241
+
1242
+ end
1243
+
1244
+ rescue
1245
+ end
1246
+
1247
+ rescue
1248
+ end
1249
+ #캡챠 해제시######################################################################
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+ #sleep(dd_time.to_i) # 등록버튼 누르기 전 딜레이
1257
+ # 등록 버튼 클릭
1258
+ @driver.find_element(:xpath, '//*[@id="publish-btn"]').click
1259
+ puts '-[√] 포스트 등록 성공 여부 확인 중.......'.yellow
1260
+ sleep(2)
1261
+ ###########포스트 캡챠해제 팝업 시 재시도 작업 시작▼▼▼▼▼▼▼▼▼▼▼▼
1262
+ begin
1263
+ sleep(1)
1264
+ @driver.switch_to.alert.accept
1265
+ puts '-[√] 캡챠 체크 시간 초과!! 재 등록 시도.......'.green
1266
+ sleep(2)
1267
+ @driver.get(url)
1268
+ puts '-[√] 등록 내용 불러오기 시도.......'.yellow
1269
+ sleep(2)
1270
+ @driver.switch_to.alert.accept
1271
+ sleep(2)
1272
+ puts '-[√] 재 등록 시도 시작.......'.yellow
1273
+ @driver.find_element(:xpath, '//*[@id="publish-layer-btn"]').click
1274
+ sleep(2)
1275
+
1276
+ # 타임아웃을 10초로 설정
1277
+ wait = Selenium::WebDriver::Wait.new(:timeout => 60)
1278
+ #요소가 나타날 때까지 60초 동안 기다립니다.
1279
+ wait.until { @driver.find_element(:xpath, '//*[@id="open20"]') }
1280
+
1281
+ if option['전체공개'] == 'true'
1282
+ puts '-[√] 전체공개 선택.......'.yellow
1283
+ begin
1284
+
1285
+ @driver.find_element(:xpath, '//*[@id="open20"]').click
1286
+ sleep(2)
1287
+ rescue
1288
+ end
1289
+ end
1290
+
1291
+
1292
+ if option['비공개'] == 'true'
1293
+ puts '-[√] 비공개 선택.......'.yellow
1294
+ begin
1295
+ @driver.find_element(:xpath, '//*[@id="open0"]').click
1296
+ sleep(2)
1297
+ rescue
1298
+ end
1299
+ end
1300
+
1301
+
1302
+ if option['댓글허용'] == 'true'
1303
+ puts '-[√] 댓글허용 선택.......'.yellow
1304
+ begin
1305
+
1306
+ @driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
1307
+ sleep(2)
1308
+ @driver.find_element(:partial_link_text, '댓글 허용').click
1309
+ sleep(2)
1310
+ rescue
1311
+ end
1312
+ end
1313
+ sleep(2)
1314
+
1315
+ if option['댓글 비 허용'] == 'true'
1316
+ puts '-[√] 댓글 비 허용 선택.......'.yellow
1317
+ begin
1318
+ @driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
1319
+ sleep(2)
1320
+ @driver.find_element(:partial_link_text, '댓글 비허용').click
1321
+ sleep(2)
1322
+ rescue
1323
+ end
1324
+ end
1325
+
1326
+ begin
1327
+ sleep(1)
1328
+ puts '-[√] 캡챠 발생 유무 확인.......'.green
1329
+ @driver.find_element(:xpath, '//*[@data-state="ready"]').click #캡챠우회버튼 (xpath값에서 data-state="ready를 지목하고자 한다면 //*[@data-state="ready"] 입력)
1330
+ puts '-[√] 캡챠 해제 진행 중 (약 30~60 초 소요됩니다).......'.green
1331
+ sleep(10)
1332
+ begin
1333
+ sleep(1)
1334
+ @driver.find_element(:xpath, '//*[@data-state="error"]').click #캡챠 해제 오류 버튼
1335
+ puts '-[√] 캡챠 해제 에러 발생 !! API번호 및 포인트를 체크해주세요.......'.red
1336
+ sleep(1)
1337
+ puts '-[√] 캡챠 해제 에러 발생 !! API번호 및 포인트를 체크해주세요.......'.red
1338
+ sleep(1)
1339
+ @driver.close
1340
+ puts '-[√] 작업 종료 중........다음 포스팅 작업을 준비 합니다........'.red
1341
+ sleep(1)
1342
+ sleep(dd_time.to_i) #등록버튼 누르기전 딜레이
1343
+ @driver.find_element(:xpath, '//*[@id="publish-btn"]').click #등록완료버튼
1344
+ rescue
1345
+ # 타임아웃을 100초로 설정
1346
+ wait = Selenium::WebDriver::Wait.new(:timeout => 100)
1347
+ # 요소가 나타날 때까지 100초 동안 기다립니다.
1348
+ wait.until { @driver.find_element(:xpath, '//*[@data-state="solved"]') }
1349
+ sleep(2)
1350
+ @driver.find_element(:xpath, '//*[@data-state="solved"]').click #캡챠 해제 완료 버튼
1351
+ puts '-[√] 캡챠 해제 완료 → 이어서 진행 합니다.......'.green
1352
+ sleep(3.7)
1353
+ end
1354
+ rescue
1355
+ end
1356
+
1357
+ @driver.find_element(:xpath, '//*[@id="publish-btn"]').click #등록완료버튼
1358
+ puts '-[√] 포스트 등록 성공 여부 확인 중.......'.yellow
1359
+ rescue
1360
+ end
1361
+
1362
+
1363
+
1364
+ # 포스트 등록 완료 확인
1365
+ begin
1366
+ # 포스트 등록 완료를 확인할 수 있는 요소(예: 등록 후 확인 페이지로 이동)
1367
+ wait.until { @driver.find_element(:xpath, '//*[@class="post_cont"]') }
1368
+ puts '-[√] 포스트 등록 완료.......'.yellow
1369
+ sleep(1.5)
1370
+ @driver.quit
1371
+ rescue => e
1372
+ puts '-[×] 포스트 등록 실패!'.red
1373
+ @driver.quit
1374
+ return 0
1375
+ end
1376
+
1192
1377
  rescue
1193
1378
  end
1194
1379
  end
1195
- sleep(2)
1196
-
1197
- if option['댓글 비 허용'] == 'false'
1198
- puts '-[√] 댓글 허용 선택.......'.yellow
1199
- begin
1200
- @driver.find_element(:xpath, '//*[@class="mce-btn-type1"]').click
1201
- sleep(2)
1202
- @driver.find_element(:partial_link_text, '댓글 비허용').click
1203
- sleep(2)
1380
+
1381
+
1382
+ if option['글임시저장'] == 'true'
1383
+ puts '-[√] 임시 저장 선택.......'.yellow
1384
+ begin
1385
+
1386
+ @driver.find_element(:xpath, '//*[@class="btn btn-draft"]').click
1387
+ sleep(1.5)
1388
+ @driver.quit
1204
1389
  rescue
1205
1390
  end
1206
1391
  end
1207
1392
 
1208
1393
 
1209
- sleep(dd_time.to_i) # 등록버튼 누르기 전 딜레이
1210
- # 등록 버튼 클릭
1211
- @driver.find_element(:xpath, '//*[@id="publish-btn"]').click
1212
- puts '-[√] 포스트 등록 성공 여부 확인 중.......'.yellow
1213
- sleep(2)
1214
- # 리캡챡 발생 여부 확인
1215
- begin
1216
- # 리캡챡 요소 확인 (예: 구글 reCAPTCHA의 iframe을 찾는 방법)
1217
- wait = Selenium::WebDriver::Wait.new(:timeout => 3)
1218
- wait.until { @driver.find_element(:xpath, '//*[@id="recaptcha-anchor"]') }
1219
-
1220
- puts '-[√] 리캡챡 감지됨! 자동 해결 시도...'.yellow
1221
-
1222
- # 리캡챡 해결 함수 호출
1223
- @captcha_api_key = captcha_api_key
1224
- sleep(1)
1225
- captcha_solution = solve_captcha(captcha_api_key)
1226
1394
 
1227
- # 리캡챡 응답 필드에 해결된 값을 입력
1228
- @driver.execute_script("document.getElementById('g-recaptcha-response').innerHTML='#{captcha_solution}'")
1229
- sleep(3) # 잠시 대기 후
1230
- @driver.find_element(:xpath, '//*[@id="publish-btn"]').click # 등록 버튼 다시 클릭
1231
- puts '-[√] 리캡챡 해결 후 등록 시도.......'.yellow
1232
- sleep(2)
1233
- rescue
1234
- # 리캡챡이 없다면 바로 진행
1235
- puts '-[√] 리캡챡 없음, 바로 등록 진행.......'.yellow
1236
- end
1237
-
1238
- # 포스트 등록 완료 확인
1239
- begin
1240
- # 포스트 등록 완료를 확인할 수 있는 요소(예: 등록 후 확인 페이지로 이동)
1241
- wait.until { @driver.find_element(:xpath, '//*[@class="post_cont"]') }
1242
- puts '-[√] 포스트 등록 완료.......'.yellow
1243
- rescue
1244
- puts '-[×] 포스트 등록 실패!'.red
1245
- end
1246
1395
 
1247
-
1248
- # 브라우저 종료
1249
- @driver.close
1250
1396
 
1251
1397
 
1252
1398
 
@@ -1352,38 +1498,7 @@ class Wordpress
1352
1498
  end
1353
1499
  end
1354
1500
 
1355
- # def get_naver_text(q)
1356
- # begin
1357
- # Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
1358
- # @driver = Selenium::WebDriver.for :chrome
1359
- # rescue
1360
- # @driver = Selenium::WebDriver.for :chrome
1361
- # end
1362
- # @driver.get('https://search.naver.com/search.naver?display=15&f=&filetype=0&page=3&query='+q.to_s+'&research_url=&sm=tab_pge&start=16&where=web')
1363
- # noko = Nokogiri::HTML(@driver.page_source)
1364
- # tt = noko.xpath('//*[@id="main_pack"]/section/div/ul').text
1365
- # aa33 = '하였습니다,하였어요,하게됬어요,했답니다,했었는데요,하게되었어요,했어요,그랬답니다,그랬어요,합니다,그랬어요,그랬답니다,그랬답니다,그러합니다,좋아요,좋습니다,됬어요,되었어요,되었답니다,되었구요,되었어요,되네요,하네요,해요,할거예요,할수었이요,입니다,인데요,이예요,이랍니다,이였어요,그랬어요,그랬거든요,그랬습니다,었어요,었습니다,있었어요'.split(',')
1366
- # for page in 3..8
1367
- # @driver.get('https://www.google.com/search?q='+q.to_s+'&start='+(page*10).to_s)
1368
- # noko = Nokogiri::HTML(@driver.page_source)
1369
- # for n in 1..15
1370
- # tt2 = noko.xpath('//*[@id="rso"]/div['+n.to_s+']/div/div/div[2]/div').text
1371
- # if tt2.length < 5
1372
-
1373
- # else
1374
- # tt2 = tt2.split('...').join('')+aa3.sample
1375
- # tt += tt2
1376
- # end
1377
- # end
1378
- # end
1379
- # @driver.close
1380
- # tt = tt.split(' ').shuffle.join(' ')[0..1000]
1381
- # m = Array.new
1382
- # for n in 0..19
1383
- # m << tt[(n*100)..(n*100+100)]
1384
- # end
1385
- # return m.join("\n")
1386
- # end
1501
+
1387
1502
 
1388
1503
  def get_naver_text(q)
1389
1504
  begin
@@ -1706,7 +1821,7 @@ class Wordpress
1706
1821
 
1707
1822
  while true
1708
1823
  for n in 0..@data['table'].length-1
1709
- @data['table'][n][10] = 0
1824
+ @data['table'][n][8] = 0
1710
1825
  end
1711
1826
 
1712
1827
  while true
@@ -1740,10 +1855,10 @@ class Wordpress
1740
1855
 
1741
1856
  option['proxy'] = ''
1742
1857
  if @data['포스트설정']['프록시'].checked?
1743
- if table[6].to_s.include?('ex)') or table[6].to_i == 0
1858
+ if table[5].to_s.include?('ex)') or table[5].to_i == 0
1744
1859
  option['proxy'] = @data['포스트설정']['프록시리스트'].sample.to_s
1745
1860
  else
1746
- option['proxy'] = table[6].to_s.force_encoding('utf-8').to_s
1861
+ option['proxy'] = table[5].to_s.force_encoding('utf-8').to_s
1747
1862
  end
1748
1863
  end
1749
1864
 
@@ -1751,10 +1866,10 @@ class Wordpress
1751
1866
 
1752
1867
 
1753
1868
 
1754
- puts table[7]
1755
- puts table[10]
1869
+ puts table[6]
1870
+ puts table[8]
1756
1871
 
1757
- if table[7].to_i > table[10].to_i
1872
+ if table[6].to_i > table[8].to_i
1758
1873
  if @data['포스트설정']['테더링'].checked?
1759
1874
  puts 'tedering ip change...'
1760
1875
  stdout, stderr, status = Open3.capture3('./adb devices')
@@ -2317,7 +2432,6 @@ class Wordpress
2317
2432
  end
2318
2433
  end
2319
2434
 
2320
-
2321
2435
  @data['table'][index][-1] = 70
2322
2436
  @data['table'] << []
2323
2437
  @data['table'].pop
@@ -2534,27 +2648,27 @@ class Wordpress
2534
2648
 
2535
2649
 
2536
2650
  if @data['포스트설정']['전체공개'].checked?
2537
- option['전체공개'] = 'false'
2538
- else
2539
2651
  option['전체공개'] = 'true'
2652
+ else
2653
+ option['전체공개'] = 'false'
2540
2654
  end
2541
2655
 
2542
2656
  if @data['포스트설정']['비공개'].checked?
2543
- option['비공개'] = 'false'
2544
- else
2545
2657
  option['비공개'] = 'true'
2658
+ else
2659
+ option['비공개'] = 'false'
2546
2660
  end
2547
2661
 
2548
2662
  if @data['포스트설정']['댓글허용'].checked?
2549
- option['댓글허용'] = 'false'
2550
- else
2551
2663
  option['댓글허용'] = 'true'
2664
+ else
2665
+ option['댓글허용'] = 'false'
2552
2666
  end
2553
2667
 
2554
2668
  if @data['포스트설정']['댓글 비 허용'].checked?
2555
- option['댓글 비 허용'] = 'false'
2556
- else
2557
2669
  option['댓글 비 허용'] = 'true'
2670
+ else
2671
+ option['댓글 비 허용'] = 'false'
2558
2672
  end
2559
2673
 
2560
2674
 
@@ -2563,42 +2677,55 @@ class Wordpress
2563
2677
  end
2564
2678
 
2565
2679
  if @data['포스트설정']['중앙정렬'].checked?
2566
- option['중앙정렬'] = 'false'
2567
- else
2568
2680
  option['중앙정렬'] = 'true'
2681
+ else
2682
+ option['중앙정렬'] = 'false'
2569
2683
  end
2570
2684
 
2571
2685
  if @data['포스트설정']['우측정렬'].checked?
2572
- option['우측정렬'] = 'false'
2573
- else
2574
2686
  option['우측정렬'] = 'true'
2687
+ else
2688
+ option['우측정렬'] = 'false'
2575
2689
  end
2576
2690
 
2577
2691
  if @data['포스트설정']['좌측정렬'].checked?
2692
+ option['좌측정렬'] = 'true'
2693
+ else
2578
2694
  option['좌측정렬'] = 'false'
2695
+ end
2696
+
2697
+ if @data['포스트설정']['글발생하기'].checked?
2698
+ option['글발생하기'] = 'true'
2579
2699
  else
2580
- option['좌측정렬'] = 'true'
2700
+ option['글발생하기'] = 'false'
2581
2701
  end
2582
2702
 
2703
+ if @data['포스트설정']['글임시저장'].checked?
2704
+ option['글임시저장'] = 'true'
2705
+ else
2706
+ option['글임시저장'] = 'false'
2707
+ end
2708
+
2709
+
2583
2710
  @data['table'][index][-1] = 90
2584
2711
  @data['table'] << []
2585
2712
  @data['table'].pop
2586
2713
 
2587
2714
  p option
2588
2715
 
2589
- dd_time = @data['table'][index][9].to_s.force_encoding('utf-8').to_i
2716
+ #dd_time = @data['table'][index][8].to_s.force_encoding('utf-8').to_i
2590
2717
  url = @data['table'][index][3].to_s.force_encoding('utf-8')
2591
2718
  captcha_api_key = @data['포스트설정']['captcha_api_key'].text.to_s.force_encoding('utf-8')
2592
2719
 
2593
2720
 
2594
2721
  puts 'start...'
2595
- naver.update(title,content,option, dd_time, url, keyword, captcha_api_key)
2722
+ naver.update(title,content,option, url, keyword, captcha_api_key)#dd_time
2596
2723
 
2597
- @data['table'][index][10] = @data['table'][index][10].to_i + 1
2724
+ @data['table'][index][8] = @data['table'][index][8].to_i + 1
2598
2725
  @data['table'][index][-1] = 100
2599
2726
  @data['table'] << []
2600
2727
  @data['table'].pop
2601
- sleep(@data['table'][index][8].to_i)
2728
+ sleep(@data['table'][index][7].to_i)
2602
2729
  end
2603
2730
  rescue => e
2604
2731
  puts e
@@ -2951,8 +3078,8 @@ class Wordpress
2951
3078
 
2952
3079
  button('등록'){
2953
3080
  on_clicked {
2954
- @data['table'] << [false, @data['site_id_input'].text, @data['site_pw_input'].text,@data['게시판url'].text,@data['category'].text, @data['proxy'].text, 1, 1, 1, 0,0]
2955
- @data['table'] << [false, @data['site_id_input'].text, @data['site_pw_input'].text,@data['게시판url'].text,@data['category'].text, @data['proxy'].text, 1, 1, 1, 0,0]
3081
+ @data['table'] << [false, @data['site_id_input'].text, @data['site_pw_input'].text,@data['게시판url'].text,@data['category'].text, @data['proxy'].text, 1, 1, 0,0]
3082
+ @data['table'] << [false, @data['site_id_input'].text, @data['site_pw_input'].text,@data['게시판url'].text,@data['category'].text, @data['proxy'].text, 1, 1, 0,0]
2956
3083
  @data['table'].pop
2957
3084
  }
2958
3085
  }
@@ -2964,8 +3091,8 @@ class Wordpress
2964
3091
  file_data.split("\n").each do |i|
2965
3092
  i3 = i.to_s.force_encoding('utf-8').to_s
2966
3093
  i2 = i3.split(',')
2967
- @data['table'] << [false, i2[0].to_s, i2[1].to_s,i2[2].to_s,i2[3].to_s,i2[4].to_s,1,1,1,0,0]
2968
- @data['table'] << [false, i2[0].to_s, i2[1].to_s,1,1,1,0,0]
3094
+ @data['table'] << [false, i2[0].to_s, i2[1].to_s,i2[2].to_s,i2[3].to_s,i2[4].to_s,1,1,0,0]
3095
+ @data['table'] << [false, i2[0].to_s, i2[1].to_s,1,1,0,0]
2969
3096
  @data['table'].pop
2970
3097
  end
2971
3098
  end
@@ -3027,9 +3154,9 @@ class Wordpress
3027
3154
  text_column('다음 작업 딜레이'){
3028
3155
  editable true
3029
3156
  }
3030
- text_column('등록 버튼 딜레이'){
3031
- editable true
3032
- }
3157
+ # text_column('등록 버튼 딜레이'){
3158
+ # editable true
3159
+ # }
3033
3160
  text_column('시도 횟수'){
3034
3161
 
3035
3162
  }
@@ -3041,6 +3168,7 @@ class Wordpress
3041
3168
 
3042
3169
  horizontal_box{
3043
3170
  stretchy false
3171
+
3044
3172
  @data['포스트설정']['captcha_api_key'] = entry(){
3045
3173
  text 'captcha_api_key 입력'
3046
3174
  }
@@ -3051,9 +3179,9 @@ class Wordpress
3051
3179
  @data['table_delay_input'] = entry{
3052
3180
  text '딜레이 ex) 3'
3053
3181
  }
3054
- @data['table_delay_input2'] = entry{
3055
- text '등록전딜레이'
3056
- }
3182
+ #@data['table_delay_input2'] = entry{
3183
+ # text '등록전딜레이'
3184
+ #}
3057
3185
 
3058
3186
  button('전체설정'){
3059
3187
  on_clicked{
@@ -3061,7 +3189,7 @@ class Wordpress
3061
3189
 
3062
3190
  @data['table'][n][6] = @data['table_counter_input'].text.to_i
3063
3191
  @data['table'][n][7] = @data['table_delay_input'].text.to_i
3064
- @data['table'][n][8] = @data['table_delay_input2'].text.to_i
3192
+ #@data['table'][n][8] = @data['table_delay_input2'].text.to_i
3065
3193
  @data['table'] << []
3066
3194
  @data['table'].pop
3067
3195
  end
@@ -4432,7 +4560,6 @@ class Wordpress
4432
4560
  }
4433
4561
  }
4434
4562
 
4435
-
4436
4563
 
4437
4564
 
4438
4565
  horizontal_box{
@@ -4440,6 +4567,31 @@ class Wordpress
4440
4567
  @data['무한반복'] = checkbox('무한반복'){
4441
4568
  stretchy false
4442
4569
  }
4570
+
4571
+
4572
+
4573
+ @data['포스트설정']['글발생하기'] = checkbox('글 발행하기'){
4574
+ stretchy false
4575
+ on_toggled{
4576
+ if @data['포스트설정']['글발생하기'].checked? == true
4577
+ if @data['포스트설정']['글임시저장'].checked?
4578
+ @data['포스트설정']['글임시저장'].checked = false
4579
+ end
4580
+ end
4581
+ }
4582
+ }
4583
+ @data['포스트설정']['글임시저장'] = checkbox('글 임시저장'){
4584
+ stretchy false
4585
+ on_toggled{
4586
+ if @data['포스트설정']['글임시저장'].checked? == true
4587
+ if @data['포스트설정']['글발생하기'].checked?
4588
+ @data['포스트설정']['글발생하기'].checked = false
4589
+ end
4590
+ end
4591
+ }
4592
+ }
4593
+
4594
+
4443
4595
  button('작업시작'){
4444
4596
  on_clicked{
4445
4597
  if @user_login_ok == 1
@@ -4480,7 +4632,7 @@ class Wordpress
4480
4632
  @data['포스트설정']['중앙정렬'].checked = true
4481
4633
  @data['포스트설정']['전체공개'].checked = true
4482
4634
  @data['포스트설정']['댓글허용'].checked = true
4483
-
4635
+ @data['포스트설정']['글발생하기'].checked = true
4484
4636
 
4485
4637
  }.show
4486
4638
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tblog_duopack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - zon