Reduce de la 475 la 175 linii. Elimina diagrama ASCII de arhitectura si sectiunile duplicate. Adauga sectiune dedicata pentru eroarea de viewport-mic / Windows Service session 0, cu trimitere la fix-ul --window-size din btgo_scraper.py. Reorganizeaza troubleshooting pe simptome utilizator, nu pe linii de cod. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
196 lines
6.6 KiB
Markdown
196 lines
6.6 KiB
Markdown
# 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
|
|
|
|
```powershell
|
|
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):
|
|
|
|
```ini
|
|
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):**
|
|
|
|
```powershell
|
|
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):**
|
|
|
|
```powershell
|
|
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.
|
|
|
|
```powershell
|
|
# Ca Administrator
|
|
deployment\windows\scripts\deploy.ps1
|
|
```
|
|
|
|
Asta instaleaza serviciul `BTGOTelegramBot` prin NSSM (auto-start cu Windows, auto-restart la crash).
|
|
|
|
**Comenzi utile:**
|
|
|
|
```powershell
|
|
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:**
|
|
|
|
```powershell
|
|
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:
|
|
|
|
```ini
|
|
HEADLESS=false # obligatoriu
|
|
```
|
|
|
|
Si asigura-te ca **NU** rulezi in Docker / WSL fara display.
|
|
|
|
### Timeout la 2FA
|
|
|
|
```ini
|
|
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`
|
|
|
|
1. Verifica serviciul: `Get-Service BTGOTelegramBot`
|
|
2. `deployment\windows\scripts\view_logs.ps1` → optiunea 4 (tail stderr)
|
|
3. Verifica ca user-ul tau e in `TELEGRAM_ALLOWED_USER_IDS`
|
|
4. Pentru grupuri: `TELEGRAM_CHAT_ID` trebuie **negativ** (ex: `-1001234567890`)
|
|
|
|
### Notificari Email nu pleaca
|
|
|
|
- Pentru Gmail: **App Password**, nu parola normala
|
|
- Port `587` (TLS) sau `465` (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:
|
|
|
|
```powershell
|
|
.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)
|
|
|
|
```powershell
|
|
$env:BALANCES_ONLY = "true"
|
|
python btgo_scraper.py
|
|
```
|
|
|
|
Util cand vrei doar verificare rapida ca login + 2FA + citire conturi mai functioneaza.
|
|
|
|
## Exit codes
|
|
|
|
- `0` Success
|
|
- `1` Eroare generala
|
|
- `4` Config invalid (`.env`)
|
|
- `99` Eroare neasteptata
|
|
|
|
## Securitate
|
|
|
|
- `.env` e in `.gitignore` — **nu** comite credentialele
|
|
- `data/` si `logs/` 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.
|