test.js 3.88 KB
const express = require("express");
const router = express.Router();
const puppeteer = require("puppeteer")
const { getPeed, getSubjects, login, close } = require("./E_Campus.js");

async function runrun() {
    page = await login("lorem", "lorem");
    await getPeed(page);
    await getSubjects(page);
    Info = await close();
    console.log(Info);
    console.log(Info.subjects)
    
  }


  async function attendanceCheck(subject, code) {
    try {
      //for visibility, headless: false
      browser = await puppeteer.launch({
        headless: false,
        args: [
          "--window-size=1920x1080",
          "--start-maximized",
          "--no-sandbox",
          "--disable-dev-shm-usage",
          "--lang=ko",
        ],
      });
  
      const page = await browser.newPage();
      await page.setViewport({
        width: 1920,
        height: 1080,
      });
      await page.goto(
        "https://info21.khu.ac.kr/com/LoginCtr/login.do?returnurl=https://portal.khu.ac.kr/ksign/index.jsp?ssoGb=ptfol&sso=ok"
      );
      await page.type("#userId", Info.id);
      await page.type("#userPw", Info.pw);
  
      //press the login button on E_Campus homepage
      await Promise.all([
        page.click("#loginFrm > div > div.wrap > div.login_box > div.m_box.idx02.fr > button.btn.loginbtn1"),
        page.waitForNavigation(),
      ]);
      await page.goto(
        "https://portal.khu.ac.kr/haksa/clss/clss/elctCrtf/index.do"
      );
      multipleClick(page);
      
      // await page.type("Selector 입력", code);
      // await page.click("확인버튼 selector");
      result = await checkStatus(page);
      console.log(result);
      
      
    } catch (err) {
      console.log(err);
    }
  }
  


  async function multipleClick(page) {
    let data = [];

    let selector = "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody";
    const number = await page.$$eval(selector, (data) => data.length);
    page.click("#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr.first");
    page.click("#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr.last");
    for (let index = 2; index < number; index++) {
      page.click(`#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr:nth-child("+ ${index} +")`)
    }
  }
  
 async function checkStatus(page) {
  let data = [];
  let selector = "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody";
  const number = await page.$$eval(selector, (data) => data.length);
  
  data.push(await except(page));
  for (let index = 2; index < number; index++) {
    data.push(await getOne(page, index));
  }
  // const promise3 = Promise.resolve(data);
  // promise3.then(value => {
  //   for (let index = 0; index < value.length; index++) {
  //     if (value[index]=="출석완료") {
  //       return "success";
  //     }
  //     else{
  //       return "fail";
  //     }
  //   }
  // })
  return data;
 }
 async function except(page) {
  let data = {};
  let temp = await page.$(
    "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr.first > td.td_btn"
  );
  data.name = await page.evaluate((data) => {
    data.push(data.textContent);
  }, temp);

  let templast = await page.$(
    "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr.last > td.td_btn"
  );
  data.name = await page.evaluate((data) => {
    data.push(data.textContent);
  }, templast);
  return Promise.resolve(data);
}


async function getOne(page, index) {
  let data = {};
  let temp = await page.$(
    "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr:nth-child("+index+ ") > td.td_btn"
  );
  data.name = await page.evaluate((data) => {
    return data.textContent;
  }, temp);
  
  return Promise.resolve(data);
}


async function test() {
  await runrun();
  await attendanceCheck("오픈소스SW개발 00분반", 1234);
}
test();