Showing
1 changed file
with
52 additions
and
0 deletions
... | @@ -118,6 +118,56 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -118,6 +118,56 @@ exports.run = async (client, msg, args, prefix) => { |
118 | } | 118 | } |
119 | } | 119 | } |
120 | 120 | ||
121 | + // 3. 블루블랙 | ||
122 | + try { | ||
123 | + console.log("blueblack crawling"); | ||
124 | + await page .goto('https://blueblack.co.kr'); | ||
125 | + | ||
126 | + // search 검색 | ||
127 | + await page.waitForSelector('#keyword'); | ||
128 | + await page .type('#keyword', search); | ||
129 | + await page .keyboard.press( "Enter" ); | ||
130 | + // await page.screenshot({ path : "screenshot.png" }); | ||
131 | + } catch { ; } // 사이트 링크에 이상이 생겼거나 검색에 문제가 생겼을 경우 프로그램이 종료되는 것을 방지 | ||
132 | + | ||
133 | + // 검색 결과 가져오기 (최대 4개) | ||
134 | + var blueblack = ''; | ||
135 | + for (var i = 1; i <= 4; i++) { | ||
136 | + try { | ||
137 | + var title = await page.waitForSelector('#contents > div:nth-child(4) > ul > li:nth-child('+i+') > div.description > p.name > a > span:nth-child(2)'); | ||
138 | + var blueblack_title = await page.evaluate( title => title.textContent, title ); | ||
139 | + // console.log("블루블랙 검색 결과 제품명 : ", blueblack_title); | ||
140 | + | ||
141 | + var link = await page.waitForSelector('#contents > div:nth-child(4) > ul > li:nth-child('+i+') > div.description > p.name > a'); | ||
142 | + var blueblack_link = await page.evaluate( link => link.href, link ); | ||
143 | + // console.log("블루블랙 검색 링크 : ", blueblack_link); | ||
144 | + | ||
145 | + var price = await page.waitForSelector('#contents > div:nth-child(4) > ul > li:nth-child('+i+') > div.description > ul > li:nth-child(3) > span:nth-child(2)'); | ||
146 | + var blueblack_data = await page.evaluate( price => price.textContent, price ); | ||
147 | + // console.log("블루블랙 검색 결과 가격 : ", blueblack_data); | ||
148 | + | ||
149 | + try { | ||
150 | + // 품절 아이콘이 있는지 확인 | ||
151 | + await page.$eval('#contents > div:nth-child(4) > ul > li:nth-child('+i+') > div.description > div.status > div > img', element => { | ||
152 | + return element.getAttribute("src"); | ||
153 | + }); | ||
154 | + | ||
155 | + blueblack_data = 'SOLD OUT' | ||
156 | + } catch { ; } | ||
157 | + | ||
158 | + blueblack += `[${blueblack_title}](${blueblack_link}) - ${blueblack_data}` + '\n'; | ||
159 | + } catch { | ||
160 | + if (i == 1) { | ||
161 | + // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 | ||
162 | + blueblack += "검색결과 없음" + '\n' | ||
163 | + break; | ||
164 | + } else { | ||
165 | + // 제품 개수가 4개 이하인 경우 | ||
166 | + break; | ||
167 | + } | ||
168 | + } | ||
169 | + } | ||
170 | + | ||
121 | // 브라우저 닫기 | 171 | // 브라우저 닫기 |
122 | await browser.close(); | 172 | await browser.close(); |
123 | console.log('Browser Closed'); | 173 | console.log('Browser Closed'); |
... | @@ -130,6 +180,8 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -130,6 +180,8 @@ exports.run = async (client, msg, args, prefix) => { |
130 | .addField('베스트펜', `${bestpen.slice(0, 1023)}`) | 180 | .addField('베스트펜', `${bestpen.slice(0, 1023)}`) |
131 | // 펜카페 검색 결과 | 181 | // 펜카페 검색 결과 |
132 | .addField('펜카페', `${pencafe.slice(0, 1023)}`) | 182 | .addField('펜카페', `${pencafe.slice(0, 1023)}`) |
183 | + // 블루블랙 검색 결과 | ||
184 | + .addField('블루블랙', `${blueblack.slice(0, 1023)}`) | ||
133 | msg.reply({ embeds: [Commands] }); | 185 | msg.reply({ embeds: [Commands] }); |
134 | }); | 186 | }); |
135 | 187 | ... | ... |
-
Please register or login to post a comment