Document the BT George scraper running on VM 201: - Python + Playwright SDK (HEADLESS=false required for WAF bypass) - Windows Service deploy with Telegram notifications - Cross-references in proxmox/README.md and vm201-windows/README.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.9 KiB
VM 201 — btgo-playwright (Scraper Banca Transilvania George)
Obiectiv
Scraper automat pentru go.bancatransilvania.ro (Banca Transilvania):
extrage solduri conturi și descarcă CSV-uri de tranzacții. Rulează ca Windows
Service pe VM 201, cu notificări Telegram.
Repo: git@gitea.romfast.ro:romfast/btgo-playwright.git
Stack Tehnic
| Componentă | Detaliu |
|---|---|
| Limbaj | Python (venv dedicat) |
| Browser automation | playwright==1.48.0 (Python SDK) |
| Mod | API Python direct: from playwright.sync_api import sync_playwright |
| Notificări | Telegram Bot API |
| Deploy | Windows Service (PowerShell wrappers) |
| Headless | HEADLESS=false obligatoriu |
De ce Playwright Python SDK (și nu MCP / CLI)
Trei variante de a folosi Playwright; aici se folosește a treia:
- Playwright MCP plugin — pentru Claude Code (agent control). NU se aplică.
- Playwright CLI — pentru proiecte Node.js. NU se aplică.
- Playwright Python SDK — dependință Python instalată în venv, folosită programatic din script. ✅ Folosită aici.
Concluzie: setup-ul actual e corect pentru acest use case. Funcționează independent de Claude.
Constrângere Critică: HEADLESS=false
WAF-ul Banca Transilvania detectează și blochează:
- Rularea în Docker
- Rularea headless
De aceea:
- Serviciul rulează direct pe VM 201 (Windows GUI prezent)
- Browser-ul Chromium pornește vizibil (
headless=False) - VM 201 trebuie să rămână pornit cu sesiune Windows activă
Orice migrare către container Linux / headless rupe scraper-ul la primul login.
Flow Aplicație
login() → autentificare cu user/parolă
↓
handle_2fa_wait() → așteaptă confirmare 2FA (notificare Telegram)
↓
read_accounts() → parsează lista de conturi + solduri
↓
download_transactions() → descarcă CSV per cont
↓
save_results() → persistă date + notificare Telegram (succes/eroare)
Deploy ca Windows Service
Serviciul este înregistrat ca Windows Service prin scripturi PowerShell din
repo. Lansează python.exe din venv-ul proiectului asupra entry-point-ului
scraper-ului.
Verificare rapidă pe VM 201:
# Status serviciu
Get-Service -Name "btgo-playwright*"
# Restart
Restart-Service -Name "btgo-playwright"
# Loguri
Get-EventLog -LogName Application -Source "btgo-playwright" -Newest 20
(Numele exact al serviciului și calea instalării sunt în README-ul repo-ului
btgo-playwright.)
Dependențe Operaționale
- VM 201 pornit + sesiune Windows activă (necesar pentru
HEADLESS=false) - Acces internet către
go.bancatransilvania.ro - Acces internet către
api.telegram.org - Chromium instalat de Playwright (
playwright install chromiumîn venv)
Troubleshooting
Login eșuează / WAF block
- Verifică că serviciul rulează cu sesiune Windows activă (NU doar RDP deconectat — sesiunea trebuie să persiste). Vezi mai jos.
- Confirmă
HEADLESS=falseîn config / variabile mediu. - Verifică că nu rulează în paralel altă instanță Chromium pe profilul Playwright (lock pe user data dir).
2FA nu primește notificare
Verifică tokenul Telegram și chat_id din config. Test rapid:
curl "https://api.telegram.org/bot$TOKEN/getMe"
Sesiune Windows se închide după RDP disconnect
Pentru ca browser-ul GUI să rămână activ după RDP disconnect, sesiunea trebuie păstrată. Variante:
tscondin alt RDP pentru a transfera sesiunea pe consola fizică- Configurare auto-logon + serviciul lansat în sesiunea consolă
Referințe
- Repo: http://gitea:3000/romfast/btgo-playwright
- Playwright Python docs: https://playwright.dev/python/
- README VM 201:
../README.md
Ultima actualizare: 2026-04-25 Autor: Marius Mutu