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:
@@ -416,29 +416,6 @@ class BTGoScraper:
|
|||||||
|
|
||||||
context = browser.new_context(**context_kwargs)
|
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()
|
self.page = context.new_page()
|
||||||
logging.info(f"Browser lansat (headless={self.config.HEADLESS})")
|
logging.info(f"Browser lansat (headless={self.config.HEADLESS})")
|
||||||
|
|
||||||
@@ -968,7 +945,16 @@ class BTGoScraper:
|
|||||||
# Simplu selector - doar butonul, nu div-ul interior
|
# Simplu selector - doar butonul, nu div-ul interior
|
||||||
accounts_button = self.page.locator("#accountsBtn")
|
accounts_button = self.page.locator("#accountsBtn")
|
||||||
accounts_button.click()
|
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")
|
logging.info("✓ Sectiunea conturi deschisa")
|
||||||
|
|
||||||
# Update progres DUPĂ ce lista de conturi s-a încărcat
|
# 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()
|
account_cards = self.page.locator("fba-account-details-card").all()
|
||||||
logging.info(f"Gasit {len(account_cards)} conturi")
|
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 = []
|
accounts = []
|
||||||
|
|
||||||
for idx, card in enumerate(account_cards, 1):
|
for idx, card in enumerate(account_cards, 1):
|
||||||
|
|||||||
Reference in New Issue
Block a user