박시진

[Add]Attendace check module[failed]

...@@ -152,6 +152,7 @@ async function getOne(page, index) { ...@@ -152,6 +152,7 @@ async function getOne(page, index) {
152 152
153 async function close() { 153 async function close() {
154 browser.close(); 154 browser.close();
155 + return Info;
155 } 156 }
156 157
157 158
......
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
......