Skip to content

Commit 15fd569

Browse files
authored
Update at-extender.py
1 parent e0091c4 commit 15fd569

File tree

1 file changed

+99
-36
lines changed

1 file changed

+99
-36
lines changed

at-extender.py

Lines changed: 99 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def get_launch_args(browser):
3838
LOGIN_URL = "https://login.alditalk-kundenbetreuung.de/signin/XUI/#login/"
3939
DASHBOARD_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

4343
REMOTE_VERSION_URL = "https://raw.githubusercontent.com/Dinobeiser/AT-Extender/main/version.txt" # Link zur Version
4444
REMOTE_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

167167
def 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

178223
def get_datenvolumen(page):
@@ -249,6 +294,7 @@ def get_datenvolumen(page):
249294
return GB, is_community_plus
250295

251296

297+
252298
def 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

426489
def 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

Comments
 (0)