work in progress

This commit is contained in:
Lukas 2021-05-28 20:17:36 +02:00
parent d6ebee766b
commit b04c48c26a
1 changed files with 155 additions and 0 deletions

155
C-Impf.py Normal file
View File

@ -0,0 +1,155 @@
"""
TBD
"""
__author__ = "Lukas Mahler"
__version__ = "0.0.2"
__date__ = "28.05.2021"
__email__ = "m@hler.eu"
__status__ = "Development"
# Standard
import os
import json
# Custom
from colorama import init, Fore, Style
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
def find_driver():
""" Check for chromedriver """
chrome_driver = None
try:
chrome_driver = os.getcwd() + "\\chromedriver.exe"
chrome_driver = chrome_driver.resolve()
os.path.isfile(chrome_driver)
except Exception as e:
# print("[DEBUG] Chromedriver wasn't found in current working directory")
pass
try:
chrome_driver = os.environ["PROGRAMFILES(x86)"] + r"\Google\Chrome\driver\chromedriver.exe"
os.path.isfile(chrome_driver)
except Exception as e:
# print(r"[DEBUG] Chromedriver wasn't found under %PROGRAMFILES(x86)%\Google\Chrome\driver")
pass
if not os.path.isfile(chrome_driver):
print("[ERROR] Couldn't find a Chromedriver, exiting...")
exit()
return chrome_driver
def driveroptions():
# Headless Chrome
chrome_options = Options()
# chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")
chrome_options.add_argument("--log-level=3") # Fatal
chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])
chrome_options.add_argument("--User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36")
return chrome_options
def set_local_storage(driver, key, value):
driver.execute_script("window.localStorage.setItem('{}',{})".format(key, json.dumps(value)))
def main():
init()
url = 'https://353-iz.impfterminservice.de/impftermine/service?plz=20357'
# test
url = 'https://226-iz.impfterminservice.de/impftermine/service?plz=22417'
url = 'https://226-iz.impfterminservice.de/impftermine/service?plz=22457'
chrome_driver = find_driver()
chrome_options = driveroptions()
driver = webdriver.Chrome(options=chrome_options, executable_path=chrome_driver)
driver.get(url)
print("Fix the fucking cookie banner")
set_local_storage(driver, "ets-plz", "20357")
set_local_storage(driver, "nfa-cookie-settings", {"essential": "true", "statistics": "false"})
set_local_storage(driver, "nfa-show-cinfo-20201110-VP1246", "false")
print("Reloading page...")
driver.get(url)
# print("[DEBUG] NOW AT:", driver.current_url)
element_anspruchpruefen = WebDriverWait(driver, 10).until(
ec.presence_of_element_located(
(By.CSS_SELECTOR, ".ets-radio-control+ .ets-radio-control span")
)
)
element_anspruchpruefen.click()
txt = ""
waiting = WebDriverWait(driver, 10).until_not(
ec.text_to_be_present_in_element(
(By.CSS_SELECTOR, ".in"), "Bitte warten"
)
)
if not waiting:
element = driver.find_element_by_css_selector(".in")
txt = element.text
if "keine freien Termine" in txt or txt == "":
print(Fore.RED + "=> keine Termine" + Style.RESET_ALL)
exit()
else:
print(Fore.GREEN + "=> Sieht gar nicht schlecht aus" + Style.RESET_ALL)
element_impfberechtigt = WebDriverWait(driver, 10).until(
ec.presence_of_element_located(
(By.CSS_SELECTOR, ".align-items-start .ets-radio-control:nth-child(1) span")
)
)
element_impfberechtigt.click()
element_alter = WebDriverWait(driver, 10).until(
ec.presence_of_element_located(
(By.NAME, "age")
)
)
element_alter.send_keys('26')
element_alter.send_keys(Keys.ENTER)
try:
waiting = WebDriverWait(driver, 3).until(ec.url_changes(url))
except TimeoutException:
print(Fore.RED + "=> Doch keine Termine" + Style.RESET_ALL)
exit()
element_email = WebDriverWait(driver, 10).until(
ec.presence_of_element_located(
(By.CSS_SELECTOR, "input[formControlName=email]")
)
)
element_email.send_keys('test@test.de')
element_tel = driver.find_element_by_css_selector("input[formControlName=phone]")
element_tel.send_keys('0000000000000000')
# Wait Hack, delete on production
input()
# Cleanup
driver.close()
if __name__ == "__main__":
main()