Modificari principale: - Noul flux download: expand -> tranzactii -> CSV -> Genereaza -> download - Detectie inteligenta buton Tranzactii (evita butonul Delete) - Verificare daca primul cont e deja expandat inainte de click - Selectie conturi cu 6 strategii fallback + debug logging - Handler pentru cookie consent "Accept toate" si "Am inteles" - Screenshot automat la erori de selectie cont Documentatie: - README: sectiuni noi pentru inregistrare Playwright si testare manuala - CLAUDE.md: selectori actualizati pentru noul UI 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.7 KiB
CLAUDE.md
This file provides guidance to Claude Code when working with code in this repository.
Project Overview
BTGO Scraper - Playwright automation for extracting account balances and transaction CSVs from Banca Transilvania George (go.bancatransilvania.ro).
Security Context: Authorized personal banking automation tool for educational purposes.
CRITICAL: Docker/headless mode is BLOCKED by WAF. ONLY works locally with HEADLESS=false.
Coding Guidelines
NO EMOJIS: Do not use emojis in user-facing messages (Telegram, email, notifications). Use plain text only.
Running the Scraper
# Windows setup
deployment\windows\scripts\setup_dev.ps1
# Run scraper (browser visible)
deployment\windows\scripts\run_scraper.ps1
# Run Telegram bot (manual)
deployment\windows\scripts\run_telegram_bot_manual.ps1
# Interactive menu (all options)
deployment\windows\scripts\menu.ps1
Architecture
Core Flow
login() → handle_2fa_wait() → read_accounts() → download_transactions() → save_results()
Critical Implementation Details
1. Login with Popup (lines ~140-200)
- Main page → Click "LOGIN" → Opens popup window
- Use
page.expect_popup()to capture popup reference - All operations happen in
self.login_page(the popup)
2. 2FA Auto-Detection (lines ~202-240)
- URL monitoring:
login.bancatransilvania.ro→goapp.bancatransilvania.ro - Poll for
#accountsBtnelement every 2 seconds - After 2FA:
self.page = self.login_page(switch page reference)
3. Account Reading (lines ~242-310)
- Elements:
fba-account-details-card,#accountsBtn - Each card:
h4(name),span.text-grayscale-label(IBAN),strong.sold(balance) - Balance format:
"7,223.26 RON"→ parse to float + currency
4. Transaction Download (lines ~529-732)
Flow (2024+ version):
Account 1: Expand card -> Click tranzactii icon -> Select "CSV" -> "Genereaza" -> Download from fba-document-item
Account 2+: Click #selectAccountBtn -> Select by heading name -> "Genereaza" -> Download
Key methods:
_download_first_account(): Handles first account (expand + select CSV format)_download_subsequent_account(): Handles accounts 2+ (dropdown selection)_wait_and_download(): Waits for fba-document-item and downloads
Account selection strategies (in order):
get_by_role("heading", name=account_name)locator("fba-account-details").filter(has_text=account_name)get_by_text(account_name, exact=True)
Key Selectors
Cookie consent:
- New (2024+):
get_by_role("button", name="Accept toate") - One-time consent:
get_by_text("Am inteles")
Login page:
- URL:
https://go.bancatransilvania.ro/ - Login link:
get_by_role("link", name="Login") - Username:
get_by_placeholder("ID logare")(intelligent fallback in_find_username_field) - Password:
get_by_placeholder("Parola")orinput[type='password'] - Submit:
get_by_role("button", name="Autentifica-te")(intelligent fallback in_find_submit_button)
Post-login:
- 2FA success indicator:
#accountsBtnvisible and enabled - Domain:
goapp.bancatransilvania.ro
Accounts:
- Cards:
fba-account-details-card - Expand icon:
.mx-auto .mat-icon svg,.collapse-account-btn - Transactions button:
fba-account-buttons svg,.account-transactions-btn
Transaction download:
- Account selector:
#selectAccountBtn svg - Account in dropdown:
get_by_role("heading", name=account_name) - CSV format:
get_by_text("CSV", exact=True) - Generate button:
get_by_role("button", name="Genereaza") - Download item:
fba-document-item svg,fba-document-item path
Update selectors: playwright codegen https://go.bancatransilvania.ro --target python
Docker Limitation
Docker DOES NOT WORK - Akamai WAF blocks with "Access Denied".
Symptoms:
- "Access Denied" page
- 0 links detected
- Screenshot:
data/debug_before_login_*.pngshows error
Solution: Use Windows local mode with HEADLESS=false.
Common Issues
Access Denied (Docker)
- Cause: WAF blocking
- Fix: Run locally with
HEADLESS=false
Transaction Download Timeout
- Check
fba-document-itemselector (wait for document generation) - Verify
#selectAccountBtnfor account dropdown - Account selection: verify heading name matches exactly
2FA Timeout
- Increase
TIMEOUT_2FA_SECONDSin.env - Verify URL redirect to
goapp.bancatransilvania.ro - Check for "Am inteles" consent dialog blocking
Account Selection Failed
- Account name might have changed - verify exact match
- Try running
playwright codegento see current UI structure - Check if dropdown opened (
#selectAccountBtn)
Exit Codes
0: Success1: General error4: Config error (.env invalid)99: Unexpected error