String15

Add pencafe crawling method

...@@ -31,6 +31,7 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -31,6 +31,7 @@ exports.run = async (client, msg, args, prefix) => {
31 var bestpen_link = await page.evaluate( link => link.href, link ); 31 var bestpen_link = await page.evaluate( link => link.href, link );
32 // console.log("베스트펜 검색 링크 : ", bestpen_link); 32 // console.log("베스트펜 검색 링크 : ", bestpen_link);
33 33
34 + try {
34 var price = await page.waitForSelector( "#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child(1) > dd > ul > li.prd-price > p:nth-child(2) > span.price" ); 35 var price = await page.waitForSelector( "#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child(1) > dd > ul > li.prd-price > p:nth-child(2) > span.price" );
35 var bestpen_data = await page.evaluate( price => price.textContent, price ); 36 var bestpen_data = await page.evaluate( price => price.textContent, price );
36 // console.log("베스트펜 검색 결과 가격 : ", bestpen_data); 37 // console.log("베스트펜 검색 결과 가격 : ", bestpen_data);
...@@ -38,6 +39,45 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -38,6 +39,45 @@ exports.run = async (client, msg, args, prefix) => {
38 // 품절이라서 금액정보가 없을 경우 "SOLD OUT"으로 표시 39 // 품절이라서 금액정보가 없을 경우 "SOLD OUT"으로 표시
39 bestpen_data = "SOLD OUT" 40 bestpen_data = "SOLD OUT"
40 } 41 }
42 + } catch {
43 + // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시
44 + bestpen_title = "검색결과 없음"
45 + bestpen_link = ""
46 + bestpen_data = ""
47 + }
48 +
49 + // 2. 펜카페
50 + await page .goto('http://www.pencafe.co.kr/');
51 +
52 + // search 검색
53 + await page .type('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input', search)
54 + await page .keyboard.press( "Enter" );
55 + // await page.screenshot({ path : "screenshot.png" })
56 +
57 + // 검색 결과 가져오기
58 + try {
59 + var title = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child(1) > dd > ul > li.prd-name > a');
60 + var pencafe_title = await page.evaluate( title => title.textContent, title );
61 + console.log("펜카페 검색 결과 제품명 : ", pencafe_title);
62 +
63 + var link = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child(1) > dd > ul > li.prd-name > a');
64 + var pencafe_link = await page.evaluate( link => link.href, link );
65 + console.log("펜카페 검색 링크 : ", pencafe_link);
66 +
67 + try {
68 + var price = await page.waitForSelector( "#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child(1) > dd > ul > li.prd-price > span" );
69 + var pencafe_data = await page.evaluate( price => price.textContent, price );
70 + console.log("펜카페 검색 결과 가격 : ", pencafe_data);
71 + } catch {
72 + // 품절이라서 금액정보가 없을 경우 "SOLD OUT"으로 표시
73 + pencafe_data = "SOLD OUT"
74 + }
75 + } catch {
76 + // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시
77 + pencafe_title = "검색결과 없음"
78 + pencafe_link = ""
79 + pencafe_data = ""
80 + }
41 81
42 // 브라우저 닫기 82 // 브라우저 닫기
43 await browser.close(); 83 await browser.close();
...@@ -49,6 +89,8 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -49,6 +89,8 @@ exports.run = async (client, msg, args, prefix) => {
49 .setColor("E5D49A") 89 .setColor("E5D49A")
50 // 베스트펜 검색 결과 (ex. 제품명(링크) - 금액) 90 // 베스트펜 검색 결과 (ex. 제품명(링크) - 금액)
51 .addField('베스트펜', `[${bestpen_title}](${bestpen_link}) - ${bestpen_data}`) 91 .addField('베스트펜', `[${bestpen_title}](${bestpen_link}) - ${bestpen_data}`)
92 + // 펜카페 검색 결과
93 + .addField('펜카페', `[${pencafe_title}](${pencafe_link}) - ${pencafe_data}`)
52 msg.reply({ embeds: [Commands] }); 94 msg.reply({ embeds: [Commands] });
53 }); 95 });
54 } else { 96 } else {
......