--- id: "8f452856-eb1e-44f6-b95d-4ea7e804bfda" name: "Canvas Planner" micro_summary: "Extract assignments from Canvas dashboard planner — stable selectors, DOM structure, traps" status: "resolved" see_also: [] scope: "Canvas LMS dashboard planner — extracts upcoming assignments, announcements, discussions grouped by day and course from the dashboard. Covers stable selectors, DOM structure, URL patterns, text patterns, and traps. Only works on the dashboard (/), not on /courses/#/assignments." warnings: "React SPA: always wait_for_load() + wait(1) for hydration. Never trust window.prefetched_xhrs — they're unresolved Promises.\nPlanner overrides are UI/to-do cleanup only; they do not submit assignments or create grades. For point-bearing work, require independent submission/grade evidence before clearing duplicate/dead cards." --- ## URL patterns - Dashboard (planner lives here): `https://.instructure.com/` - Course page: `https://.instructure.com/courses/` - Assignment page: `https://.instructure.com/courses//assignments/` **Prerequisite:** navigate to the dashboard (`/`). The planner only exists there. ## DOM structure ``` #dashboard-planner └─ .planner-day (one per day with items) ├─ h2 > div[data-testid="today-text"] "Today"/"Yesterday"/day name ├─ h2 > div[data-testid="today-date"] "May 3" └─ .planner-grouping (one per course) ├─ .Grouping-styles__hero (course link) ├─ .Grouping-styles__title (course name) └─ .planner-item (one per assignment) ├─ input[data-testid="planner-item-completed-checkbox"] ├─ .PlannerItem-styles__type "COURSE NAME ASSIGNMENT" └─ a[data-cid="Link"] (assignment link) └─ span "Assignment name, due ..." ``` ## Stable selectors | Selector | Purpose | |----------|---------| | `#dashboard-planner` | Root container | | `.planner-day` | Day section | | `.planner-grouping` | Course grouping | | `.planner-item` | Individual item | | `[data-testid="planner-item-completed-checkbox"]` | Completion checkbox | | `[data-testid="today-text"]` | Day label | | `[data-testid="today-date"]` | Date string | | `a[data-cid="Link"]` | Assignment/course link | | `.PlannerItem-styles__score` | Points (e.g., "100 pts") | ## Fragile selectors CSS module classes that CAN change: `.css-bbpeg1-view-heading`, `.Grouping-styles__*`, `.PlannerItem-styles__*`. Prefer stable selectors above. ## Item types `.PlannerItem-styles__type` text is `" "` where TYPE: Assignment, Announcement, Discussion, Submission. ## Text patterns - Link text: `"Assignment , due , ,