Showing
1 changed file
with
78 additions
and
50 deletions
... | @@ -2,8 +2,8 @@ const Discord = require("discord.js"); | ... | @@ -2,8 +2,8 @@ const Discord = require("discord.js"); |
2 | exports.run = async (client, msg, args, prefix) => { | 2 | exports.run = async (client, msg, args, prefix) => { |
3 | if (args[0]) { // 명령어 뒤에 입력값이 있을 경우 (ex. !<명령어> <채팅>) | 3 | if (args[0]) { // 명령어 뒤에 입력값이 있을 경우 (ex. !<명령어> <채팅>) |
4 | // 검색어 한 문장으로 합치기 | 4 | // 검색어 한 문장으로 합치기 |
5 | - const search = args.join(' ') | 5 | + const search = args.join(' '); |
6 | - // console.log(search) | 6 | + // console.log(search); |
7 | 7 | ||
8 | // 각 사이트별 제품 검색 | 8 | // 각 사이트별 제품 검색 |
9 | const puppeteer = require('puppeteer'); //include Puppeteer Library | 9 | const puppeteer = require('puppeteer'); //include Puppeteer Library |
... | @@ -13,70 +13,98 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -13,70 +13,98 @@ exports.run = async (client, msg, args, prefix) => { |
13 | console.log('Open Browser'); | 13 | console.log('Open Browser'); |
14 | 14 | ||
15 | // 1. bestpen | 15 | // 1. bestpen |
16 | - await page .goto('http://www.bestpen.kr/html/mainm.html'); | 16 | + console.log("bestpen crawling"); |
17 | + await page .goto('http://www.bestpen.kr/index.html'); | ||
17 | 18 | ||
18 | // 검색창으로 이동 & search 검색 | 19 | // 검색창으로 이동 & search 검색 |
19 | - await page .click('#header > div.headerBtm > div > p.searchOpen > i') | 20 | + await page .click('#header > div.headerBtm > div > p.searchOpen > i'); |
20 | - await page .type('#keyword', search) | 21 | + await page .type('#keyword', search); |
21 | await page .keyboard.press( "Enter" ); | 22 | await page .keyboard.press( "Enter" ); |
22 | - // await page.screenshot({ path : "screenshot.png" }) | 23 | + // await page.screenshot({ path : "screenshot.png" }); |
23 | 24 | ||
24 | - // 검색 결과 가져오기 | 25 | + // 검색 결과 가져오기 (최대 4개) |
25 | - try { | 26 | + var bestpen = ''; |
26 | - var title = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child(1) > dd > ul > li.prd-name > a'); | 27 | + for (var i = 1; i <= 4; i++) { |
27 | - var bestpen_title = await page.evaluate( title => title.textContent, title ); | ||
28 | - // console.log("베스트펜 검색 결과 제품명 : ", bestpen_title); | ||
29 | - | ||
30 | - var link = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child(1) > dt > a'); | ||
31 | - var bestpen_link = await page.evaluate( link => link.href, link ); | ||
32 | - // console.log("베스트펜 검색 링크 : ", bestpen_link); | ||
33 | - | ||
34 | try { | 28 | try { |
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" ); | 29 | + var title = await page.waitForSelector('#searchWrap > div > div.item-wrap > div:nth-child(2) > dl:nth-child('+i+') > dd > ul > li.prd-name > a'); |
36 | - var bestpen_data = await page.evaluate( price => price.textContent, price ); | 30 | + var bestpen_title = await page.evaluate( title => title.textContent, title ); |
37 | - // console.log("베스트펜 검색 결과 가격 : ", bestpen_data); | 31 | + // console.log("베스트펜 검색 결과 제품명 : ", bestpen_title); |
32 | + | ||
33 | + 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 | + // console.log("베스트펜 검색 링크 : ", bestpen_link); | ||
36 | + | ||
37 | + 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' ); | ||
39 | + var bestpen_data = await page.evaluate( price => price.textContent, price ); | ||
40 | + // console.log("베스트펜 검색 결과 가격 : ", bestpen_data); | ||
41 | + } catch { | ||
42 | + // 품절이라서 금액정보가 없을 경우 "SOLD OUT"으로 표시 | ||
43 | + bestpen_data = "SOLD OUT"; | ||
44 | + } | ||
45 | + | ||
46 | + bestpen += `[${bestpen_title}](${bestpen_link}) - ${bestpen_data}` + '\n' | ||
38 | } catch { | 47 | } catch { |
39 | - // 품절이라서 금액정보가 없을 경우 "SOLD OUT"으로 표시 | 48 | + if (i == 1) { |
40 | - bestpen_data = "SOLD OUT" | 49 | + // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 |
50 | + bestpen_title = "검색결과 없음"; | ||
51 | + bestpen_link = ""; | ||
52 | + bestpen_data = ""; | ||
53 | + | ||
54 | + bestpen += `[${bestpen_title}](${bestpen_link}) - ${bestpen_data}` + '\n' | ||
55 | + break; | ||
56 | + } else { | ||
57 | + // 제품 개수가 4개 이하인 경우 | ||
58 | + break; | ||
59 | + } | ||
41 | } | 60 | } |
42 | - } catch { | ||
43 | - // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 | ||
44 | - bestpen_title = "검색결과 없음" | ||
45 | - bestpen_link = "" | ||
46 | - bestpen_data = "" | ||
47 | } | 61 | } |
48 | 62 | ||
49 | // 2. 펜카페 | 63 | // 2. 펜카페 |
64 | + console.log("pencafe crawling"); | ||
50 | await page .goto('http://www.pencafe.co.kr/'); | 65 | await page .goto('http://www.pencafe.co.kr/'); |
51 | 66 | ||
52 | // search 검색 | 67 | // search 검색 |
53 | - await page .type('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input', search) | 68 | + await page .type('#header > div.hd_mib > div.hd_sch.f_left > form > fieldset > input', search); |
54 | await page .keyboard.press( "Enter" ); | 69 | await page .keyboard.press( "Enter" ); |
55 | - // await page.screenshot({ path : "screenshot.png" }) | 70 | + // await page.screenshot({ path : "screenshot.png" }); |
56 | 71 | ||
57 | - // 검색 결과 가져오기 | 72 | + // 검색 결과 가져오기 (최대 4개) |
58 | - try { | 73 | + var pencafe = ''; |
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'); | 74 | + for (var i = 1; i <= 4; i++) { |
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 { | 75 | 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" ); | 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'); |
69 | - var pencafe_data = await page.evaluate( price => price.textContent, price ); | 77 | + var pencafe_title = await page.evaluate( title => title.textContent, title ); |
70 | - console.log("펜카페 검색 결과 가격 : ", pencafe_data); | 78 | + // console.log("펜카페 검색 결과 제품명 : ", pencafe_title); |
79 | + | ||
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'); | ||
81 | + var pencafe_link = await page.evaluate( link => link.href, link ); | ||
82 | + // console.log("펜카페 검색 링크 : ", pencafe_link); | ||
83 | + | ||
84 | + 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' ); | ||
86 | + var pencafe_data = await page.evaluate( price => price.textContent, price ); | ||
87 | + // console.log("펜카페 검색 결과 가격 : ", pencafe_data); | ||
88 | + } catch { | ||
89 | + // 품절이라서 금액정보가 없을 경우 "SOLD OUT"으로 표시 | ||
90 | + pencafe_data = "SOLD OUT"; | ||
91 | + } | ||
92 | + | ||
93 | + pencafe += `[${pencafe_title}](${pencafe_link}) - ${pencafe_data}` + '\n' | ||
71 | } catch { | 94 | } catch { |
72 | - // 품절이라서 금액정보가 없을 경우 "SOLD OUT"으로 표시 | 95 | + if (i == 1) { |
73 | - pencafe_data = "SOLD OUT" | 96 | + // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 |
97 | + pencafe_title = "검색결과 없음"; | ||
98 | + pencafe_link = ""; | ||
99 | + pencafe_data = ""; | ||
100 | + | ||
101 | + pencafe += `[${pencafe_title}](${pencafe_link}) - ${pencafe_data}` + '\n' | ||
102 | + break; | ||
103 | + } else { | ||
104 | + // 제품 개수가 4개 이하인 경우 | ||
105 | + break; | ||
106 | + } | ||
74 | } | 107 | } |
75 | - } catch { | ||
76 | - // 제품 정보가 아예 없을 경우 "검색결과 없음"으로 표시 | ||
77 | - pencafe_title = "검색결과 없음" | ||
78 | - pencafe_link = "" | ||
79 | - pencafe_data = "" | ||
80 | } | 108 | } |
81 | 109 | ||
82 | // 브라우저 닫기 | 110 | // 브라우저 닫기 |
... | @@ -88,9 +116,9 @@ exports.run = async (client, msg, args, prefix) => { | ... | @@ -88,9 +116,9 @@ exports.run = async (client, msg, args, prefix) => { |
88 | .setTitle(`${search}에 대한 검색 결과`) | 116 | .setTitle(`${search}에 대한 검색 결과`) |
89 | .setColor("E5D49A") | 117 | .setColor("E5D49A") |
90 | // 베스트펜 검색 결과 (ex. 제품명(링크) - 금액) | 118 | // 베스트펜 검색 결과 (ex. 제품명(링크) - 금액) |
91 | - .addField('베스트펜', `[${bestpen_title}](${bestpen_link}) - ${bestpen_data}`) | 119 | + .addField('베스트펜', `${bestpen}`) |
92 | // 펜카페 검색 결과 | 120 | // 펜카페 검색 결과 |
93 | - .addField('펜카페', `[${pencafe_title}](${pencafe_link}) - ${pencafe_data}`) | 121 | + .addField('펜카페', `${pencafe}`) |
94 | msg.reply({ embeds: [Commands] }); | 122 | msg.reply({ embeds: [Commands] }); |
95 | }); | 123 | }); |
96 | } else { | 124 | } else { | ... | ... |
-
Please register or login to post a comment