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