auction.js 3.34 KB
const puppeteer = require('puppeteer');

//auction_c();

// auction Cart Crawling
async function auction_c(){
  
  // launching headless browser
  const browser = await puppeteer.launch();
  // making a new page
  const page = await browser.newPage();

  //console input id & password
  var args = process.argv;

  var a_id = args[2];
  var a_pw = args[3];

  console.log(args[2] + " " + args[3]);

  // Gmarket login page
  await page.goto('https://memberssl.auction.co.kr/Authenticate/?url=http%3a%2f%2fwww.auction.co.kr%2f&return_value=0');
  // Ading user information
  await page.evaluate((id, pwd) => {
    document.querySelector('#id').value = id;
    document.querySelector('#password').value = pwd;
  }, a_id, a_pw);

  await console.log(a_id,a_pw);
  
  // try login
  await page.click('.btn_login');
  await page.waitForNavigation();

  // goto cart page
  await page.goto('https://cart.auction.co.kr/ko/cart');
  //await page.screenshot({ path: 'auction.png', fullPage:true });

  // container which will hold crawled data [{},{}...]
  let data = [];

  // crawling start! (using getOne and getAll function)
    data = await getAll(page);
  //data.push(await getAll(page)); // data[0][n]

  //logging the result
  for(let index = 0; index < data.length; index++){
  console.log(data[index]);
  }
  
  await browser.close();
  
}



 // Crawling cart informations(object) to data(array)
 async function getAll(page) {
  var data = [];

  //const number = await page.$$eval("#cart_list > ol > li:nth-child(1) > div.cart--basket_body > div > ul > li", (data) => data.length);
  const number = await page.$$eval("#cart__body > div > div.box__cart-list > ul > li", (data) => data.length);
  // counting the number of the box
  for (let index = 0; index < number; index++) {
    data.push(await getOne(page, index + 1));
      // pushing to the array

  }

  return Promise.resolve(data);
}


// Crawling cart information to data(object)
async function getOne(page, index) {

  var data = {};

  // this is example code
  //data.programPeriod = await page.$eval("#iph_content > div > div.list_type_h1.web_view.mt3 > table > tbody > tr:nth-child(" + index + ") > td:nth-child(5)", (data) => data.textContent);

  // product name
  data.prd_name = await page.$eval("#cart__body > div > div.box__cart-list > ul > li:nth-child(" + index + ") > div > div.box__group-seller-body > div > div.box__group-item > ul > li > div > div.box__item-info > dl > dd > div.box__title > a > span", data => data.textContent);
  // product price
  data.prd_price = await page.$eval("#cart__body > div > div.box__cart-list > ul > li:nth-child(" + index + ") > div > div.box__group-seller-body > div > div.box__group-item > ul > li > div > div.box__item-info > dl > dd > div.box__unit-price > div > span > strong", data => data.textContent);
  // product link
  data.prd_link = await page.$eval("#cart__body > div > div.box__cart-list > ul > li:nth-child(" + index + ") > div > div.box__group-seller-body > div > div.box__group-item > ul > li > div > div.box__item-info > dl > dd > div.box__title > a", data => data.href);
  // product image source
  data.prd_img = await page.$eval("#cart__body > div > div.box__cart-list > ul > li:nth-child(" + index + ") > div > div.box__group-seller-body > div > div.box__group-item > ul > li > div > div.box__item-img > a > img", data => data.src);
  // not yet

  return Promise.resolve(data);
}