Toggle navigation
Toggle navigation
This project
Loading...
Sign in
HyeonJun Jeon
/
Extended-Calendar
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
박시진
2022-05-30 22:30:07 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
dcbd22118364e621361e4e96793c7bd3ced10ff6
dcbd2211
1 parent
64861382
[Modify][Add]subjectGet function
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
110 additions
and
14 deletions
src/libs/E_Campus.js
src/libs/E_Campus_login_getPeed.js
src/libs/E_Campus.js
View file @
dcbd221
...
...
@@ -32,7 +32,10 @@ async function loglogin(id, pw) {
}
else
{
// return [id, pw, `I got data { id:"${id}" pw:"${pw}" }`];
return
peedGet
(
page
);
await
peedGet
(
page
);
await
page
.
waitForTimeout
(
3000
);
await
page
.
click
(
'body > div:nth-child(9) > div.ui-dialog-titlebar.ui-widget-header.ui-corner-all.ui-helper-clearfix > button > span'
);
await
subjectGet
(
page
);
}
}
catch
(
err
){
console
.
log
(
err
)
...
...
@@ -61,7 +64,35 @@ async function peedGet(page) {
return
Promise
.
resolve
(
data
);
}
//function that contact E_Campus
async
function
subjectGet
(
page
)
{
await
page
.
waitForTimeout
(
5000
);
await
page
.
click
(
'#global_nav_courses_link > div.menu-item-icon-container > svg'
)
await
page
.
waitForTimeout
(
5000
);
let
data
=
[];
const
number
=
await
page
.
$$eval
(
"#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li"
,
(
data
)
=>
data
.
length
);
for
(
let
index
=
0
;
index
<
number
;
index
++
)
{
data
.
push
(
await
getOne
(
page
,
index
+
1
));
}
console
.
log
(
Promise
.
resolve
(
data
));
}
async
function
getOne
(
page
,
index
)
{
let
data
=
{};
let
temp
=
await
page
.
$
(
"#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li:nth-child("
+
index
+
") > a"
);
data
.
name
=
await
page
.
evaluate
((
data
)
=>
{
return
data
.
textContent
;
},
temp
);
data
.
link
=
await
page
.
evaluate
((
data
)
=>
{
return
data
.
href
;
},
temp
);
// 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);
// 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);
return
Promise
.
resolve
(
data
);
}
// function that contact E_Campus
// if your account is correct, value = Promise {
// { name: '캘린더 피드를 보려면 클릭하세요.',
// link: 'https://khcanvas.khu.ac.kr/feeds/calendars/user_~~~.ics'
...
...
@@ -81,4 +112,4 @@ try {
login
(
"2021105253"
,
"qtw@@04271"
);
//
export { login };
export
{
login
};
...
...
src/libs/E_Campus_login_getPeed.js
View file @
dcbd221
const
puppeteer
=
require
(
"puppeteer"
);
function
login
(
id
,
pw
)
{
const
crawler
=
async
()
=>
{
//use puppeteer
function
setTimeoutPromise
(
ms
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
setTimeout
(()
=>
resolve
(),
ms
);
});
}
async
function
loglogin
(
id
,
pw
)
{
try
{
//for visibility, headless: false
const
browser
=
await
puppeteer
.
launch
({
headless
:
false
,
args
:[
'--window-size=1920,1080'
]});
const
page
=
await
browser
.
newPage
();
let
information
=
{};
await
page
.
setViewport
({
width
:
1920
,
height
:
1080
...
...
@@ -12,15 +20,34 @@ const puppeteer = require("puppeteer");
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'
);
await
page
.
type
(
"#login_user_id"
,
id
);
await
page
.
type
(
"#login_user_password"
,
pw
);
//press the login button on E_Campus homepage
await
page
.
click
(
'#form1 > div > div.login_btn > a > span'
);
await
page
.
waitForTimeout
(
500
);
await
setTimeoutPromise
(
1000
);
//When login is failed, return [id, pw, message] -> ["", "", "Incorrect~"]
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'
){
return
[
""
,
""
,
"Incorrect user ID or password."
];
}
else
{
// return [id, pw, `I got data { id:"${id}" pw:"${pw}" }`];
await
peedGet
(
page
);
await
page
.
waitForTimeout
(
3000
);
await
page
.
click
(
'body > div:nth-child(9) > div.ui-dialog-titlebar.ui-widget-header.ui-corner-all.ui-helper-clearfix > button > span'
);
await
subjectGet
(
page
);
}
}
catch
(
err
){
console
.
log
(
err
)
}
}
//function that get your peed for your Ecampus calendar
async
function
peedGet
(
page
)
{
await
page
.
waitForTimeout
(
5000
);
// await page.goto('https://khcanvas.khu.ac.kr');
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'
);
await
page
.
waitForTimeout
(
5
00
);
await
page
.
waitForTimeout
(
10
00
);
await
page
.
click
(
'#global_nav_calendar_link > div.menu-item-icon-container > svg'
);
await
page
.
waitForTimeout
(
10000
);
await
page
.
click
(
'#calendar-feed > button'
);
...
...
@@ -34,15 +61,53 @@ const puppeteer = require("puppeteer");
},
temp
);
console
.
log
(
Promise
.
resolve
(
data
));
return
Promise
.
resolve
(
data
);
}
async
function
subjectGet
(
page
)
{
await
page
.
waitForTimeout
(
5000
);
await
page
.
click
(
'#global_nav_courses_link > div.menu-item-icon-container > svg'
)
await
page
.
waitForTimeout
(
5000
);
let
data
=
[];
const
number
=
await
page
.
$$eval
(
"#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li"
,
(
data
)
=>
data
.
length
);
for
(
let
index
=
0
;
index
<
number
;
index
++
)
{
data
.
push
(
await
getOne
(
page
,
index
+
1
));
}
}
catch
(
err
){
console
.
log
(
err
)
}
}
console
.
log
(
Promise
.
resolve
(
data
));
}
crawler
();
async
function
getOne
(
page
,
index
)
{
let
data
=
{};
let
temp
=
await
page
.
$
(
"#nav-tray-portal > span > span > div > div > div > div > div > ul:nth-child(3) > li:nth-child("
+
index
+
") > a"
);
data
.
name
=
await
page
.
evaluate
((
data
)
=>
{
return
data
.
textContent
;
},
temp
);
data
.
link
=
await
page
.
evaluate
((
data
)
=>
{
return
data
.
href
;
},
temp
);
// 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);
// 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);
return
Promise
.
resolve
(
data
);
}
// function that contact E_Campus
// if your account is correct, value = Promise {
// { name: '캘린더 피드를 보려면 클릭하세요.',
// link: 'https://khcanvas.khu.ac.kr/feeds/calendars/user_~~~.ics'
// }
//}
// if your account is incorrect, value = [ '', '', 'Incorrect user ID or password.' ]
async
function
login
(
id
,
pw
)
{
await
setTimeoutPromise
(
1000
);
try
{
// value has the list ["","","Incorrect~"]
const
value
=
await
loglogin
(
id
,
pw
);
console
.
log
(
value
);
}
catch
(
e
)
{
console
.
error
(
e
);
}
}
login
(
"lorem"
,
"lorem"
);
console
.
log
(
login
(
"lorem"
,
"lorem"
));
\ No newline at end of file
login
(
"2021105253"
,
"qtw@@04271"
);
\ No newline at end of file
...
...
Please
register
or
login
to post a comment