diff --git a/btgo_scraper.py b/btgo_scraper.py index 9273e5a..1f51eb9 100644 --- a/btgo_scraper.py +++ b/btgo_scraper.py @@ -90,26 +90,44 @@ class BTGoScraper: ) logging.info(f"Progress update: {message}") - def _dismiss_gdpr_cookies(self, page): + def _dismiss_gdpr_cookies(self, page, wait_for_banner=True): """ Inchide GDPR cookie banner daca este vizibil Args: page: Pagina Playwright pe care sa verifice + wait_for_banner: Daca True, asteapta aparitia banner-ului inainte de a incerca """ try: + # Asteapta ca banner-ul GDPR sa apara (poate intarzia dupa page load) + if wait_for_banner: + try: + page.wait_for_selector(".gdprcookie-wrapper", timeout=5000, state="visible") + logging.info(" [INFO] Banner GDPR detectat, incerc sa-l inchid...") + except: + # Banner-ul nu a aparut in 5 secunde, continuam + pass + # Strategii pentru cookie consent (in ordinea probabilitatii) cookie_strategies = [ # 1. Noul buton BT (2024+) ("role", "button", "Accept toate"), ("role", "button", "Accepta toate"), + ("role", "button", "Acceptă toate"), - # 2. Vechiul GDPR wrapper + # 2. Vechiul GDPR wrapper - text specific ("css", ".gdprcookie-wrapper button:has-text('Accept')"), ("css", ".gdprcookie-wrapper button:has-text('Sunt de acord')"), - ("css", ".gdprcookie-wrapper button"), + ("css", ".gdprcookie-wrapper button:has-text('Accepta')"), + ("css", ".gdprcookie-wrapper button:has-text('Acceptă')"), + ("css", ".gdprcookie-wrapper button:has-text('OK')"), - # 3. Fallback generic + # 3. GDPR wrapper - orice buton (fallback agresiv) + ("css", ".gdprcookie-wrapper button"), + ("css", ".gdprcookie-wrapper .btn"), + ("css", ".gdprcookie-wrapper [role='button']"), + + # 4. Fallback generic ("role", "button", "Accept"), ("role", "button", "Accepta"), ("role", "button", "OK"), @@ -122,10 +140,23 @@ class BTGoScraper: else: btn = page.locator(strategy[2]).first - if btn.is_visible(timeout=2000): - btn.click() + if btn.is_visible(timeout=3000): + btn.click(force=True) logging.info(f" [OK] Cookies acceptate ({strategy})") time.sleep(1) + + # Verifica ca banner-ul a disparut + try: + page.wait_for_selector(".gdprcookie-wrapper", timeout=2000, state="hidden") + logging.info(" [OK] Banner GDPR inchis cu succes") + except: + # Incearca inca o data cu force click + logging.info(" [WARN] Banner inca vizibil, reincercare...") + try: + btn.click(force=True) + time.sleep(1) + except: + pass return True except: continue @@ -423,6 +454,17 @@ class BTGoScraper: logging.info("Verificare GDPR cookie banner...") self._dismiss_gdpr_cookies(self.page) + # Verificare finala ca banner-ul nu mai blocheaza + try: + gdpr_wrapper = self.page.locator(".gdprcookie-wrapper") + if gdpr_wrapper.is_visible(timeout=1000): + logging.warning(" [WARN] Banner GDPR inca vizibil, fortez inchiderea...") + # Incearca sa inchida prin JavaScript + self.page.evaluate("document.querySelector('.gdprcookie-wrapper')?.remove()") + time.sleep(0.5) + except: + pass + # Click pe butonul LOGIN - deschide popup logging.info("Click pe butonul LOGIN...") with self.page.expect_popup() as popup_info: