Automated visa appointment checker with Cloudflare bypass
Monitors VFS Global for available dates
Features · Quick Start · Configuration · Usage · How It Works · Cities · Contact
- Cloudflare Bypass — Automatically solves Cloudflare Interstitial and Turnstile challenges using CloakBrowser stealth browser
- Date Monitoring — Checks all visa types and subcategories for a selected city every 10 minutes
- Async Architecture — Built on Playwright async API for reliable, non-blocking automation
- GeoIP Integration — Matches timezone, locale, and geolocation to proxy exit node for stealth
- Fingerprint Randomization — Unique browser fingerprint per session via BrowserForge
- Python 3.11+
- uv (recommended) or pip
git clone https://github.com/kravchenski/visa-open.git
cd visa-open
# Using uv (recommended)
uv sync
# Or using pip
pip install .- Copy the environment file and fill in your credentials:
cp .env.example .env-
Edit
.envwith your VFS Global login and appointment parameters (see Configuration) -
Run:
python main.pyAll configuration is done through the .env file.
email_login=your@email.com
password_login=your_passwordGet these from VFS Global.
appointment_center=Poland Visa Application Center-Grodno
appointment_category=National D Visa
appointment_subcategory=D- Karta Polaka| Variable | Description | Example |
|---|---|---|
email_login |
VFS account email | user@email.com |
password_login |
VFS account password | pass123 |
appointment_center |
Appointment center option text | Poland Visa Application Center-Grodno |
appointment_category |
Appointment category option text | National D Visa |
appointment_subcategory |
Appointment subcategory option text | D- Karta Polaka |
┌─────────────────────────────────────────────────────────────┐
│ main.py │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ CloakBrowser │─▶│ solve_captcha│─▶│ Cloudflare passed │ │
│ │ (Stealth) │ │ (interstitial│ │ │ │
│ └──────────────┘ │ + turnstile)│ └────────┬──────────┘ │
│ └──────────────┘ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ login_to_vfs() │ │
│ │ 1. Navigate to VFS login page │ │
│ │ 2. Solve Cloudflare challenges │ │
│ │ 3. Click turnstile in iframe │ │
│ │ 4. Fill email/password │ │
│ │ 5. Submit → Dashboard │ │
│ └────────────────────────┬───────────────────────────────┘ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ check_dates_for_all_visa_types() │ │
│ │ For each visa type: │ │
│ │ For each subcategory: │ │
│ │ → Select city/type/subcategory │ │
│ │ → Enter birth date │ │
│ │ → Read available dates │ │
│ │ → Print results │ │
│ └────────────────────────┬───────────────────────────────┘ │
│ ▼ │
│ ↻ Repeat every 60s │
└─────────────────────────────────────────────────────────────┘
| City | National Visa D | Schengen Visa C |
|---|---|---|
| Baranovichi | Driver D-visa · Other D-visa · Work D-visa · Work D-visa krome Brest oblast |
Other C Visa |
| Brest | Driver D-visa · Other D-visa · Work D-visa · Work D-visa krome Brest oblast |
Other C Visa |
| Gomel | Driver D-visa · Other D-visa |
Visits C-Visa |
| Grodno | Other D-visa · Work D-visa · Postal D-visa |
Other C Visa |
| Lida | Other D-visa · Work D-visa · Postal D-visa |
— |
| Minsk | Other D-visa · Driver D-visa · Postal D-visa |
Other C Visa · Visits C-Visa |
| Mogilev | Driver D-visa · Other D-visa |
Visits C-Visa |
| Pinsk | Driver D-visa · Other D-visa · Work D-visa · Work D-visa krome Brest oblast |
Other C Visa |
visa-open/
├── main.py # Entry point — browser loop with retry logic
├── cloudflare.py # Cloudflare Interstitial + Turnstile bypass
├── session.py # Session expiry detection and recovery
├── utils.py # Shared helpers (screenshot, delays, loader wait)
├── pages/
│ ├── login.py # VFS Global login flow
│ ├── check_dates.py # Visa appointment date checker
│ └── fill_form.py # Application form auto-fill
├── .env.example # Configuration template
├── pyproject.toml # Dependencies & build config
└── README.md
| Component | Technology |
|---|---|
| Browser | CloakBrowser (stealth Chromium) |
| Automation | Playwright (async API) |
| Config | python-dotenv |
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is for educational purposes only. Use at your own risk and in accordance with VFS Global's terms of service. The authors are not responsible for any misuse.
Made with ❤️ for the visa appointment struggle