From 26b429ed29d92cfcb5d583d606fb94a2fa7cb0ad Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 26 May 2021 23:53:31 +0200 Subject: [PATCH 1/5] Cookie improvements --- main.py | 2 +- tools/its.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 6441b7eb..ecfa0df6 100755 --- a/main.py +++ b/main.py @@ -268,7 +268,7 @@ def gen_code(kontaktdaten): print("Falscheingabe! Bitte erneut versuchen:") # cookies erneuern und code anfordern - its.renew_cookies() + its.renew_cookies_code() token = its.code_anfordern(mail, telefonnummer, plz_impfzentrum, leistungsmerkmal) if token is not None: diff --git a/tools/its.py b/tools/its.py index d864a39f..6e709301 100644 --- a/tools/its.py +++ b/tools/its.py @@ -273,6 +273,26 @@ def driver_renew_cookies(self, driver, plz_impfzentrum): except: return False + def driver_renew_cookies_code(self, driver, plz_impfzentrum): + self.driver_enter_code(driver, plz_impfzentrum) + self.log.warn( + "Du hast jetzt 10 Sekunden Zeit möglichst viele Elemente im Chrome Fenster anzuklicken. Das Fenster schließt sich automatisch.") + time.sleep(10) + # prüfen, ob Cookies gesetzt wurden und in Session übernehmen + try: + cookie = driver.get_cookie("bm_sz") + time.sleep(10) + if cookie: + self.s.cookies.clear() + self.s.cookies.update({"bm_sz": cookie.get("value")}) + self.log.info("Browser-Cookie generiert: *{}".format(cookie.get("value")[-6:])) + return True + else: + self.log.error("Cookies können nicht erstellt werden!") + return False + except: + return False + def driver_book_appointment(self, driver, plz_impfzentrum): @@ -432,6 +452,18 @@ def renew_cookies(self): with self.get_chromedriver(headless=True) as driver: return self.driver_renew_cookies(driver, choice(self.plz_impfzentren)) + @retry_on_failure() + def renew_cookies_code(self): + """ + Cookies der Session erneuern, wenn sie abgelaufen sind. + :return: + """ + + self.log.info("Browser-Cookies generieren") + with self.get_chromedriver(headless=False) as driver: + return self.driver_renew_cookies_code(driver, choice(self.plz_impfzentren)) + + @retry_on_failure() def book_appointment(self): From b73c039ae40cec659a99b42f27171d908175e118 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 27 May 2021 12:59:34 +0200 Subject: [PATCH 2/5] cookie improvements+manual mode --- tools/its.py | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/tools/its.py b/tools/its.py index 6e709301..aa20ac53 100644 --- a/tools/its.py +++ b/tools/its.py @@ -4,7 +4,7 @@ import time from base64 import b64encode from datetime import datetime -from random import choice +from random import choice, randint from typing import Dict, List @@ -254,6 +254,10 @@ def driver_enter_code(self, driver, plz_impfzentrum): # Maus-Bewegung hinzufügen (nicht sichtbar) action.move_by_offset(10, 20).perform() + time.sleep(randint(1, 3)) + action.move_by_offset(randint(1, 9), randint(1, 9)).perform() + time.sleep(randint(1, 3)) + action.move_by_offset(randint(1, 15), randint(1, 15)).perform() def driver_renew_cookies(self, driver, plz_impfzentrum): @@ -273,15 +277,15 @@ def driver_renew_cookies(self, driver, plz_impfzentrum): except: return False - def driver_renew_cookies_code(self, driver, plz_impfzentrum): + def driver_renew_cookies_code(self, driver, plz_impfzentrum, manual=False): self.driver_enter_code(driver, plz_impfzentrum) - self.log.warn( - "Du hast jetzt 10 Sekunden Zeit möglichst viele Elemente im Chrome Fenster anzuklicken. Das Fenster schließt sich automatisch.") - time.sleep(10) + if manual: + self.log.warn( + "Du hast jetzt 30 Sekunden Zeit möglichst viele Elemente im Chrome Fenster anzuklicken. Das Fenster schließt sich automatisch.") + time.sleep(30) # prüfen, ob Cookies gesetzt wurden und in Session übernehmen try: cookie = driver.get_cookie("bm_sz") - time.sleep(10) if cookie: self.s.cookies.clear() self.s.cookies.update({"bm_sz": cookie.get("value")}) @@ -453,7 +457,7 @@ def renew_cookies(self): return self.driver_renew_cookies(driver, choice(self.plz_impfzentren)) @retry_on_failure() - def renew_cookies_code(self): + def renew_cookies_code(self, manual=False): """ Cookies der Session erneuern, wenn sie abgelaufen sind. :return: @@ -461,7 +465,7 @@ def renew_cookies_code(self): self.log.info("Browser-Cookies generieren") with self.get_chromedriver(headless=False) as driver: - return self.driver_renew_cookies_code(driver, choice(self.plz_impfzentren)) + return self.driver_renew_cookies_code(driver, choice(self.plz_impfzentren), manual) @@ -642,17 +646,8 @@ def code_anfordern(self, mail, telefonnummer, plz_impfzentrum, leistungsmerkmal) elif res.status_code == 429: self.log.error( "Anfrage wurde von der Botprotection geblockt.\n" - "Es werden manuelle Cookies aus dem Browser benötigt.\n" - "Bitte Anleitung im FAQ in GitHub beachten.\n" - f"Link: {self.domain}impftermine/service?plz={plz_impfzentrum}") - cookies = input("> Manuelle Cookies: ").strip() - optional_prefix = "Cookie: " - if cookies.startswith(optional_prefix): - cookies = cookies[len(optional_prefix):] - self.s.headers.update({ - 'Cookie': cookies - }) - + "Es die Cookies müssen manuell im Browser generiert werden.\n") + self.renew_cookies_code(True) else: self.log.error(f"Code kann nicht angefragt werden: {res.text}") return None From c16d7069063a94dbcb41b788c2bd056fb1d9334b Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 27 May 2021 13:04:09 +0200 Subject: [PATCH 3/5] typo --- tools/its.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/its.py b/tools/its.py index aa20ac53..02fed0fc 100644 --- a/tools/its.py +++ b/tools/its.py @@ -646,7 +646,7 @@ def code_anfordern(self, mail, telefonnummer, plz_impfzentrum, leistungsmerkmal) elif res.status_code == 429: self.log.error( "Anfrage wurde von der Botprotection geblockt.\n" - "Es die Cookies müssen manuell im Browser generiert werden.\n") + "Die Cookies müssen manuell im Browser generiert werden.\n") self.renew_cookies_code(True) else: self.log.error(f"Code kann nicht angefragt werden: {res.text}") From 34b01ef7d240994ae223da74c7fb7de9fbe3ce28 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 27 May 2021 16:30:59 +0200 Subject: [PATCH 4/5] higher random values --- tools/its.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/its.py b/tools/its.py index 02fed0fc..c4443d32 100644 --- a/tools/its.py +++ b/tools/its.py @@ -245,7 +245,7 @@ def driver_enter_code(self, driver, plz_impfzentrum): # Klick auf "Termin suchen" button_xpath = "/html/body/app-root/div/app-page-its-login/div/div/div[2]/app-its-login-user/" \ - "div/div/app-corona-vaccination/div[3]/div/div/div/div[1]/app-corona-vaccination-yes/" \ + "div/div/app-corona-vaccination/div[3]/div/div/div/div[1]/app-corona-vaccination-yes/" \ "form[1]/div[2]/button" button = WebDriverWait(driver, 1).until( EC.element_to_be_clickable((By.XPATH, button_xpath))) @@ -255,9 +255,15 @@ def driver_enter_code(self, driver, plz_impfzentrum): # Maus-Bewegung hinzufügen (nicht sichtbar) action.move_by_offset(10, 20).perform() time.sleep(randint(1, 3)) - action.move_by_offset(randint(1, 9), randint(1, 9)).perform() + try: + action.move_by_offset(randint(1, 100), randint(1, 100)).perform() + except: + pass time.sleep(randint(1, 3)) - action.move_by_offset(randint(1, 15), randint(1, 15)).perform() + try: + action.move_by_offset(randint(1, 100), randint(1, 100)).perform() + except: + pass def driver_renew_cookies(self, driver, plz_impfzentrum): From bcc04fd6c721051ed488334fb702ae5b857ddec7 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 27 May 2021 18:14:41 +0200 Subject: [PATCH 5/5] code reduce --- tools/its.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/tools/its.py b/tools/its.py index c4443d32..707e68a4 100644 --- a/tools/its.py +++ b/tools/its.py @@ -253,17 +253,12 @@ def driver_enter_code(self, driver, plz_impfzentrum): action.move_to_element(button).click().perform() # Maus-Bewegung hinzufügen (nicht sichtbar) - action.move_by_offset(10, 20).perform() - time.sleep(randint(1, 3)) - try: - action.move_by_offset(randint(1, 100), randint(1, 100)).perform() - except: - pass - time.sleep(randint(1, 3)) - try: - action.move_by_offset(randint(1, 100), randint(1, 100)).perform() - except: - pass + for i in range(3): + try: + action.move_by_offset(randint(1, 100), randint(1, 100)).perform() + time.sleep(randint(1, 3)) + except: + pass def driver_renew_cookies(self, driver, plz_impfzentrum):