HyeonJun Jeon

Merge branch 'E_campus_login' into 'master'

E campus login



See merge request !1
This diff is collapsed. Click to expand it.
...@@ -6,7 +6,9 @@ ...@@ -6,7 +6,9 @@
6 "@testing-library/jest-dom": "^5.16.4", 6 "@testing-library/jest-dom": "^5.16.4",
7 "@testing-library/react": "^13.2.0", 7 "@testing-library/react": "^13.2.0",
8 "@testing-library/user-event": "^13.5.0", 8 "@testing-library/user-event": "^13.5.0",
9 + "express": "^4.18.1",
9 "localforage": "^1.10.0", 10 "localforage": "^1.10.0",
11 + "puppeteer": "^14.1.1",
10 "react": "^18.1.0", 12 "react": "^18.1.0",
11 "react-dom": "^18.1.0", 13 "react-dom": "^18.1.0",
12 "react-router-dom": "^6.3.0", 14 "react-router-dom": "^6.3.0",
......
1 -function login(id, pw) { 1 +const puppeteer = require("puppeteer");
2 - return `I got data { id:"${id}" pw:"${pw}" }`; 2 +//use puppeteer
3 +
4 +function setTimeoutPromise(ms) {
5 + return new Promise((resolve, reject) => {
6 + setTimeout(() => resolve(), ms);
7 + });
8 +}
9 +
10 +async function loglogin(id, pw) {
11 + try{
12 + //for visibility, headless: false
13 + const browser = await puppeteer.launch({headless: false, args:['--window-size=1920,1080']});
14 +
15 + const page = await browser.newPage();
16 + await page.setViewport({
17 + width:1920,
18 + height:1080
19 + })
20 + await page.goto('https://e-campus.khu.ac.kr/xn-sso/login.php?auto_login=&sso_only=&cvs_lgn=&return_url=https%3A%2F%2Fe-campus.khu.ac.kr%2Fxn-sso%2Fgw-cb.php%3Ffrom%3D%26login_type%3Dstandalone%26return_url%3Dhttps%253A%252F%252Fe-campus.khu.ac.kr%252Flogin%252Fcallback');
21 + await page.type("#login_user_id", id);
22 + await page.type("#login_user_password", pw);
23 +
24 + //press the login button on E_Campus homepage
25 + await page.click('#form1 > div > div.login_btn > a > span');
26 + await page.waitForTimeout(500);
27 + await setTimeoutPromise(1000);
28 +
29 + //When login is failed, return [id, pw, message] -> ["", "", "Incorrect~"]
30 + if(page.url() === 'https://e-campus.khu.ac.kr/xn-sso/gw-cb.php?from=&login_type=standalone&return_url=https%3A%2F%2Fe-campus.khu.ac.kr%2Flogin%2Fcallback'){
31 + return ["", "", "Incorrect user ID or password."];
32 + }
33 + else {
34 + // return [id, pw, `I got data { id:"${id}" pw:"${pw}" }`];
35 + await peedGet(page);
36 + await page.waitForTimeout(3000);
37 + await page.click('body > div:nth-child(9) > div.ui-dialog-titlebar.ui-widget-header.ui-corner-all.ui-helper-clearfix > button > span');
38 + await subjectGet(page);
39 + }
40 + }catch(err){
41 + console.log(err)
42 + }
43 +}
44 +
45 +//function that get your peed for your Ecampus calendar
46 +async function peedGet(page) {
47 + await page.waitForTimeout(5000);
48 + // await page.goto('https://khcanvas.khu.ac.kr');
49 + await page.click('#visual > div > div.xn-main-login-container > div:nth-child(2) > div.xn-main-link-wrap.xn-main-lms-link-wrap > a');
50 + await page.waitForTimeout(1000);
51 + await page.click('#global_nav_calendar_link > div.menu-item-icon-container > svg');
52 + await page.waitForTimeout(10000);
53 + await page.click('#calendar-feed > button');
54 + let data = {};
55 + let temp = await page.$('#calendar-feed-box-lower > a');
56 + data.name = await page.evaluate((data) => {
57 + return data.textContent;
58 + }, temp);
59 + data.link = await page.evaluate((data) => {
60 + return data.href;
61 + }, temp);
62 +
63 + console.log(Promise.resolve(data));
64 + return Promise.resolve(data);
65 +}
66 +
67 +
68 +async function subjectGet(page) {
69 + await page.waitForTimeout(5000);
70 + await page.click('#global_nav_courses_link > div.menu-item-icon-container > svg')
71 + await page.waitForTimeout(5000);
72 + let data= [];
73 + const number = await page.$$eval("#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li", (data) => data.length);
74 + for (let index = 0; index < number; index++) {
75 + data.push(await getOne(page, index + 1));
76 + }
77 + console.log(Promise.resolve(data));
78 +}
79 +
80 +async function getOne(page, index) {
81 + let data = {};
82 + let temp = await page.$("#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li:nth-child(" + index + ") > a");
83 + data.name = await page.evaluate((data) => {
84 + return data.textContent;
85 + }, temp);
86 + data.link = await page.evaluate((data) => {
87 + return data.href;
88 + }, temp);
89 + // data.subjectName = await page.$eval("#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li:nth-child(" + index + ") > a", (data) => data.textContent);
90 + // data.subjectLink = await page.$eval("#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li:nth-child(" + index + ") > a", (data) => data.href);
91 + return Promise.resolve(data);
3 } 92 }
4 93
94 +
95 +// function that contact E_Campus
96 +// if your account is correct, value = Promise {
97 +// { name: '캘린더 피드를 보려면 클릭하세요.',
98 +// link: 'https://khcanvas.khu.ac.kr/feeds/calendars/user_~~~.ics'
99 +// }
100 +//}
101 +// if your account is incorrect, value = [ '', '', 'Incorrect user ID or password.' ]
102 +async function login(id, pw) {
103 + await setTimeoutPromise(1000);
104 +try {
105 + // value has the list ["","","Incorrect~"]
106 + const value = await loglogin(id, pw);
107 + console.log(value);
108 +} catch (e) {
109 + console.error(e);
110 + }
111 +}
112 +
113 +login("2021105253", "qtw@@04271");
114 +
5 export { login }; 115 export { login };
......
1 +//The prototype
2 +// const puppeteer = require("puppeteer");
3 +// const crawler = async() => {
4 +// try{
5 +// const browser = await puppeteer.launch({headless: false, args:['--window-size=1920,1080']});
6 +// // for observing the process of login, headless -> false
7 +// const page = await browser.newPage();
8 +// await page.setViewport({
9 +// width:1920,
10 +// height:1080
11 +// })
12 +// await page.goto('https://e-campus.khu.ac.kr/xn-sso/login.php?auto_login=&sso_only=&cvs_lgn=&return_url=https%3A%2F%2Fe-campus.khu.ac.kr%2Fxn-sso%2Fgw-cb.php%3Ffrom%3D%26login_type%3Dstandalone%26return_url%3Dhttps%253A%252F%252Fe-campus.khu.ac.kr%252Flogin%252Fcallback');
13 +// await page.evaluate(() => {
14 +// document.querySelector("#login_user_id").value = //자신의 E_Campus account id
15 +// document.querySelector("#login_user_password").value = // pw
16 +// document.querySelector('#form1 > div > div.login_btn > a > span').click();
17 +// })
18 +// }catch(err){
19 +// console.log(err)
20 +// }
21 +// }
22 +// crawler();
23 +
24 +
25 +//The test on nodejs (evaluate version for using input data)
26 +const puppeteer = require("puppeteer");
27 +//Example for not using user_input_login_information
28 +const id = "lorem";
29 +const pw = "lorem";
30 +const informationList = new Object();
31 +
32 +function setTimeoutPromise(ms) {
33 + return new Promise((resolve, reject) => {
34 + setTimeout(() => resolve(), ms);
35 + });
36 +}
37 +
38 +async function loglogin(id, pw) {
39 + try{
40 + const browser = await puppeteer.launch({headless: false, args:['--window-size=1920,1080']});
41 + const page = await browser.newPage();
42 + await page.setViewport({
43 + width:1920,
44 + height:1080
45 + })
46 + await page.goto('https://e-campus.khu.ac.kr/xn-sso/login.php?auto_login=&sso_only=&cvs_lgn=&return_url=https%3A%2F%2Fe-campus.khu.ac.kr%2Fxn-sso%2Fgw-cb.php%3Ffrom%3D%26login_type%3Dstandalone%26return_url%3Dhttps%253A%252F%252Fe-campus.khu.ac.kr%252Flogin%252Fcallback');
47 + await page.type("#login_user_id", id);
48 + await page.type("#login_user_password", pw);
49 + await page.click('#form1 > div > div.login_btn > a > span');
50 + await page.waitForTimeout(500);
51 + await setTimeoutPromise(1000);
52 +
53 + if(page.url() === 'https://e-campus.khu.ac.kr/xn-sso/gw-cb.php?from=&login_type=standalone&return_url=https%3A%2F%2Fe-campus.khu.ac.kr%2Flogin%2Fcallback'){
54 + return ["", "", "Incorrect user ID or password."];
55 + }
56 + else {
57 + return [id, pw, `I got data { id:"${id}" pw:"${pw}" }`];
58 + }
59 + }catch(err){
60 + console.log(err)
61 + }
62 +}
63 +async function login(id, pw) {
64 + await setTimeoutPromise(1000);
65 + try {
66 + const value = await loglogin(id, pw);
67 + // promise1.then
68 + console.log("Id : "+ value[0] +", password : " + value[1] + ", message : " + value[2]);
69 + return value[2];
70 +
71 +
72 + } catch (e) {
73 + console.error(e);
74 + }
75 +}
76 +
77 +login(id, pw);
78 +//[id : , pw : , message : "Incorrect user ID or password."]
79 +
1 +const puppeteer = require("puppeteer");
2 +//use puppeteer
3 +
4 +function setTimeoutPromise(ms) {
5 + return new Promise((resolve, reject) => {
6 + setTimeout(() => resolve(), ms);
7 + });
8 +}
9 +
10 +async function loglogin(id, pw) {
11 + try{
12 + //for visibility, headless: false
13 + const browser = await puppeteer.launch({headless: false, args:['--window-size=1920,1080']});
14 +
15 + const page = await browser.newPage();
16 + await page.setViewport({
17 + width:1920,
18 + height:1080
19 + })
20 + await page.goto('https://e-campus.khu.ac.kr/xn-sso/login.php?auto_login=&sso_only=&cvs_lgn=&return_url=https%3A%2F%2Fe-campus.khu.ac.kr%2Fxn-sso%2Fgw-cb.php%3Ffrom%3D%26login_type%3Dstandalone%26return_url%3Dhttps%253A%252F%252Fe-campus.khu.ac.kr%252Flogin%252Fcallback');
21 + await page.type("#login_user_id", id);
22 + await page.type("#login_user_password", pw);
23 +
24 + //press the login button on E_Campus homepage
25 + await page.click('#form1 > div > div.login_btn > a > span');
26 + await page.waitForTimeout(500);
27 + await setTimeoutPromise(1000);
28 +
29 + //When login is failed, return [id, pw, message] -> ["", "", "Incorrect~"]
30 + if(page.url() === 'https://e-campus.khu.ac.kr/xn-sso/gw-cb.php?from=&login_type=standalone&return_url=https%3A%2F%2Fe-campus.khu.ac.kr%2Flogin%2Fcallback'){
31 + return ["", "", "Incorrect user ID or password."];
32 + }
33 + else {
34 + // return [id, pw, `I got data { id:"${id}" pw:"${pw}" }`];
35 + await peedGet(page);
36 + await page.waitForTimeout(3000);
37 + await page.click('body > div:nth-child(9) > div.ui-dialog-titlebar.ui-widget-header.ui-corner-all.ui-helper-clearfix > button > span');
38 + await subjectGet(page);
39 + }
40 + }catch(err){
41 + console.log(err)
42 + }
43 +}
44 +
45 +//function that get your peed for your Ecampus calendar
46 +async function peedGet(page) {
47 + await page.waitForTimeout(5000);
48 + // await page.goto('https://khcanvas.khu.ac.kr');
49 + await page.click('#visual > div > div.xn-main-login-container > div:nth-child(2) > div.xn-main-link-wrap.xn-main-lms-link-wrap > a');
50 + await page.waitForTimeout(1000);
51 + await page.click('#global_nav_calendar_link > div.menu-item-icon-container > svg');
52 + await page.waitForTimeout(10000);
53 + await page.click('#calendar-feed > button');
54 + let data = {};
55 + let temp = await page.$('#calendar-feed-box-lower > a');
56 + data.name = await page.evaluate((data) => {
57 + return data.textContent;
58 + }, temp);
59 + data.link = await page.evaluate((data) => {
60 + return data.href;
61 + }, temp);
62 +
63 + console.log(Promise.resolve(data));
64 + return Promise.resolve(data);
65 +}
66 +
67 +
68 +async function subjectGet(page) {
69 + await page.waitForTimeout(5000);
70 + await page.click('#global_nav_courses_link > div.menu-item-icon-container > svg')
71 + await page.waitForTimeout(5000);
72 + let data= [];
73 + const number = await page.$$eval("#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li", (data) => data.length);
74 + for (let index = 0; index < number; index++) {
75 + data.push(await getOne(page, index + 1));
76 + }
77 + console.log(Promise.resolve(data));
78 +}
79 +
80 +async function getOne(page, index) {
81 + let data = {};
82 + let temp = await page.$("#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li:nth-child(" + index + ") > a");
83 + data.name = await page.evaluate((data) => {
84 + return data.textContent;
85 + }, temp);
86 + data.link = await page.evaluate((data) => {
87 + return data.href;
88 + }, temp);
89 + // data.subjectName = await page.$eval("#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li:nth-child(" + index + ") > a", (data) => data.textContent);
90 + // data.subjectLink = await page.$eval("#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li:nth-child(" + index + ") > a", (data) => data.href);
91 + return Promise.resolve(data);
92 +}
93 +
94 +
95 +// function that contact E_Campus
96 +// if your account is correct, value = Promise {
97 +// { name: '캘린더 피드를 보려면 클릭하세요.',
98 +// link: 'https://khcanvas.khu.ac.kr/feeds/calendars/user_~~~.ics'
99 +// }
100 +//}
101 +// if your account is incorrect, value = [ '', '', 'Incorrect user ID or password.' ]
102 +async function login(id, pw) {
103 + await setTimeoutPromise(1000);
104 +try {
105 + // value has the list ["","","Incorrect~"]
106 + const value = await loglogin(id, pw);
107 + console.log(value);
108 +} catch (e) {
109 + console.error(e);
110 + }
111 +}
112 +
113 +login("2021105253", "qtw@@04271");
...\ No newline at end of file ...\ No newline at end of file