atam
Version:
atcoder on terminal
38 lines (29 loc) • 1.28 kB
JavaScript
const { spawn } = require('child_process');
const color = require('./message_color');
const consts = require('./consts');
const utils = require('./utils');
const submissionsUrl = 'submissions/me';
const baseUrl = `${consts.atcoderUrl}/contests/`;
const submit = async (loginedPage, prob, task, lang, sourceCode) => {
const submitUrl = `${baseUrl}${prob}/submit`;
const page = loginedPage;
await utils.waitFor(page, p => p.goto(submitUrl));
await page.select('select[name="data.TaskScreenName"]', task);
await page.select('select[name="data.LanguageId"]', lang);
await page.click('button.btn-toggle-editor');
await page.type('textarea[name="sourceCode"]', sourceCode);
await utils.waitFor(page, p => p.click('#submit'));
if ((await page.url()).endsWith(submissionsUrl)) {
console.log(color.success('提出が完了しました'));
const sids = await page.evaluate(
item => item.getAttribute('data-id'),
await page.waitForSelector('.submission-score'),
);
const proc = spawn('node', [`${__dirname}/result_announcer.js`, sids, prob], { stdio: 'inherit' });
proc.unref();
} else {
console.log(color.error('提出できませんでした'));
}
console.log(`url: ${await page.url()}`);
};
exports.submit = submit;