Skip to content

KianAttar/icbc-road-test-booker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ICBC Road Test Booker

A browser automation tool I built using Python and Selenium that helped me book a road test in 5 days instead of waiting 4 months.

The Problem

ICBC (Insurance Corporation of British Columbia) road test appointments are notoriously hard to get. When I needed to book mine, the earliest available slot was 4 months away. Cancellations happen all the time, but you'd have to manually refresh the booking page over and over to catch one — and someone else would probably grab it first.

The Solution

I built a bot that does the refreshing for me. It:

  1. Logs into the ICBC online booking portal
  2. Continuously cycles through my preferred test locations, checking for openings
  3. When it finds an available slot within my configured time window, it automatically books it
  4. Plays an audio alert so I know it worked

The key insight was that cancellations appear unpredictably throughout the day. A bot that checks every few seconds will always beat a human refreshing manually.

The Result

Booked a road test 5 days out. The normal wait was 4 months.

Tech Stack

  • Python — main language
  • Selenium — browser automation, interacting with ICBC's Angular Material UI
  • WebDriver Manager — automatic ChromeDriver version handling
  • Pygame — audio alert on successful booking

How It Works

The script targets specific UI elements in ICBC's Angular-based booking interface. It fills in the login form, navigates to the appointment search, parses available dates from the DOM, and clicks through the booking confirmation flow — all automated.

The trickiest part was handling Angular Material's autocomplete dropdowns and dynamic element IDs, which required careful use of explicit waits and flexible selectors.

What I Learned

  • Practical browser automation with Selenium against a real-world Angular application
  • Handling dynamic/async web UIs (explicit waits, element detection strategies)
  • The brittleness of DOM-based automation — hardcoded element IDs break when the site updates
  • Automating multi-step workflows with confirmation dialogs and modals

Disclaimer

This project is shared for educational and portfolio purposes only. It is a demonstration of browser automation skills and problem-solving.

  • This tool is not intended for distribution or active use by others
  • Automated interaction with ICBC's online services may violate their Terms of Service
  • The author assumes no responsibility or liability for any consequences resulting from the use, misuse, or adaptation of this code
  • Use at your own risk — if you choose to run or modify this code, you do so entirely at your own responsibility
  • This project is not affiliated with, endorsed by, or associated with ICBC in any way

About

Automated ICBC road test booking tool that reduced a 4-month wait to 5 days.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages