Skip to content
This repository has been archived by the owner on Jul 9, 2024. It is now read-only.

Cookie improvements #166

Merged
merged 6 commits into from
May 27, 2021
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
59 changes: 46 additions & 13 deletions tools/its.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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)))
Expand All @@ -254,6 +254,16 @@ 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))
try:
action.move_by_offset(randint(1, 100), randint(1, 100)).perform()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Man muss halt aufpassen, dass nicht aus versehen irgendwo auf einen Link geklickt wird

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wäre ja nicht schlimm oder?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah ne stimmt, da hatte ich einen Denkfehler, die Cookies bleiben ja erhalten, selbst wenn man auf die Startseite weitergeleitet wird ^^

Jedoch hätte ich evtl. noch einen anderen Verbesserungsvorschlag
Du könntest das ganze ja in einer Schleife machen, dann bräuchtest du nicht so viele Zeilen und nur 1 try / except

for i in range(3):
   try:
        action.move_by_offset(randint(1, 100), randint(1, 100)).perform()
        time.sleep(randint(1, 3))
   except Exception as error:
        #evt fehler in den Logs speichern, damit man weiß was los war
        pass

except:
pass
time.sleep(randint(1, 3))
try:
action.move_by_offset(randint(1, 100), randint(1, 100)).perform()
except:
pass


def driver_renew_cookies(self, driver, plz_impfzentrum):
Expand All @@ -273,6 +283,26 @@ def driver_renew_cookies(self, driver, plz_impfzentrum):
except:
return False

def driver_renew_cookies_code(self, driver, plz_impfzentrum, manual=False):
self.driver_enter_code(driver, plz_impfzentrum)
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")
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):
Expand Down Expand Up @@ -432,6 +462,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, manual=False):
"""
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), manual)



@retry_on_failure()
def book_appointment(self):
Expand Down Expand Up @@ -610,17 +652,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
})

"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
Expand Down