Files
ROMFASTSQL/proxmox/vm201-windows/docs/vm201-btgo-playwright-service.md
Claude Agent 21f1e9affe docs(vm201): add btgo-playwright Windows service documentation
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>
2026-04-25 22:08:48 +00:00

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:

  1. Playwright MCP plugin — pentru Claude Code (agent control). NU se aplică.
  2. Playwright CLI — pentru proiecte Node.js. NU se aplică.
  3. 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

  1. Verifică că serviciul rulează cu sesiune Windows activă (NU doar RDP deconectat — sesiunea trebuie să persiste). Vezi mai jos.
  2. Confirmă HEADLESS=false în config / variabile mediu.
  3. 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:

  • tscon din alt RDP pentru a transfera sesiunea pe consola fizică
  • Configurare auto-logon + serviciul lansat în sesiunea consolă

Referințe


Ultima actualizare: 2026-04-25 Autor: Marius Mutu