@@ -38,7 +38,7 @@ def get_launch_args(browser):
3838LOGIN_URL = "https://login.alditalk-kundenbetreuung.de/signin/XUI/#login/"
3939DASHBOARD_URL = "https://www.alditalk-kundenportal.de/portal/auth/uebersicht/"
4040
41- VERSION = "1.2.0 " # Deine aktuelle Version
41+ VERSION = "1.2.2 " # Deine aktuelle Version
4242
4343REMOTE_VERSION_URL = "https://raw.githubusercontent.com/Dinobeiser/AT-Extender/main/version.txt" # Link zur Version
4444REMOTE_SCRIPT_URL = "https://raw.githubusercontent.com/Dinobeiser/AT-Extender/main/at-extender.py" # Link zum neuesten Skript
@@ -166,13 +166,58 @@ def wait_and_click(page, selector, timeout=5000, retries=5):
166166
167167def handle_cookie_banner (page ):
168168 try :
169- cookie_selector = 'button[data-testid="uc-deny-all-button"]'
170- if page .query_selector (cookie_selector ):
171- logging .info ("Achtung vor dem Krümelmonster." )
172- wait_and_click (page , cookie_selector )
173- logging .info ("Nom Nom Nom" )
169+ deny_selector = 'button[data-testid="uc-deny-all-button"]'
170+ try :
171+ button = page .query_selector (deny_selector )
172+ if button and button .is_visible ():
173+ logging .info ("Achtung Krümelmonster" )
174+ button .click ()
175+ time .sleep (1 )
176+ if not button .is_visible ():
177+ logging .info ("Cookie geschlossen (Banner verschwunden)." )
178+ else :
179+ logging .warning ("Geklickt, aber Button scheint noch da zu sein." )
180+ return
181+ except Exception :
182+ logging .info ("Keine Arme, keine Kekse." )
183+
184+ deny_keywords = ["Verweigern" , "Ablehnen" , "Decline" ]
185+ buttons = page .query_selector_all ("button" )
186+
187+ for button in buttons :
188+ try :
189+ text = button .text_content ().strip ().lower ()
190+ if any (keyword .lower () in text for keyword in deny_keywords ):
191+ if button .is_visible ():
192+ logging .info (f" Cookie Text gefunden: '{ text } '" )
193+ try :
194+ button .click ()
195+ time .sleep (1 )
196+ if not button .is_visible ():
197+ logging .info ("Cookie geschlossen (Banner verschwunden)." )
198+ else :
199+ logging .warning ("Geklickt, aber Button scheint noch da zu sein." )
200+ except Exception as click_error :
201+ logging .warning (f"Cookie konnte nicht geschlossen werden: { click_error } " )
202+ return
203+ except Exception :
204+ continue
205+
206+ logging .info ("Nom Nom Nom" )
174207 except Exception as e :
175- logging .warning (f"Cookie Fenster nicht klickbar: { e } " )
208+ logging .warning (f"Fehler im handle_cookie_banner: { e } " )
209+
210+ def goto_and_handle_cookies (page , url , wait_until = "domcontentloaded" , sleep_after = 0 ):
211+ page .goto (url , wait_until = wait_until )
212+ if sleep_after :
213+ time .sleep (sleep_after )
214+ handle_cookie_banner (page )
215+
216+ def wait_and_handle_cookies (page , state = "domcontentloaded" , sleep_after = 0 ):
217+ page .wait_for_load_state (state )
218+ if sleep_after :
219+ time .sleep (sleep_after )
220+ handle_cookie_banner (page )
176221
177222
178223def get_datenvolumen (page ):
@@ -249,6 +294,7 @@ def get_datenvolumen(page):
249294 return GB , is_community_plus
250295
251296
297+
252298def login_and_check_data ():
253299 global LAST_GB
254300 with sync_playwright () as p :
@@ -258,6 +304,8 @@ def login_and_check_data():
258304 logging .info (f"Starte { BROWSER } ..." )
259305 LAUNCH_ARGS = get_launch_args (BROWSER )
260306
307+ proxy_settings = {"server" : "http://127.0.0.1:8080" }
308+
261309 # Browser starten
262310 if BROWSER == "firefox" :
263311 browser = p .firefox .launch (headless = HEADLESS , args = LAUNCH_ARGS )
@@ -286,16 +334,12 @@ def login_erfolgreich(p):
286334 return False
287335
288336 # Dashboard aufrufen
289- page .goto (DASHBOARD_URL , wait_until = "domcontentloaded" )
290- time .sleep (3 )
291- handle_cookie_banner (page )
337+ goto_and_handle_cookies (page , DASHBOARD_URL , sleep_after = 3 )
292338
293339 # Prüfen ob auf Login-Seite umgeleitet wurde
294340 if "login" in page .url :
295341 logging .info ("Nicht eingeloggt - Login wird durchgeführt..." )
296- page .goto (LOGIN_URL )
297- page .wait_for_load_state ("domcontentloaded" )
298- handle_cookie_banner (page )
342+ goto_and_handle_cookies (page , LOGIN_URL )
299343
300344 logging .info ("Fülle Login-Daten aus..." )
301345 page .fill ('#input-5' , RUFNUMMER )
@@ -306,8 +350,6 @@ def login_erfolgreich(p):
306350
307351 logging .info ("Warte auf Login..." )
308352 time .sleep (8 )
309- page .wait_for_load_state ("domcontentloaded" )
310- handle_cookie_banner (page )
311353
312354 if login_erfolgreich (page ):
313355 logging .info ("Login erfolgreich - Cookies werden gespeichert." )
@@ -325,9 +367,7 @@ def login_erfolgreich(p):
325367 logging .info ("Alte Cookies wurden gelöscht, da ungültig." )
326368
327369 # Versuche Login erneut
328- page .goto (LOGIN_URL )
329- page .wait_for_load_state ("domcontentloaded" )
330- handle_cookie_banner (page )
370+ goto_and_handle_cookies (page , LOGIN_URL )
331371
332372 logging .info ("Fülle Login-Daten aus (Fallback)..." )
333373 page .fill ('#input-5' , RUFNUMMER )
@@ -338,8 +378,7 @@ def login_erfolgreich(p):
338378
339379 logging .info ("Warte auf Login... (Fallback)" )
340380 time .sleep (8 )
341- page .wait_for_load_state ("domcontentloaded" )
342- handle_cookie_banner (page )
381+
343382
344383 if login_erfolgreich (page ):
345384 logging .info ("Fallback-Login erfolgreich neue Cookies werden gespeichert." )
@@ -369,7 +408,6 @@ def login_erfolgreich(p):
369408
370409 interval = get_interval (config )
371410
372-
373411 if GB < 1.0 :
374412 logging .info ("Versuche, 1 GB Datenvolumen nachzubuchen..." )
375413
@@ -387,29 +425,54 @@ def login_erfolgreich(p):
387425 clicked = False
388426 for selector in selectors :
389427 try :
390- button = page .query_selector (selector )
391- if button and "1 GB" in button .text_content ():
392- if wait_and_click (page , selector ):
393- logging .info (f"Nachbuchungsbutton geklickt über Selector: { selector } " )
394- message = f"{ RUFNUMMER } : Aktuelles Datenvolumen: { GB :.2f} GB - 1 GB wurde erfolgreich nachgebucht. 📲"
395- send_telegram_message (message )
396- clicked = True
397- break
428+ elements = page .query_selector_all (selector )
429+ for button in elements :
430+ if not button or not button .is_visible ():
431+ continue
432+ text = button .text_content ().strip ()
433+ if "1 GB" in text or "1 GB" in text :
434+ if wait_and_click (page , selector ):
435+ logging .info (f"Nachbuchungsbutton geklickt über Selector: { selector } " )
436+ message = f"{ RUFNUMMER } : Aktuelles Datenvolumen: { GB :.2f} GB – 1 GB wurde erfolgreich nachgebucht. 📲"
437+ send_telegram_message (message )
438+ clicked = True
439+ break
440+ if clicked :
441+ break
398442 except Exception as e :
399- logging .warning (f"❌ Fehler beim Versuch mit Selector { selector } : { e } " )
443+ logging .warning (f"Fehler beim klicken : { e } " )
400444
401445 if not clicked :
402- raise Exception ("❌ Kein gültiger 1 GB-Button gefunden oder kein Klick möglich." )
403- interval = get_interval (config )
404- return interval
446+ logging .info ("Button nicht gefunden, Seite wird durchsuchst..." )
447+ try :
448+ all_buttons = page .query_selector_all ("one-button" )
449+ for btn in all_buttons :
450+ try :
451+ if not btn or not btn .is_visible ():
452+ continue
453+ text = btn .text_content ().strip ()
454+ logging .debug (f"Button-Text beim Durchlauf: { text } " )
455+ if "1 GB" in text or "1 GB" in text :
456+ btn .click ()
457+ logging .info ("Fallback erfolgreich." )
458+ send_telegram_message (f"{ RUFNUMMER } : Über Trick17 1 GB nachgebucht. 📲" )
459+ clicked = True
460+ break
461+ except Exception :
462+ continue
463+ except Exception as fallback_error :
464+ logging .warning (f"Fehler bei der Fallback Suche: { fallback_error } " )
465+
466+ if not clicked :
467+ raise Exception ("Kein gültiger 1 GB Button gefunden – auch Fallback versagte." )
405468
406469 else :
407470 logging .info (f"Aktuelles Datenvolumen: { GB :.2f} GB" )
408471 send_telegram_message (f"{ RUFNUMMER } : Noch { GB :.2f} GB übrig. Nächster Run in { interval } Sekunden. ✅" )
409472
410-
411473 return get_interval (config )
412474
475+
413476 except Exception as e :
414477 logging .error (f"Fehler im Versuch { attempt + 1 } : { e } " )
415478 send_telegram_message (f"{ RUFNUMMER } : ❌ Fehler beim Abrufen des Datenvolumens: { e } " )
@@ -421,7 +484,7 @@ def login_erfolgreich(p):
421484
422485 time .sleep (2 )
423486 logging .error ("Skript hat nach 3 Versuchen aufgegeben." )
424-
487+ return get_interval ( config )
425488
426489def get_smart_interval ():
427490 if LAST_GB >= 10 :
@@ -471,4 +534,4 @@ def get_interval(config):
471534 logging .info ("Starte neuen Durchlauf..." )
472535 interval = login_and_check_data ()
473536 logging .info (f"💤 Warte { interval } Sekunden..." )
474- time .sleep (interval )
537+ time .sleep (interval if interval is not None else 90 )
0 commit comments