Using Puppeteer to access list of banks
To have an automated way of getting the list of question banks and their IDs, I wrote a Javascript using Puppeteer. The set of question banks is shown below:
A view of these from the Inspector is shown below:
The script is:
const puppeteer = require('puppeteer');
const delay = ms => new Promise(res => setTimeout(res, ms));
(async() => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('http://canvas.docker/login/canvas', {waitUntil: 'load'});
console.log(page.url());
// Type our username and password
await page.type('#pseudonym_session_unique_id', 'xxxx');
await page.type('#pseudonym_session_password', 'xxxxx');
// Submit form
await page.click('.Button.Button--login');
delay(3000);
// Wait for to load
await page.goto('http://canvas.docker/courses/2/question_banks', {waitUntil: 'load'});
console.log('FOUND!', page.url());
// Extract the results from the page
const links = await page.evaluate(() => {
const anchors = Array.from(document.querySelectorAll('.question_bank'));
return anchors.map(anchor => anchor.id+','+anchor.querySelector('.title').href+','+anchor.querySelector('.title').text); // textContent
});
console.log(links.join('\n'));
await page.screenshot({path: 'login1.png'});
browser.close();
})();
The output of the node login1.js script is:
http://canvas.docker/login/canvas FOUND! http://canvas.docker/courses/2/question_banks question_bank_blank,http://canvas.docker/courses/2/question_banks/%7B%7B%20id%20%7D%7D,No Name question_bank_2,http://canvas.docker/courses/2/question_banks/2,New question bank question_bank_29,http://canvas.docker/courses/2/question_banks/29,Test bank20 question_bank_31,http://canvas.docker/courses/2/question_banks/31,Test bank21 question_bank_32,http://canvas.docker/courses/2/question_banks/32,Test bank22 question_bank_30,http://canvas.docker/courses/2/question_banks/30,Test bank23 question_bank_1,http://canvas.docker/courses/2/question_banks/1,Unfiled Questions