tsukuba-me
Version:
University of Tsukuba school life utilities. Manaba attend (atmnb) helper, and PaperCut U.T. uploader.
77 lines (69 loc) • 3.06 kB
JavaScript
const { PuppeteerWrapper } = require('./puppeteer-wrapper')
const attendNum = document.getElementById('attend-number')
const attendBtn = document.getElementById('attend-submit')
attendBtn.addEventListener('click', (e) => {
// assert not null
const attendnum = attendNum.value
const feedbackMessage = (text) => { M.toast({html: text, class: 'rounded'}) }
let atmnb = attendManaba(attendnum, feedbackMessage)
atmnb.then((needFill)=>{
if (needFill) {
attendManaba(username, password, attendnum, feedbackMessage, false)
}
})
})
const attendManaba = async(attendnum, messageCallback, isHeadless=true) => {
const pw = new PuppeteerWrapper({headless: isHeadless})
await pw.setUp()
const page = await pw.newPage();
await page.goto('https://atmnb.tsukuba.ac.jp/attend/tsukuba');
await page.type('input[name="code"]', attendnum);
await page.click('input[name="insertdb"]');
await page.waitFor('input, .errmsg');
if (await page.$('div.errmsg')) {
console.log('FAILED: div.errmsg detected.')
const out = await page.evaluate(() => document.querySelector('.errmsg').innerText);
// 無効な出席番号
messageCallback(out);
return null
} else if (await page.$$eval('input', inputs => inputs.length) == 2) {
console.log('INFO: attend number successfully received.');
// 出席番号受領した
// 学籍番号とパスワードを入力
await page.type('input#username', pw.username);
await page.type('input#password', pw.password);
await page.click('button[type="submit"]');
// Wait for the result and show in terminal.
await page.waitFor('.attend-box-body, .form-error'); // wait for .attend-box-body or .errmsg.
if (await page.$('.attend-box-body')) {
console.log('INFO: Successfully authorized.');
// attendbox-buttonがある場合、出席番号以外の
// アンケートや番号回答などが必要
if (await page.$('attendbox-button') && isHeadless) {
return true
} else if (await page.$('attendbox-button') && isHeadless) {
return null
}
// それがなければ、無事出席完了
const out = await page.evaluate(() => document.querySelector('.attend-box-body').innerText);
messageCallback(out);
return null
} else if (await page.$('.form-error')) {
console.log('FAILED: Wrong Username or Password.');
const out = await page.evaluate(() => document.querySelector('.form-error').innerText);
//const out = await page.evaluate(() => document.querySelector('.form-error').textContent);
// 学籍番号またはパスワードが違います
messageCallback(out);
return null
} else {
console.log('Unknown error');
return new Error('Unknown error')
}
} else {
console.log('Unknown error');
return new Error('Unknown error')
}
if (isHeadless) {
br.close()
}
}