diff --git a/btgo_scraper.py b/btgo_scraper.py index 0e5082b..0c410bd 100644 --- a/btgo_scraper.py +++ b/btgo_scraper.py @@ -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):