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.
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.
I built a bot that does the refreshing for me. It:
- Logs into the ICBC online booking portal
- Continuously cycles through my preferred test locations, checking for openings
- When it finds an available slot within my configured time window, it automatically books it
- 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.
Booked a road test 5 days out. The normal wait was 4 months.
- 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
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.
- 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
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