String15

Add blueblack crawling method

...@@ -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
......