duo_blog_cafe_comment 0.0.21 → 0.0.27
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/duo_blog_cafe_comment.rb +81 -22
- 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: 7e6fc63e5af7bc73595d89e78b2cec99fc89bb2c8e6dfe03719e2bca5e0b4c61
|
4
|
+
data.tar.gz: 58f45bc79d0b7583d3f222764681d328f7d49ece1ec7bfab3c2ae9792d507b5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fed122810cb710d1890783538700aee7c8dfafa46a736e43658237518de98db8790a34125cd40e905d33af33624828ddc7c110689b534f776981cb6819cadef
|
7
|
+
data.tar.gz: 54e93890ce9619c8871ad5a99a4a977d3ba09500d31d454e239d0cf1742737b2c53988ac1784989aa33db2ab834e41428eae18070d067b84eab22e5a086d9b41
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'glimmer-dsl-libui'
|
2
2
|
require 'selenium-webdriver'
|
3
|
-
|
3
|
+
require 'webdrivers'
|
4
4
|
require 'iconv'
|
5
5
|
require 'nokogiri'
|
6
6
|
require 'http'
|
@@ -21,17 +21,43 @@ include AutoClickMethods
|
|
21
21
|
using Rainbow
|
22
22
|
include Glimmer
|
23
23
|
|
24
|
+
|
24
25
|
class Naver
|
25
26
|
def initialize
|
26
27
|
@seed = 1
|
28
|
+
|
29
|
+
begin
|
30
|
+
# webdrivers가 사용자의 Chrome 버전에 맞는 chromedriver 다운로드 시도
|
31
|
+
|
32
|
+
# Webdrivers가 드라이버를 다운로드할 경로를 설정
|
33
|
+
Webdrivers.cache_time = 86_400 # 하루로 설정 (기본값: 86_400초)
|
34
|
+
Webdrivers.install_dir = "./" # 크롬드라이버를 수동으로 설치할 경로를 설정
|
35
|
+
# 크롬드라이버 자동 업데이트 시도
|
36
|
+
Webdrivers::Chromedriver.update
|
37
|
+
puts "chromedriver 자동 다운로드 성공"
|
38
|
+
rescue => e
|
39
|
+
puts "chromedriver 자동 다운로드 실패: #{e.message}"
|
40
|
+
puts "폴더내 크롬드라이버를 사용합니다."
|
41
|
+
puts "크롬드라이버가 오래된 경우 오류 발생될 수 있으며, 만일 오류 발생시 아래 지침을 따라주세요."
|
42
|
+
puts "1.크롬 업데이트 2.프로그램 폴더 내부에 ★tip★-시작시-크롬창이....파일을 열어 드라이버를 교체하세요."
|
43
|
+
chromedriver_path = './chromedriver.exe' # 수동 경로를 인스턴스 변수로 설정
|
44
|
+
Selenium::WebDriver::Chrome::Service.driver_path = chromedriver_path
|
45
|
+
end
|
46
|
+
|
27
47
|
end
|
48
|
+
|
49
|
+
|
28
50
|
def chrome_setup(user_id, proxy)
|
29
51
|
naver_cookie_dir = "C:/naver_cookie"
|
30
52
|
FileUtils.mkdir_p(naver_cookie_dir) unless File.exist?(naver_cookie_dir)
|
31
53
|
if proxy == ''
|
32
|
-
|
54
|
+
|
55
|
+
system(%{"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" https://naver.com/ --remote-debugging-port=9222 --user-data-dir=C:/naver_cookie/#{user_id} --no-first-run --no-default-browser-check --disable-sync})
|
56
|
+
|
33
57
|
else
|
34
|
-
|
58
|
+
|
59
|
+
system(%{"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" https://naver.com/ --remote-debugging-port=9222 --user-data-dir=C:/naver_cookie/#{user_id} --proxy-server=#{proxy.to_s.force_encoding('utf-8').to_s} --no-first-run --no-default-browser-check --disable-sync})
|
60
|
+
|
35
61
|
end
|
36
62
|
end
|
37
63
|
def chrome_start(proxy, user_id)
|
@@ -39,10 +65,12 @@ class Naver
|
|
39
65
|
FileUtils.mkdir_p(naver_cookie_dir) unless File.exist?(naver_cookie_dir)
|
40
66
|
if proxy == ''
|
41
67
|
begin
|
42
|
-
Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
|
43
68
|
options = Selenium::WebDriver::Chrome::Options.new
|
44
69
|
options.add_argument('--no-first-run') # 자동 실행 시 나타나는 "첫 실행" 화면 방지
|
45
|
-
options.add_argument('--disable-extensions') # 확장 프로그램 초기화 화면 방지
|
70
|
+
#options.add_argument('--disable-extensions') # 확장 프로그램 초기화 화면 방지
|
71
|
+
options.add_argument('--disable-sync') # Chrome 동기화 비활성화
|
72
|
+
options.add_argument('--disable-popup-blocking') # 팝업 방지 (로그인 창이 뜨는 경우 대비)
|
73
|
+
options.add_argument('--no-default-browser-check')
|
46
74
|
options.page_load_strategy = :normal
|
47
75
|
options.timeouts = {page_load: 20_000}
|
48
76
|
options.page_load_strategy = 'none'
|
@@ -64,10 +92,13 @@ class Naver
|
|
64
92
|
end
|
65
93
|
else
|
66
94
|
begin
|
67
|
-
Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
|
95
|
+
#Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
|
68
96
|
options = Selenium::WebDriver::Chrome::Options.new
|
69
97
|
options.add_argument('--no-first-run') # 자동 실행 시 나타나는 "첫 실행" 화면 방지
|
70
98
|
options.add_argument('--disable-extensions') # 확장 프로그램 초기화 화면 방지
|
99
|
+
options.add_argument('--disable-sync') # Chrome 동기화 비활성화
|
100
|
+
options.add_argument('--disable-popup-blocking') # 팝업 방지 (로그인 창이 뜨는 경우 대비)
|
101
|
+
options.add_argument('--no-default-browser-check')
|
71
102
|
options.add_argument '--proxy-server='+proxy.to_s.force_encoding('utf-8').to_s
|
72
103
|
options.page_load_strategy = :normal
|
73
104
|
options.timeouts = {page_load: 20_000}
|
@@ -88,10 +119,13 @@ class Naver
|
|
88
119
|
puts e
|
89
120
|
puts 'proxy error...'
|
90
121
|
begin
|
91
|
-
Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
|
122
|
+
#Selenium::WebDriver::Chrome::Service.driver_path = './chromedriver.exe'
|
92
123
|
options = Selenium::WebDriver::Chrome::Options.new
|
93
124
|
options.add_argument('--no-first-run') # 자동 실행 시 나타나는 "첫 실행" 화면 방지
|
94
125
|
options.add_argument('--disable-extensions') # 확장 프로그램 초기화 화면 방지
|
126
|
+
options.add_argument('--disable-sync') # Chrome 동기화 비활성화
|
127
|
+
options.add_argument('--disable-popup-blocking') # 팝업 방지 (로그인 창이 뜨는 경우 대비)
|
128
|
+
options.add_argument('--no-default-browser-check')
|
95
129
|
options.page_load_strategy = :normal
|
96
130
|
options.timeouts = {page_load: 20_000}
|
97
131
|
options.page_load_strategy = 'none'
|
@@ -1256,30 +1290,55 @@ class Naver
|
|
1256
1290
|
|
1257
1291
|
elsif option['타겟블로그'] == 'true'
|
1258
1292
|
@driver.get(blog_url)
|
1259
|
-
|
1260
1293
|
wait = Selenium::WebDriver::Wait.new(:timeout => 20) # 아이프레임 선택
|
1261
1294
|
wait.until { @driver.find_element(:xpath, '//*[@id="mainFrame"]') } # 아이프레임 선택
|
1262
1295
|
sleep(1)
|
1263
1296
|
@driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="mainFrame"]')) # 아이프레임 선택
|
1264
1297
|
sleep(1)
|
1265
|
-
|
1266
1298
|
@driver.find_element(:xpath, '//*[@id="toplistSpanBlind"]').click
|
1267
|
-
sleep(1)
|
1268
|
-
element = @driver.find_element(:xpath, '//*[@class="aline"]')
|
1269
|
-
@driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element)#크롤 이동
|
1270
1299
|
sleep(2)
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1300
|
+
|
1301
|
+
begin
|
1302
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 3)
|
1303
|
+
wait.until { @driver.find_element(:xpath, '//*[@class="aline"]') }
|
1304
|
+
element = @driver.find_element(:xpath, '//*[@class="aline"]')
|
1305
|
+
@driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element)#크롤 이동
|
1306
|
+
sleep(2)
|
1307
|
+
element.send_keys(:return)
|
1308
|
+
sleep(1)
|
1309
|
+
rescue
|
1310
|
+
begin
|
1311
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 3)
|
1312
|
+
wait.until { @driver.find_element(:xpath, '//*[@id="listCountToggle"]') }
|
1313
|
+
element = @driver.find_element(:xpath, '//*[@id="listCountToggle"]')
|
1314
|
+
@driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element)#크롤 이동
|
1315
|
+
sleep(2)
|
1316
|
+
element.send_keys(:return)
|
1317
|
+
sleep(1)
|
1318
|
+
rescue
|
1319
|
+
end
|
1320
|
+
end
|
1274
1321
|
|
1275
|
-
|
1276
|
-
|
1322
|
+
|
1323
|
+
# WebDriverWait과 expected_conditions 가져오기
|
1324
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 5) # 10초 대기
|
1277
1325
|
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1326
|
+
# 요소가 화면에 보일 때까지 대기 후 바로 클릭
|
1327
|
+
wait.until {
|
1328
|
+
el = @driver.find_element(:xpath, '//div[@id="changeListCount"]//a[@data-value="30"]')
|
1329
|
+
el.displayed? # 요소가 화면에 보이는지 확인
|
1330
|
+
}
|
1331
|
+
# 요소 클릭
|
1332
|
+
@driver.find_element(:xpath, '//div[@id="changeListCount"]//a[@data-value="30"]').click
|
1333
|
+
sleep(1)
|
1334
|
+
|
1335
|
+
|
1336
|
+
@driver.switch_to.default_content
|
1337
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => 20) # 아이프레임 선택
|
1338
|
+
wait.until { @driver.find_element(:xpath, '//*[@id="mainFrame"]') } # 아이프레임 선택
|
1339
|
+
sleep(1)
|
1340
|
+
@driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="mainFrame"]')) # 아이프레임 선택
|
1341
|
+
sleep(1)
|
1283
1342
|
|
1284
1343
|
# 수집된 URL을 저장할 배열
|
1285
1344
|
collected_urls = []
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: duo_blog_cafe_comment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: File to Clipboard gem
|
14
14
|
email: mymin26@naver.com
|