Showing
1 changed file
with
29 additions
and
25 deletions
... | @@ -12,16 +12,18 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -12,16 +12,18 @@ exports.run = async (client, msg, args, prefix) => { |
12 | const page = await browser.newPage(); | 12 | const page = await browser.newPage(); |
13 | console.log('Open Browser'); | 13 | console.log('Open Browser'); |
14 | 14 | ||
15 | - // 1. bestpen | 15 | + // 1. 베스트펜 |
16 | - console.log("bestpen crawling"); | 16 | + try { |
17 | - await page .goto('http://www.bestpen.kr'); | 17 | + console.log("bestpen crawling"); |
18 | + await page .goto('http://www.bestpen.kr'); | ||
18 | 19 | ||
19 | - // 검색창으로 이동 & search 검색 | 20 | + // 검색창으로 이동 & search 검색 |
20 | - await page.waitForSelector('#header > div.headerBtm > div > p.searchOpen > i'); | 21 | + await page.waitForSelector('#header > div.headerBtm > div > p.searchOpen > i'); |
21 | - await page .click('#header > div.headerBtm > div > p.searchOpen > i'); | 22 | + await page .click('#header > div.headerBtm > div > p.searchOpen > i'); |
22 | - await page .type('#keyword', search); | 23 | + await page .type('#keyword', search); |
23 | - await page .keyboard.press( "Enter" ); | 24 | + await page .keyboard.press( "Enter" ); |
24 | - // await page.screenshot({ path : "screenshot.png" }); | 25 | + // await page.screenshot({ path : "screenshot.png" }); |
26 | + } catch { ; } // 사이트 링크에 이상이 생겼거나 검색에 문제가 생겼을 경우 프로그램이 종료되는 것을 방지 | ||
25 | 27 | ||
26 | // 검색 결과 가져오기 (최대 4개) | 28 | // 검색 결과 가져오기 (최대 4개) |
27 | var bestpen = ''; | 29 | var bestpen = ''; |
... | @@ -37,10 +39,10 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -37,10 +39,10 @@ exports.run = async (client, msg, args, prefix) => { |
37 | 39 | ||
38 | // 링크 구조상 &search 뒷부분은 제품 링크를 띄우는데 영향을 미치지 않음 | 40 | // 링크 구조상 &search 뒷부분은 제품 링크를 띄우는데 영향을 미치지 않음 |
39 | // -> 글자수 제한(1024)도 있으므로 제거 | 41 | // -> 글자수 제한(1024)도 있으므로 제거 |
40 | - bestpen_link = bestpen_link.slice(0, bestpen_link.indexOf('&search')) | 42 | + bestpen_link = bestpen_link.slice(0, bestpen_link.indexOf('&search')); |
41 | 43 | ||
42 | try { | 44 | try { |
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'); | 45 | + 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'); |
44 | var bestpen_data = await page.evaluate( price => price.textContent, price ); | 46 | var bestpen_data = await page.evaluate( price => price.textContent, price ); |
45 | // console.log("베스트펜 검색 결과 가격 : ", bestpen_data); | 47 | // console.log("베스트펜 검색 결과 가격 : ", bestpen_data); |
46 | } catch { | 48 | } catch { |
... | @@ -48,11 +50,11 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -48,11 +50,11 @@ exports.run = async (client, msg, args, prefix) => { |
48 | bestpen_data = "SOLD OUT"; | 50 | bestpen_data = "SOLD OUT"; |
49 | } | 51 | } |
50 | 52 | ||
51 | - bestpen += `[${bestpen_title}](${bestpen_link}) - ${bestpen_data}` + '\n' | 53 | + bestpen += `[${bestpen_title}](${bestpen_link}) - ${bestpen_data}` + '\n'; |
52 | } catch { | 54 | } catch { |
53 | if (i == 1) { | 55 | if (i == 1) { |
54 | // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 | 56 | // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 |
55 | - bestpen += "검색결과 없음" + '\n' | 57 | + bestpen += "검색결과 없음" + '\n'; |
56 | break; | 58 | break; |
57 | } else { | 59 | } else { |
58 | // 제품 개수가 4개 이하인 경우 | 60 | // 제품 개수가 4개 이하인 경우 |
... | @@ -62,14 +64,16 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -62,14 +64,16 @@ exports.run = async (client, msg, args, prefix) => { |
62 | } | 64 | } |
63 | 65 | ||
64 | // 2. 펜카페 | 66 | // 2. 펜카페 |
65 | - console.log("pencafe crawling"); | 67 | + try { |
66 | - await page .goto('http://www.pencafe.co.kr'); | 68 | + console.log("pencafe crawling"); |
69 | + await page .goto('http://www.pencafe.co.kr'); | ||
67 | 70 | ||
68 | - // search 검색 | 71 | + // search 검색 |
69 | - await page.waitForSelector('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input'); | 72 | + await page.waitForSelector('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input'); |
70 | - await page .type('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input', search); | 73 | + await page .type('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input', search); |
71 | - await page .keyboard.press( "Enter" ); | 74 | + await page .keyboard.press( "Enter" ); |
72 | - // await page.screenshot({ path : "screenshot.png" }); | 75 | + // await page.screenshot({ path : "screenshot.png" }); |
76 | + } catch { ; } // 사이트 링크에 이상이 생겼거나 검색에 문제가 생겼을 경우 프로그램이 종료되는 것을 방지 | ||
73 | 77 | ||
74 | // 검색 결과 가져오기 (최대 4개) | 78 | // 검색 결과 가져오기 (최대 4개) |
75 | var pencafe = ''; | 79 | var pencafe = ''; |
... | @@ -80,9 +84,9 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -80,9 +84,9 @@ exports.run = async (client, msg, args, prefix) => { |
80 | // console.log("펜카페 검색 결과 제품명 : ", pencafe_title); | 84 | // console.log("펜카페 검색 결과 제품명 : ", pencafe_title); |
81 | 85 | ||
82 | // 펜카페 구조상 제품명 앞에 할인률(ex. 17%)이 붙는 경우가 많음 -> 제거 | 86 | // 펜카페 구조상 제품명 앞에 할인률(ex. 17%)이 붙는 경우가 많음 -> 제거 |
83 | - if (pencafe_title.indexOf('(') != -1) { pencafe_title = pencafe_title.slice(pencafe_title.indexOf('%')+1) } | 87 | + if (pencafe_title.indexOf('%') != -1) { pencafe_title = pencafe_title.slice(pencafe_title.indexOf('%')+1); } |
84 | // 펜카페 구조상 제품명 뒤에 사족(ex. (색상선택/금장~~~))이 붙는 경우가 많음 -> 제거 | 88 | // 펜카페 구조상 제품명 뒤에 사족(ex. (색상선택/금장~~~))이 붙는 경우가 많음 -> 제거 |
85 | - if (pencafe_title.indexOf('(') != -1) { pencafe_title = pencafe_title.slice(0, pencafe_title.lastIndexOf('(')) } | 89 | + if (pencafe_title.indexOf('(') != -1) { pencafe_title = pencafe_title.slice(0, pencafe_title.lastIndexOf('(')); } |
86 | 90 | ||
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'); | 91 | var link = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-name > a'); |
88 | var pencafe_link = await page.evaluate( link => link.href, link ); | 92 | var pencafe_link = await page.evaluate( link => link.href, link ); |
... | @@ -90,10 +94,10 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -90,10 +94,10 @@ exports.run = async (client, msg, args, prefix) => { |
90 | 94 | ||
91 | // 링크 구조상 &search 뒷부분은 제품 링크를 띄우는데 영향을 미치지 않음 | 95 | // 링크 구조상 &search 뒷부분은 제품 링크를 띄우는데 영향을 미치지 않음 |
92 | // -> 글자수 제한(1024)도 있으므로 제거 | 96 | // -> 글자수 제한(1024)도 있으므로 제거 |
93 | - pencafe_link = pencafe_link.slice(0, pencafe_link.indexOf('&search')) | 97 | + pencafe_link = pencafe_link.slice(0, pencafe_link.indexOf('&search')); |
94 | 98 | ||
95 | try { | 99 | try { |
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'); | 100 | + var price = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-price > span'); |
97 | var pencafe_data = await page.evaluate( price => price.textContent, price ); | 101 | var pencafe_data = await page.evaluate( price => price.textContent, price ); |
98 | // console.log("펜카페 검색 결과 가격 : ", pencafe_data); | 102 | // console.log("펜카페 검색 결과 가격 : ", pencafe_data); |
99 | } catch { | 103 | } catch { |
... | @@ -101,7 +105,7 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -101,7 +105,7 @@ exports.run = async (client, msg, args, prefix) => { |
101 | pencafe_data = "SOLD OUT"; | 105 | pencafe_data = "SOLD OUT"; |
102 | } | 106 | } |
103 | 107 | ||
104 | - pencafe += `[${pencafe_title}](${pencafe_link}) - ${pencafe_data}` + '\n' | 108 | + pencafe += `[${pencafe_title}](${pencafe_link}) - ${pencafe_data}` + '\n'; |
105 | } catch { | 109 | } catch { |
106 | if (i == 1) { | 110 | if (i == 1) { |
107 | // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 | 111 | // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 | ... | ... |
-
Please register or login to post a comment