Cand wait_for_selector('input#user') da timeout, logam URL, titlu, text
vizibil, lista de input-uri si salvam screenshot full_page - cat browser-ul
e inca viu. Necesar ca sa distingem intre WAF block, randare lenta si
selector schimbat, fara sa mai ghicim.
Handler-ul de blocare trackere inghite acum TargetClosedError la shutdown,
ca sa nu mai spameze log-ul cu "Future exception was never retrieved" si
sa ascunda eroarea reala.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
BTGO Scraper
Automatizare Playwright care se logheaza pe George (go.bancatransilvania.ro), citeste soldurile tuturor conturilor si descarca CSV-urile de tranzactii. Trimite rezultatele pe Email si Telegram. Poate fi declansata din Telegram printr-un bot (/scrape).
Cerinte
- Windows 10/11 (Linux/Docker nu functioneaza — Akamai WAF blocheaza)
- Python 3.11+ in PATH
- Cont BTGO activ cu 2FA pe telefon
IMPORTANT — HEADLESS=false obligatoriu. WAF-ul BT blocheaza browser-ele headless. Scraper-ul ruleaza intotdeauna cu fereastra Chromium vizibila.
Instalare rapida
git clone <repo-url> E:\proiecte\btgo-playwright
cd E:\proiecte\btgo-playwright
deployment\windows\scripts\setup_dev.ps1
Script-ul creeaza .venv, instaleaza dependentele si Chromium-ul Playwright.
Apoi editeaza .env (copiat automat din .env.example la primul run):
BTGO_USERNAME=user_btgo
BTGO_PASSWORD=parola_btgo
HEADLESS=false # OBLIGATORIU false
TIMEOUT_2FA_SECONDS=300
# Notificari
ENABLE_NOTIFICATIONS=true
EMAIL_ENABLED=true
SMTP_USERNAME=tu@gmail.com
SMTP_PASSWORD=app-password # Gmail: https://myaccount.google.com/apppasswords
EMAIL_TO=tu@gmail.com
# Telegram (notificari + trigger bot)
TELEGRAM_ENABLED=true
TELEGRAM_BOT_TOKEN=123:ABC...
TELEGRAM_CHAT_ID=-100123... # Negativ pentru grupuri
TELEGRAM_ALLOWED_USER_IDS=12345 # User-ii care pot da /scrape
Rulare zilnica
Manual (din terminal):
deployment\windows\scripts\run_scraper.ps1
Browser-ul se deschide, scraper-ul completeaza credentialele, apoi astepti 2FA pe telefon. Dupa aprobare ruleaza automat: citeste solduri → descarca tranzactii → trimite Email + Telegram → salveaza in data/.
Meniu interactiv (toate optiunile):
deployment\windows\scripts\menu.ps1
Deploy ca serviciu Windows (recomandat pentru VM)
Bot-ul Telegram ruleaza in background si raspunde la /scrape. Necesita sesiune RDP activa ca browser-ul sa aiba un desktop pe care sa se deschida.
# Ca Administrator
deployment\windows\scripts\deploy.ps1
Asta instaleaza serviciul BTGOTelegramBot prin NSSM (auto-start cu Windows, auto-restart la crash).
Comenzi utile:
deployment\windows\scripts\status.ps1 # status + ultimele logs
deployment\windows\scripts\restart_service.ps1 # restart dupa modificari
deployment\windows\scripts\view_logs.ps1 # viewer interactiv logs
deployment\windows\scripts\uninstall_service.ps1 # dezinstalare
Update dupa git pull:
deployment\windows\scripts\update.ps1 # git pull + restart serviciu (auto-elevare)
Comenzi disponibile in Telegram:
| Comanda | Ce face |
|---|---|
/scrape |
Ruleaza scraper-ul, trimite solduri + fisiere individuale |
/scrape_zip |
Ruleaza scraper-ul, trimite arhiva ZIP |
/zip |
Trimite ultimele fisiere din data/ ca ZIP (fara scrape) |
/status |
Uptime bot |
/help |
Lista comenzi |
Output
data/
solduri_YYYY-MM-DD_HH-MM-SS.csv # rezumat conturi
solduri_YYYY-MM-DD_HH-MM-SS.json # acelasi + metadata
tranzactii_<NumeCont>_YYYY-MM-DD.csv
dashboard_*.png # screenshot post-login
debug_login_popup_*.png # debug login (cand esueaza)
logs/
scraper_YYYY-MM-DD.log # log zilnic scraper
telegram_bot_*.log # log serviciu Telegram (NSSM)
Depanare
"Nu am gasit elementele de login" / timeout pe input#user
Apare cand fereastra Chromium e prea ingusta (sub ~1100px). La acest viewport BT afiseaza un splash de redirect si ascunde formul. Cauza tipica: scraper-ul ruleaza dintr-un Windows Service in session 0, fara display real, iar fereastra fizica are dimensiune mica chiar daca codul cere viewport=1920x1080.
Fix deja aplicat in cod: browser-ul lansat cu --window-size=1920,1080 (vezi btgo_scraper.py:388-398).
Daca tot apare: verifica data\debug_login_popup_*.png — daca vezi splash-ul "Vei fi redirectionat in screenul de autentificare", inseamna ca window-size nu s-a aplicat. Solutie: porneste scraper-ul printr-o sesiune RDP activa (nu doar serviciu in session 0).
"Access Denied" pe pagina de login
Akamai WAF a detectat headless mode. Verifica:
HEADLESS=false # obligatoriu
Si asigura-te ca NU rulezi in Docker / WSL fara display.
Timeout la 2FA
TIMEOUT_2FA_SECONDS=300 # mareste daca aprobi greu pe telefon
Verifica si ca notificarile push ale aplicatiei George sunt active pe telefon.
Bot nu raspunde la /scrape
- Verifica serviciul:
Get-Service BTGOTelegramBot deployment\windows\scripts\view_logs.ps1→ optiunea 4 (tail stderr)- Verifica ca user-ul tau e in
TELEGRAM_ALLOWED_USER_IDS - Pentru grupuri:
TELEGRAM_CHAT_IDtrebuie negativ (ex:-1001234567890)
Notificari Email nu pleaca
- Pentru Gmail: App Password, nu parola normala
- Port
587(TLS) sau465(SSL) - Test rapid:
python test_telegram.py(verifica si SMTP daca esti la el)
Selectorii s-au schimbat (UI BT actualizat)
Cand BT modifica HTML-ul, selectorii in btgo_scraper.py trebuie refacuti:
.venv\Scripts\Activate.ps1
playwright codegen https://go.bancatransilvania.ro --target python
Faci manual fluxul (login → 2FA → conturi → download CSV), copiezi selectorii noi generati si actualizezi sectiunile relevante:
- Cookies:
_dismiss_gdpr_cookies(~ liniile 150-200) - Login:
login()(~ liniile 449-530) - Solduri:
read_accounts()(~ liniile 242-310) - Tranzactii:
download_transactions()si_download_*_account()(~ liniile 529-732)
CLAUDE.md contine lista actualizata de selectori critici.
Testare doar solduri (fara descarcare tranzactii)
$env:BALANCES_ONLY = "true"
python btgo_scraper.py
Util cand vrei doar verificare rapida ca login + 2FA + citire conturi mai functioneaza.
Exit codes
0Success1Eroare generala4Config invalid (.env)99Eroare neasteptata
Securitate
.enve in.gitignore— nu comite credentialeledata/silogs/contin date bancare — nu partaja- Restrictioneaza bot-ul: seteaza
TELEGRAM_ALLOWED_USER_IDS(lista goala = oricine poate trigeri scraper-ul cu credentialele tale)
Disclaimer
Tool autorizat pentru automatizare personala. Utilizatorul e responsabil pentru conformarea cu T&C-ul Bancii Transilvania.