diag(login): captureaza starea paginii la timeout pe input#user

Cand wait_for_selector('input#user') da timeout, logam URL, titlu, text
vizibil, lista de input-uri si salvam screenshot full_page - cat browser-ul
e inca viu. Necesar ca sa distingem intre WAF block, randare lenta si
selector schimbat, fara sa mai ghicim.

Handler-ul de blocare trackere inghite acum TargetClosedError la shutdown,
ca sa nu mai spameze log-ul cu "Future exception was never retrieved" si
sa ascunda eroarea reala.

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

View File

@@ -425,9 +425,18 @@ class BTGoScraper:
'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),
lambda route: route.abort(),
_abort_tracker,
)
self.page = context.new_page()
@@ -558,6 +567,26 @@ class BTGoScraper:
except PlaywrightTimeout as e:
logging.error(f"Timeout la login: {e}")
# Capteaza starea paginii CAT browser-ul e inca viu, ca sa stim
# ce a vazut de fapt: Access Denied, pagina goala, alt formular etc.
diag_page = getattr(self, 'login_page', None) or self.page
try:
logging.error(f" [DIAG] URL: {diag_page.url}")
logging.error(f" [DIAG] Titlu: {diag_page.title()!r}")
body = diag_page.evaluate(
"document.body ? document.body.innerText.slice(0, 400) : '(fara body)'"
)
logging.error(f" [DIAG] Text vizibil: {body!r}")
inputs = diag_page.evaluate(
"Array.from(document.querySelectorAll('input'))"
".map(i => i.id + '|' + i.type + '|' + i.name)"
)
logging.error(f" [DIAG] Input-uri in pagina: {inputs}")
shot = Path(self.config.OUTPUT_DIR) / f"diag_login_timeout_{datetime.now().strftime('%Y%m%d_%H%M%S')}.png"
diag_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 paginii: {diag_err}")
raise Exception("Nu am gasit elementele de login. Verifica selectors!")
except Exception as e:
logging.error(f"Eroare la login: {e}")