fix: scoate blocarea trackerelor + asteapta cardurile de cont

context.route activeaza interceptarea cererilor: fiecare request al paginii
era pus pe pauza pentru un round-trip catre script. Pe masina prod (sync API,
Session 0) asta adauga latenta la fiecare request si incetinea vizibil
incarcarea dashboard-ului post-2FA. Blocarea nici nu rezolva CPU-ul - acela
vine din randarea software in Session 0, nu din trackere. Net: cost fara
beneficiu, deci o eliminam.

read_accounts: time.sleep(3) fix inlocuit cu wait_for_selector pe
fba-account-details-card (45s). Pe masina lenta lista nu apuca sa randeze
in 3s -> gasea 0 conturi. Daca tot 0, capteaza diagnostic (URL, text,
tag-uri fba-*, screenshot).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 14:53:42 +03:00
parent 2165383317
commit d3d9784fa8

View File

@@ -416,29 +416,6 @@ class BTGoScraper:
context = browser.new_context(**context_kwargs)
# Blocheaza trackere care fac polling continuu pe homepage BT si
# pun renderer-ul la 80-100% CPU pe hardware slab. Nu sunt folosite
# de aplicatia BT, doar de marketing.
blocked_hosts = (
'googletagmanager.com', 'google-analytics.com',
'doubleclick.net', 'facebook.com', 'facebook.net',
'linkedin.com', 'licdn.com', 'omniconvert.com',
'hotjar.com', 'clarity.ms',
)
def _abort_tracker(route):
# La inchiderea browser-ului, route-urile in zbor arunca
# TargetClosedError. Le inghitim ca sa nu spameze log-ul cu
# "Future exception was never retrieved" si sa ascunda eroarea reala.
try:
route.abort()
except Exception:
pass
context.route(
lambda url: any(host in url for host in blocked_hosts),
_abort_tracker,
)
self.page = context.new_page()
logging.info(f"Browser lansat (headless={self.config.HEADLESS})")
@@ -968,7 +945,16 @@ class BTGoScraper:
# Simplu selector - doar butonul, nu div-ul interior
accounts_button = self.page.locator("#accountsBtn")
accounts_button.click()
time.sleep(3) # Asteapta ca lista sa se incarce
# Asteapta explicit aparitia cardurilor de cont. Pe masina prod
# (Session 0, randare software) lista se incarca mult mai lent de
# 3s - un time.sleep fix gasea 0 conturi.
try:
self.page.wait_for_selector(
"fba-account-details-card", state="visible", timeout=45000
)
except PlaywrightTimeout:
logging.warning(" [WARN] Timeout asteptand cardurile de cont")
logging.info("✓ Sectiunea conturi deschisa")
# Update progres DUPĂ ce lista de conturi s-a încărcat
@@ -978,6 +964,25 @@ class BTGoScraper:
account_cards = self.page.locator("fba-account-details-card").all()
logging.info(f"Gasit {len(account_cards)} conturi")
# Daca tot 0, capteaza starea paginii pentru diagnostic
if not account_cards:
try:
logging.error(f" [DIAG] URL: {self.page.url}")
body = self.page.evaluate(
"document.body ? document.body.innerText.slice(0, 400) : '(fara body)'"
)
logging.error(f" [DIAG] Text vizibil: {body!r}")
fba_tags = self.page.evaluate(
"Array.from(new Set(Array.from(document.querySelectorAll('*'))"
".map(e => e.tagName.toLowerCase()).filter(t => t.startsWith('fba-'))))"
)
logging.error(f" [DIAG] Tag-uri fba-* in pagina: {fba_tags}")
shot = Path(self.config.OUTPUT_DIR) / f"diag_conturi_{datetime.now().strftime('%Y%m%d_%H%M%S')}.png"
self.page.screenshot(path=str(shot), full_page=True)
logging.error(f" [DIAG] Screenshot salvat: {shot}")
except Exception as diag_err:
logging.error(f" [DIAG] Nu am putut capta starea: {diag_err}")
accounts = []
for idx, card in enumerate(account_cards, 1):