test.js
3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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();