Showing
2 changed files
with
124 additions
and
4 deletions
| 1 | const express = require("express"); | 1 | const express = require("express"); |
| 2 | const router = express.Router(); | 2 | const router = express.Router(); |
| 3 | - | 3 | +const puppeteer = require("puppeteer") |
| 4 | const { getPeed, getSubjects, login, close } = require("./E_Campus.js"); | 4 | const { getPeed, getSubjects, login, close } = require("./E_Campus.js"); |
| 5 | 5 | ||
| 6 | async function runrun() { | 6 | async function runrun() { |
| 7 | page = await login("lorem", "lorem"); | 7 | page = await login("lorem", "lorem"); |
| 8 | await getPeed(page); | 8 | await getPeed(page); |
| 9 | await getSubjects(page); | 9 | await getSubjects(page); |
| 10 | - await close(); | 10 | + Info = await close(); |
| 11 | console.log(Info); | 11 | console.log(Info); |
| 12 | console.log(Info.subjects) | 12 | console.log(Info.subjects) |
| 13 | 13 | ||
| 14 | } | 14 | } |
| 15 | - runrun(); | ||
| 16 | - | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 15 | + | ||
| 16 | + | ||
| 17 | + async function attendanceCheck(subject, code) { | ||
| 18 | + try { | ||
| 19 | + //for visibility, headless: false | ||
| 20 | + browser = await puppeteer.launch({ | ||
| 21 | + headless: false, | ||
| 22 | + args: [ | ||
| 23 | + "--window-size=1920x1080", | ||
| 24 | + "--start-maximized", | ||
| 25 | + "--no-sandbox", | ||
| 26 | + "--disable-dev-shm-usage", | ||
| 27 | + "--lang=ko", | ||
| 28 | + ], | ||
| 29 | + }); | ||
| 30 | + | ||
| 31 | + const page = await browser.newPage(); | ||
| 32 | + await page.setViewport({ | ||
| 33 | + width: 1920, | ||
| 34 | + height: 1080, | ||
| 35 | + }); | ||
| 36 | + await page.goto( | ||
| 37 | + "https://info21.khu.ac.kr/com/LoginCtr/login.do?returnurl=https://portal.khu.ac.kr/ksign/index.jsp?ssoGb=ptfol&sso=ok" | ||
| 38 | + ); | ||
| 39 | + await page.type("#userId", Info.id); | ||
| 40 | + await page.type("#userPw", Info.pw); | ||
| 41 | + | ||
| 42 | + //press the login button on E_Campus homepage | ||
| 43 | + await Promise.all([ | ||
| 44 | + page.click("#loginFrm > div > div.wrap > div.login_box > div.m_box.idx02.fr > button.btn.loginbtn1"), | ||
| 45 | + page.waitForNavigation(), | ||
| 46 | + ]); | ||
| 47 | + await page.goto( | ||
| 48 | + "https://portal.khu.ac.kr/haksa/clss/clss/elctCrtf/index.do" | ||
| 49 | + ); | ||
| 50 | + multipleClick(page); | ||
| 51 | + | ||
| 52 | + // await page.type("Selector 입력", code); | ||
| 53 | + // await page.click("확인버튼 selector"); | ||
| 54 | + result = await checkStatus(page); | ||
| 55 | + console.log(result); | ||
| 56 | + | ||
| 57 | + | ||
| 58 | + } catch (err) { | ||
| 59 | + console.log(err); | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + | ||
| 64 | + | ||
| 65 | + async function multipleClick(page) { | ||
| 66 | + let data = []; | ||
| 67 | + | ||
| 68 | + let selector = "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody"; | ||
| 69 | + const number = await page.$$eval(selector, (data) => data.length); | ||
| 70 | + page.click("#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr.first"); | ||
| 71 | + page.click("#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr.last"); | ||
| 72 | + for (let index = 2; index < number; index++) { | ||
| 73 | + page.click(`#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr:nth-child("+ ${index} +")`) | ||
| 74 | + } | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + async function checkStatus(page) { | ||
| 78 | + let data = []; | ||
| 79 | + let selector = "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody"; | ||
| 80 | + const number = await page.$$eval(selector, (data) => data.length); | ||
| 81 | + | ||
| 82 | + data.push(await except(page)); | ||
| 83 | + for (let index = 2; index < number; index++) { | ||
| 84 | + data.push(await getOne(page, index)); | ||
| 85 | + } | ||
| 86 | + // const promise3 = Promise.resolve(data); | ||
| 87 | + // promise3.then(value => { | ||
| 88 | + // for (let index = 0; index < value.length; index++) { | ||
| 89 | + // if (value[index]=="출석완료") { | ||
| 90 | + // return "success"; | ||
| 91 | + // } | ||
| 92 | + // else{ | ||
| 93 | + // return "fail"; | ||
| 94 | + // } | ||
| 95 | + // } | ||
| 96 | + // }) | ||
| 97 | + return data; | ||
| 98 | + } | ||
| 99 | + async function except(page) { | ||
| 100 | + let data = {}; | ||
| 101 | + let temp = await page.$( | ||
| 102 | + "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr.first > td.td_btn" | ||
| 103 | + ); | ||
| 104 | + data.name = await page.evaluate((data) => { | ||
| 105 | + data.push(data.textContent); | ||
| 106 | + }, temp); | ||
| 107 | + | ||
| 108 | + let templast = await page.$( | ||
| 109 | + "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr.last > td.td_btn" | ||
| 110 | + ); | ||
| 111 | + data.name = await page.evaluate((data) => { | ||
| 112 | + data.push(data.textContent); | ||
| 113 | + }, templast); | ||
| 114 | + return Promise.resolve(data); | ||
| 115 | +} | ||
| 116 | + | ||
| 117 | + | ||
| 118 | +async function getOne(page, index) { | ||
| 119 | + let data = {}; | ||
| 120 | + let temp = await page.$( | ||
| 121 | + "#baseForm > div:nth-child(3) > div.table_wrap.pc_view > table > tbody > tr:nth-child("+index+ ") > td.td_btn" | ||
| 122 | + ); | ||
| 123 | + data.name = await page.evaluate((data) => { | ||
| 124 | + return data.textContent; | ||
| 125 | + }, temp); | ||
| 126 | + | ||
| 127 | + return Promise.resolve(data); | ||
| 128 | +} | ||
| 129 | + | ||
| 130 | + | ||
| 131 | +async function test() { | ||
| 132 | + await runrun(); | ||
| 133 | + await attendanceCheck("오픈소스SW개발 00분반", 1234); | ||
| 134 | +} | ||
| 135 | +test(); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment