- Instrucțiuni clonare din Gitea - Setup automat cu deployment scripts - Config .env - Rulare scraper 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
9.5 KiB
BTGO Scraper - Automatizare Citire Solduri
Prezentare
Automatizare Playwright pentru extragerea soldurilor și tranzacțiilor din George (btgo.ro).
Arhitectură
BTGO Scraper (btgo_scraper.py)
Entry point: btgo_scraper.py
│
├─ config.py (Config.validate())
│ └─ .env (load credentials)
│
├─ sync_playwright() → Chromium browser
│
├─ BTGOScraper.run()
│ ├─ login()
│ │ ├─ page.goto('go.bancatransilvania.ro')
│ │ ├─ page.expect_popup() → self.login_page
│ │ └─ Fill credentials + submit
│ │
│ ├─ handle_2fa_wait()
│ │ └─ Poll URL + #accountsBtn (120s)
│ │
│ ├─ read_accounts()
│ │ ├─ Click #accountsBtn
│ │ ├─ Iterate fba-account-details-card
│ │ └─ Extract: h4, IBAN, strong.sold
│ │
│ ├─ download_transactions() [optional]
│ │ ├─ For each account:
│ │ │ ├─ Expand card (idx=1 only)
│ │ │ ├─ Click "Tranzacții" (idx=1) / Select from modal (idx>1)
│ │ │ ├─ Click CSV button
│ │ │ └─ page.expect_download()
│ │ └─ Save to data/tranzactii_*.csv
│ │
│ ├─ save_results()
│ │ ├─ Write data/solduri_*.csv
│ │ └─ Write data/solduri_*.json
│ │
│ └─ send_notifications() [optional]
│ └─ notifications.py
│ ├─ EmailNotifier.send()
│ │ └─ SMTP (smtplib)
│ └─ TelegramNotifier.send()
│ └─ requests.post(telegram API)
│
Standalone scripts:
│
├─ send_notifications.py (manual notification send)
├─ get_telegram_chat_id.py (telegram setup helper)
└─ test_telegram.py (telegram connectivity test)
Telegram Trigger Bot (telegram_trigger_bot.py)
Entry point: telegram_trigger_bot.py
│
├─ .env (TELEGRAM_BOT_TOKEN, TELEGRAM_ALLOWED_USER_IDS)
│
├─ TelegramTriggerBot.__init__()
│ ├─ Load config from .env
│ ├─ Parse allowed user IDs
│ └─ Initialize Telegram API (api.telegram.org)
│
├─ run()
│ ├─ send_message(startup notification)
│ └─ While True:
│ ├─ get_updates(long_polling timeout=60s)
│ ├─ Parse incoming messages
│ └─ handle_command()
│ │
│ ├─ /scrape command:
│ │ ├─ is_user_allowed(user_id)
│ │ ├─ send_message("🤖 Scraper pornit...")
│ │ ├─ subprocess.run(['python', 'btgo_scraper.py'])
│ │ │ └─ btgo_scraper.py (full execution)
│ │ └─ send_message("✅ Succes" / "❌ Eroare")
│ │
│ ├─ /status command:
│ │ └─ send_message(bot uptime info)
│ │
│ └─ /help command:
│ └─ send_message(available commands)
│
Windows Service:
│
└─ deployment/windows/nssm/
├─ BTGOTelegramBot (Windows Service)
│ ├─ nssm install BTGOTelegramBot
│ ├─ Auto-restart on failure
│ └─ Log: logs/telegram_bot_*.log
│
Deploy scripts:
├─ deploy.ps1 (full deployment)
├─ install_service.ps1
├─ start_service.ps1
├─ restart_service.ps1
├─ uninstall_service.ps1
└─ menu.ps1 (interactive management)
Puncte cheie depanare:
- Scraper login fails: Check selectors în btgo_scraper.py:159-200
- Scraper 2FA timeout: Check URL polling în btgo_scraper.py:202-240
- Scraper account reading fails: Check selectors în btgo_scraper.py:242-310
- Scraper transaction download timeout: Check modal logic în btgo_scraper.py:312-420
- Bot commands not working: Check TELEGRAM_ALLOWED_USER_IDS în .env
- Bot unauthorized: User ID not in allowed list
- Notifications fail: Check notifications.py + config .env
Funcționalități:
- ✅ Citire automată solduri pentru toate conturile
- ✅ Export CSV cu tranzacții pentru fiecare cont
- ✅ Autentificare 2FA automată (auto-detect)
- ✅ Notificări Email și Telegram cu fișierele generate
⚠️ LIMITARE: Docker/headless NU funcționează - WAF-ul site-ului blochează activ containere Docker.
Prerequisites
- Python 3.8+
- Cont BTGO activ cu 2FA
- Windows (Docker nu este suportat)
Instalare pe VM Windows
# Clonare proiect
git clone https://gitea.romfast.ro/romfast/btgo-playwright.git
cd btgo-playwright
# Setup automat (instaleaza Python venv + dependente + Playwright browsers)
deployment\windows\scripts\setup_dev.ps1
# Configurare credentiale in .env
# Editează .env și adaugă:
# BTGO_USERNAME=your_username
# BTGO_PASSWORD=your_password
# HEADLESS=false
# Rulare scraper
deployment\windows\scripts\run_scraper.ps1
Setup și Rulare
Setup Automat (RECOMANDAT)
# PowerShell (recomandat)
deployment\windows\scripts\setup_dev.ps1
# SAU meniu interactiv complet
deployment\windows\scripts\menu.ps1
Rulare Manuală
# Scraper direct
deployment\windows\scripts\run_scraper.ps1
# Telegram bot (manual mode)
deployment\windows\scripts\run_telegram_bot_manual.ps1
# SAU meniu interactiv
deployment\windows\scripts\menu.ps1
Ce se întâmplă:
- Browser Chrome se deschide vizibil
- Login automat
- Așteaptă aprobare 2FA pe telefon (120s timeout)
- Citește soldurile tuturor conturilor
- Descarcă CSV-uri cu tranzacții
- Salvează rezultate în
data/
Configurare .env
# Obligatorii
BTGO_USERNAME=your_username
BTGO_PASSWORD=your_password
HEADLESS=false # OBLIGATORIU false!
# Opționale
DOWNLOAD_TRANSACTIONS=true
TIMEOUT_2FA_SECONDS=120
Structură Output
data/
├── solduri_2025-11-06_14-30-45.csv # Rezumat solduri
├── solduri_2025-11-06_14-30-45.json # Metadata + solduri
├── tranzactii_Colector_01_2025-11-06.csv # Tranzacții per cont
└── dashboard_2025-11-06_14-30-45.png # Screenshot
logs/
└── scraper_2025-11-06.log # Log zilnic
Format CSV Solduri
timestamp,nume_cont,iban,sold,moneda,tip_cont
2025-11-06 14:30:45,Colector 01,RO32BTRLRONCRT0637236701,7223.26,RON,colector
Notificări (Email & Telegram)
Email (SMTP)
# .env
ENABLE_NOTIFICATIONS=true
EMAIL_ENABLED=true
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password # Pentru Gmail: https://myaccount.google.com/apppasswords
EMAIL_FROM=your-email@gmail.com
EMAIL_TO=recipient@gmail.com
Telegram
-
Crează Bot:
- Caută @BotFather în Telegram
- Trimite
/newbot - Copiază token-ul primit
-
Obține Chat ID:
python get_telegram_chat_id.py -
Configurare .env:
ENABLE_NOTIFICATIONS=true TELEGRAM_ENABLED=true TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrs TELEGRAM_CHAT_ID=-1001234567890 # Negativ pentru grupuri
Trimitere Manuală Notificări
python send_notifications.py
Telegram Trigger Bot - Declanșare Remote
Setup Rapid (Manual Mode)
-
Configurare .env:
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrs TELEGRAM_ALLOWED_USER_IDS=your_user_id TELEGRAM_CHAT_ID=-1001234567890 # Pentru grup (negativ!) -
Pornire bot:
deployment\windows\scripts\run_telegram_bot_manual.ps1 -
Comenzi disponibile:
/scrape- Execută BTGO scraper/status- Status bot/help- Ajutor
Deploy ca Windows Service (RECOMANDAT pentru VM)
# Deploy complet + instalare serviciu
deployment\windows\scripts\deploy.ps1
# SAU folosește meniul interactiv
deployment\windows\scripts\menu.ps1
Avantaje serviciu:
- ✅ Pornire automată cu Windows
- ✅ Auto-restart la crash
- ✅ Rulează în background (fără RDP activ)
- ✅ Logging centralizat
Notă: Fișierele sunt trimise de scraper prin notificări (dacă ENABLE_NOTIFICATIONS=true), NU de bot.
⚠️ Cerință pentru scraper: Desktop Windows activ (RDP conectată) - browser TREBUIE vizibil!
Ghid complet: deployment/windows/README.md și TELEGRAM_BOT_SETUP.md
Troubleshooting
"Access Denied" în Docker
Cauză: WAF-ul BT George blochează Docker/headless browsers.
Soluție: Rulează DOAR local în Windows cu HEADLESS=false.
Timeout la 2FA
- Mărește timeout:
TIMEOUT_2FA_SECONDS=180în.env - Verifică notificări activate pe telefon
Selectors nu funcționează
Site-ul s-a schimbat. Re-generează selectors:
.venv\Scripts\activate
playwright codegen https://btgo.ro --target python
Notificări Email nu funcționează
- Pentru Gmail: folosește App Password, nu parola normală
- Verifică port: 587 (TLS) sau 465 (SSL)
- Testare:
python test_telegram.py
Notificări Telegram nu funcționează
- Verifică
TELEGRAM_ENABLED=true - Rulează
python test_telegram.py - Chat ID pentru grupuri trebuie să fie negativ (ex:
-1001234567890) - Asigură-te că botul este în grup
Securitate
⚠️ IMPORTANT:
- NU comite
.envîn git (deja în.gitignore) - NU partaja screenshots/logs - conțin date sensibile
- Șterge fișierele vechi periodic:
# Windows
del /q data\*.csv data\*.json data\*.png
# Linux/Mac
rm data/*.{csv,json,png}
Exit Codes
0- Success1- Eroare generală4- Eroare configurare (.env invalid)99- Eroare neașteptată
Licență
MIT License
Disclaimer Legal
Acest tool accesează informații personale bancare. Utilizatorul este singurul responsabil pentru conformarea cu termenii Băncii Transilvania și legislația aplicabilă.