String15

Update the resulting design (character limit, etc.)

...@@ -14,9 +14,10 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -14,9 +14,10 @@ exports.run = async (client, msg, args, prefix) => {
14 14
15 // 1. bestpen 15 // 1. bestpen
16 console.log("bestpen crawling"); 16 console.log("bestpen crawling");
17 - await page .goto('http://www.bestpen.kr/index.html'); 17 + await page .goto('http://www.bestpen.kr');
18 18
19 // 검색창으로 이동 & search 검색 19 // 검색창으로 이동 & search 검색
20 + await page.waitForSelector('#header > div.headerBtm > div > p.searchOpen > i');
20 await page .click('#header > div.headerBtm > div > p.searchOpen > i'); 21 await page .click('#header > div.headerBtm > div > p.searchOpen > i');
21 await page .type('#keyword', search); 22 await page .type('#keyword', search);
22 await page .keyboard.press( "Enter" ); 23 await page .keyboard.press( "Enter" );
...@@ -33,9 +34,13 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -33,9 +34,13 @@ exports.run = async (client, msg, args, prefix) => {
33 var link = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dt > a'); 34 var link = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dt > a');
34 var bestpen_link = await page.evaluate( link => link.href, link ); 35 var bestpen_link = await page.evaluate( link => link.href, link );
35 // console.log("베스트펜 검색 링크 : ", bestpen_link); 36 // console.log("베스트펜 검색 링크 : ", bestpen_link);
37 +
38 + // 링크 구조상 &search 뒷부분은 제품 링크를 띄우는데 영향을 미치지 않음
39 + // -> 글자수 제한(1024)도 있으므로 제거
40 + bestpen_link = bestpen_link.slice(0, bestpen_link.indexOf('&search'))
36 41
37 try { 42 try {
38 - var price = await page.waitForSelector( '#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-price > p:nth-child(2) > span.price' ); 43 + var price = await page.waitForSelector( '#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-price > p:nth-child(2) > span.price');
39 var bestpen_data = await page.evaluate( price => price.textContent, price ); 44 var bestpen_data = await page.evaluate( price => price.textContent, price );
40 // console.log("베스트펜 검색 결과 가격 : ", bestpen_data); 45 // console.log("베스트펜 검색 결과 가격 : ", bestpen_data);
41 } catch { 46 } catch {
...@@ -47,11 +52,7 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -47,11 +52,7 @@ exports.run = async (client, msg, args, prefix) => {
47 } catch { 52 } catch {
48 if (i == 1) { 53 if (i == 1) {
49 // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 54 // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시
50 - bestpen_title = "검색결과 없음"; 55 + bestpen += "검색결과 없음" + '\n'
51 - bestpen_link = "";
52 - bestpen_data = "";
53 -
54 - bestpen += `[${bestpen_title}](${bestpen_link}) - ${bestpen_data}` + '\n'
55 break; 56 break;
56 } else { 57 } else {
57 // 제품 개수가 4개 이하인 경우 58 // 제품 개수가 4개 이하인 경우
...@@ -62,9 +63,10 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -62,9 +63,10 @@ exports.run = async (client, msg, args, prefix) => {
62 63
63 // 2. 펜카페 64 // 2. 펜카페
64 console.log("pencafe crawling"); 65 console.log("pencafe crawling");
65 - await page .goto('http://www.pencafe.co.kr/'); 66 + await page .goto('http://www.pencafe.co.kr');
66 67
67 // search 검색 68 // search 검색
69 + await page.waitForSelector('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input');
68 await page .type('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input', search); 70 await page .type('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input', search);
69 await page .keyboard.press( "Enter" ); 71 await page .keyboard.press( "Enter" );
70 // await page.screenshot({ path : "screenshot.png" }); 72 // await page.screenshot({ path : "screenshot.png" });
...@@ -76,13 +78,22 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -76,13 +78,22 @@ exports.run = async (client, msg, args, prefix) => {
76 var title = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-name > a'); 78 var title = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-name > a');
77 var pencafe_title = await page.evaluate( title => title.textContent, title ); 79 var pencafe_title = await page.evaluate( title => title.textContent, title );
78 // console.log("펜카페 검색 결과 제품명 : ", pencafe_title); 80 // console.log("펜카페 검색 결과 제품명 : ", pencafe_title);
81 +
82 + // 펜카페 구조상 제품명 앞에 할인률(ex. 17%)이 붙는 경우가 많음 -> 제거
83 + if (pencafe_title.indexOf('(') != -1) { pencafe_title = pencafe_title.slice(pencafe_title.indexOf('%')+1) }
84 + // 펜카페 구조상 제품명 뒤에 사족(ex. (색상선택/금장~~~))이 붙는 경우가 많음 -> 제거
85 + if (pencafe_title.indexOf('(') != -1) { pencafe_title = pencafe_title.slice(0, pencafe_title.lastIndexOf('(')) }
79 86
80 var link = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-name > a'); 87 var link = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-name > a');
81 var pencafe_link = await page.evaluate( link => link.href, link ); 88 var pencafe_link = await page.evaluate( link => link.href, link );
82 // console.log("펜카페 검색 링크 : ", pencafe_link); 89 // console.log("펜카페 검색 링크 : ", pencafe_link);
90 +
91 + // 링크 구조상 &search 뒷부분은 제품 링크를 띄우는데 영향을 미치지 않음
92 + // -> 글자수 제한(1024)도 있으므로 제거
93 + pencafe_link = pencafe_link.slice(0, pencafe_link.indexOf('&search'))
83 94
84 try { 95 try {
85 - var price = await page.waitForSelector( '#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-price > span' ); 96 + var price = await page.waitForSelector( '#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-price > span');
86 var pencafe_data = await page.evaluate( price => price.textContent, price ); 97 var pencafe_data = await page.evaluate( price => price.textContent, price );
87 // console.log("펜카페 검색 결과 가격 : ", pencafe_data); 98 // console.log("펜카페 검색 결과 가격 : ", pencafe_data);
88 } catch { 99 } catch {
...@@ -94,11 +105,7 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -94,11 +105,7 @@ exports.run = async (client, msg, args, prefix) => {
94 } catch { 105 } catch {
95 if (i == 1) { 106 if (i == 1) {
96 // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 107 // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시
97 - pencafe_title = "검색결과 없음"; 108 + pencafe += "검색결과 없음" + '\n'
98 - pencafe_link = "";
99 - pencafe_data = "";
100 -
101 - pencafe += `[${pencafe_title}](${pencafe_link}) - ${pencafe_data}` + '\n'
102 break; 109 break;
103 } else { 110 } else {
104 // 제품 개수가 4개 이하인 경우 111 // 제품 개수가 4개 이하인 경우
...@@ -116,11 +123,14 @@ exports.run = async (client, msg, args, prefix) => { ...@@ -116,11 +123,14 @@ exports.run = async (client, msg, args, prefix) => {
116 .setTitle(`${search}에 대한 검색 결과`) 123 .setTitle(`${search}에 대한 검색 결과`)
117 .setColor("E5D49A") 124 .setColor("E5D49A")
118 // 베스트펜 검색 결과 (ex. 제품명(링크) - 금액) 125 // 베스트펜 검색 결과 (ex. 제품명(링크) - 금액)
119 - .addField('베스트펜', `${bestpen}`) 126 + .addField('베스트펜', `${bestpen.slice(0, 1023)}`)
120 // 펜카페 검색 결과 127 // 펜카페 검색 결과
121 - .addField('펜카페', `${pencafe}`) 128 + .addField('펜카페', `${pencafe.slice(0, 1023)}`)
122 msg.reply({ embeds: [Commands] }); 129 msg.reply({ embeds: [Commands] });
123 }); 130 });
131 +
132 + // 검색 대기 시간이 길어질 수 있으므로 사용자에게 진행상황을 알려줄 필요가 있다
133 + msg.reply("검색중 ...");
124 } else { 134 } else {
125 msg.reply("검색어가 없습니다. 검색어를 추가해서 다시 입력해주세요."); 135 msg.reply("검색어가 없습니다. 검색어를 추가해서 다시 입력해주세요.");
126 } 136 }
......