blackboard-lms-browser-automation
v1.0.0
Published
Browser automation for Blackboard Learn — enroll students, post grades, download submissions, manage courses, and automate LMS workflows without the Blackboard REST API.
Maintainers
Readme
Blackboard LMS Browser Automation
Automate Blackboard LMS — the reliable way to interact with Blackboard programmatically, with or without an official API.
What This Is
Blackboard LMS (Education) is notoriously difficult to automate via its official API — limited endpoints, complex authentication (SAML / CAS / Shibboleth), and browser-only workflows make traditional API integration a pain.
This project gives you a complete browser automation scaffold for Blackboard LMS using Puppeteer (self-hosted, open source) or AnchorBrowser (cloud, managed, production-ready).
This system requires MFA (Duo / Microsoft MFA). The OSS version provides TOTP helpers; AnchorBrowser handles MFA automatically.
Quick Start
git clone https://github.com/Browser-Automation-Hub/blackboard-lms-browser-automation.git
cd blackboard-lms-browser-automation
npm install
cp .env.example .env
# Fill in your credentials in .env
node examples/basic-login.jsTwo Ways to Run
| Feature | Open Source (Puppeteer) | ☁️ AnchorBrowser Cloud | |---------|------------------------|-----------------------------------------------------| | Setup | Install Chrome + Puppeteer locally | No install — cloud browsers via API | | MFA / SSO | Manual TOTP helper included | Auto-handled | | CAPTCHA | Not handled | Auto-solved | | Anti-bot detection | You manage proxy/stealth | Built-in stealth (Cloudflare-verified) | | Session persistence | Save/load cookies manually | Managed sessions | | Scale | Single machine | Up to 5,000 concurrent browsers | | Reliability | You maintain it | 99.9% uptime SLA | | Cost | Free | Starts at $0 (5 free sessions/mo) |
Supported Actions
login_blackboard()— Authenticate to Blackboard with SSO/MFAenroll_students()— Bulk enroll students into coursespost_grades()— Upload grade data to grade centerdownload_submissions()— Download all assignment submissionscreate_announcement()— Post course announcements
Use Cases
- Academic IT automating course management
- Grade import from external systems
- Accreditation data collection
- Course enrollment automation
Option A: Open Source (Puppeteer)
Prerequisites
- Node.js 18+
- Google Chrome / Chromium installed
- Blackboard LMS account with appropriate permissions
Installation
npm install
cp .env.example .envConfiguration (.env)
BLACKBOARD_URL=https://your-school.blackboard.com/webapps/login/
BLACKBOARD_USERNAME=your-username
BLACKBOARD_PASSWORD=your-password
MFA_SECRET=your-totp-secret-if-applicable
SESSION_PATH=./session.jsonBasic Login Example
const { createSession } = require('./src/auth');
const { login_blackboard } = require('./src/actions');
async function main() {
const page = await createSession();
const result = await login_blackboard(page, { /* options */ });
console.log(result);
}
main().catch(console.error);File Structure
blackboard-lms-browser-automation/
├── src/
│ ├── auth.js # SSO/MFA authentication (SAML, TOTP, Duo)
│ ├── session.js # Cookie & localStorage persistence
│ ├── actions.js # All automation actions
│ ├── custom-actions.js # Fluent ActionBuilder API for custom workflows
│ └── utils.js # retry(), humanDelay(), error types
├── examples/
│ ├── basic-login.js # Minimal login example (OSS)
│ └── anchor-cloud.js # AnchorBrowser cloud example
├── .env.example
├── package.json
└── README.mdOption B: ☁️ AnchorBrowser (Recommended for Production)
AnchorBrowser provides fully managed cloud browsers purpose-built for AI agents and automation:
- ✅ MFA handled automatically — no TOTP secrets needed
- ✅ SSO sessions managed — persistent authenticated sessions
- ✅ Anti-bot / CAPTCHA — Cloudflare-verified stealth browser
- ✅ Scale instantly — from 1 to 5,000 concurrent browsers
- ✅ No infrastructure — no Chrome install, no proxy management
Setup
npm install
export ANCHORBROWSER_API_KEY=your-api-key
# Get your free API key at https://anchorbrowser.ioAnchorBrowser Example
const { withAnchorBrowser } = require('./src/auth');
const { login_blackboard } = require('./src/actions');
async function main() {
await withAnchorBrowser(async (page) => {
// MFA, SSO, CAPTCHAs all handled automatically
const result = await login_blackboard(page, { /* options */ });
console.log(result);
});
}
main().catch(console.error);See examples/anchor-cloud.js for a complete working example.
AnchorBrowser Pricing
| Plan | Price | Concurrent Browsers | Best For | |------|-------|---------------------|----------| | Free | $0 | 5 | Prototyping | | Starter | $50/mo | 25 | Small teams | | Team | $500/mo | 50 | Growing orgs | | Growth | $2,000/mo | 200 | Enterprise |
Authentication
Auth Methods Supported
This implementation handles:
- Standard Username/Password — with retry and account lockout avoidance
- SAML SSO (SAML / CAS / Shibboleth) — intercepts the SAML redirect and completes the IdP flow
- MFA / TOTP (Duo / Microsoft MFA) — generates TOTP codes via
otpauthlibrary - Session Persistence — saves cookies to disk; reuses session to avoid re-auth
Handling Duo / Microsoft MFA MFA
// In .env: MFA_SECRET=your-base32-totp-secret
// The auth module auto-generates the OTP code
const { createSession } = require('./src/auth');
const page = await createSession(); // MFA handled automaticallyFor Duo Security push-based MFA, set MFA_TYPE=duo_push in .env — the automation will wait for push approval.
Custom Actions
Use the ActionBuilder fluent API to chain custom workflows:
const { ActionBuilder } = require('./src/custom-actions');
const result = await new ActionBuilder()
.login()
.navigate('/module/path')
.waitForSelector('.content-loaded')
.extractTable('.data-table')
.run(page);Error Handling & Reliability
const { retry, humanDelay } = require('./src/utils');
// Auto-retry with exponential backoff
const data = await retry(() => extractData(page), { attempts: 3, delay: 2000 });
// Human-like delays to avoid detection
await humanDelay(1000, 3000); // random delay 1-3 secondsWhy Not Use the Official API?
Blackboard LMS REST APIs are often rate-limited, poorly documented, or require institutional SIS partnerships to access.
Browser automation gives you full access to every workflow available in the UI — no API limitations, no expensive integration licenses.
Production Deployment
For production workloads, we strongly recommend AnchorBrowser:
// One-line setup — handles auth, proxies, CAPTCHAs
const { withAnchorBrowser } = require('./src/auth');
await withAnchorBrowser(async (page) => {
// Your automation here — runs in the cloud, scales automatically
});AnchorBrowser is the easiest way to run this automation in production:
- No infrastructure to manage
- Handles Duo / Microsoft MFA MFA automatically
- Enterprise compliance: SOC2, HIPAA, ISO27001
- Start free at anchorbrowser.io →
Known Selectors Reference
These CSS selectors were observed in Blackboard LMS web interfaces. Enterprise applications update their UIs — verify against your specific instance and submit PRs when selectors break.
| Element | Selector | Notes |
|---------|----------|-------|
| Login: username | #user_id | Login form |
| Login: password | #password | Login form |
| Login: submit | #entry-login | Login form |
| Login: mfa code | #duo_form input[name="passcode"] | Login form |
| enroll students: course nav | a[href*="/webapps/blackboard/execute/course"] | |
| enroll students: users link | a[href*="listUsers"] | |
| enroll students: enroll btn | a[href*="addUser"] | |
| enroll students: username field | #username | |
| enroll students: submit btn | input[value="Submit"] | |
| post grades: course grade center | a[href*="gradebook"] | |
| post grades: full grade center | a[href*="enterGradeCenter"] | |
| post grades: grade cell | .Grade_Cell | |
| post grades: grade input | input.editBoxStyle | |
| post grades: submit changes | input[value="Save Changes"] | |
| download submissions: assignment link | .contentListItem a | |
| download submissions: submissions link | a[href*="listAllSubmissions"] | |
| download submissions: download all | a[href*="downloadAll"] | |
| download submissions: bulk checkbox | #selectAll | |
| create announcement: announcements link | a[href*="announcements"] | |
| create announcement: create btn | a[href*="createAnnouncement"] | |
| create announcement: title field | #aui_3_4_0_1_1064 | |
| create announcement: body editor | #announcementBody_contentEditable | |
| create announcement: submit btn | input[value="Submit"] | |
⚠️ Selectors are best-effort. Run
node src/utils.js --verify-selectorsto test against your instance.
More Browser Automation Projects
This is part of the Browser Automation Hub — a collection of open-source browser automation scaffolds for systems with poor or no API support:
- Epic EHR Browser Automation — Healthcare workflows
- Workday HCM Browser Automation — HR & payroll
- SAP Fiori Browser Automation — ERP workflows
- ServiceNow Browser Automation — ITSM
- Oracle EBS Browser Automation — ERP
- Browse all 30+ projects →
Contributing
PRs welcome! Please:
- Add tests for new actions
- Document new selectors (they break when Blackboard updates its UI)
- Follow the
ActionBuilderpattern for new actions - See CONTRIBUTING.md for full guidelines
License
MIT — use freely in personal and commercial projects.
Built with ❤️ for developers who need to automate Blackboard LMS without wrestling with its API limitations. Powered by AnchorBrowser for cloud-scale automation.
⭐ Star this repo if it saves you time! Browse all automation projects →
