Closed avierck closed 3 years ago
Der Name ist nicht frei wählbar. Im Endeffekt scannt der Bot nach dem 1:1 Namen im Dropdown. Wenn der Name abweicht kann er's auch nicht finden - heißt in dem Fall heißt die Option im Dropdown eben 70629 Leinfelden...
.
Wird nicht über die json abgerufen um evtl wichtige Cookies bei der Auswahl-Emulation mitzunehmen.
Hmm, ich glaube da habe ich mich unglücklich ausgedrückt; was ich meinte ist dass man aktuell z.B. einfach "70629 Messe Stuttgart" als location in der settings.py eingeben könnte (oder sich aus Versehen vertippen bei dem langen "richtigen" Namen) und der fix "{self.location[:5]}"
würde dann in den Optionen der Liste nur mit der PLZ abgleichen (was dann aber natürlich versagen könnte, falls zwei Zentren die gleiche PLZ haben).
Alternativ wäre es aber glaube ich zumindest gut einen Eintrag im log zu sehen, falls die gewünschte location nicht gefunden wurde. Ansonsten läuft das Skript ja einfach brav weiter und man bekommt nicht sofort mit wo's hängt.
Vielleicht in der Art?
try:
element = self.wait.until(EC.presence_of_element_located(
(By.XPATH, f'//li[@role="option" and contains(text() , "{self.location}")]')))
self.location_full = element.text
element.click()
self.logger.info(f'Selected Impfzentrum: {self.location_full}')
finally:
self.logger.warning(f'Impfzentrum {self.location} not found!')
Hey @avierck – kann man machen; denke ist ne ganz gute optionale Möglichkeit.
War die letzten 2-3 Wochen aber kein aufkommendes Problem – daher halte ich's jetzt nicht für soo wichtig das zu Over-Engineeren. Kannst aber gerne n PR stellen wenn du möchtest; kannst api.py
ggf. als Referenz nehmen.
Vorneweg: Tausend Dank, tolles Tool, mit minimalen Anpassungen direkt nach 24h meinen Impftermin bekommen 👍
Zum Problem: an dieser Stelle:
https://github.com/alfonsrv/impf-botpy/blob/995ffcfb74d6f3306db31e62b981d683981f0504/impf/browser.py#L187
wird versucht mittels
self.location
im Dropdown das gewünschte Impfzentrum auszuwählen; nach meiner Erfahrung klappt das leider nicht immer; Reutlingen und Tübingen waren kein Problem, aber wenn z.B.self.location = "70629 Messe Stuttgart"
war, ging es nicht mehr weiter zum nächsten Schritt (Leider erfolgt hier auch keine Fehlermeldung). Erst mit begrenzen der Optionen-Suche auf nur die Postleitzahl :kam dann im nächsten Schritt die Erfolgsmeldung "Selected Impfzentrum: 70629 Leinfelden-Echterdingen, KIZ Messe Stuttgart (Landkreis Esslingen)".
Alternativ könnte man wahrscheinlich auch - wie es scheinbar ja auf der Webseite funktioniert - aus den statischen Einträgen in 'https://www.impfterminservice.de/assets/static/impfzentren.json' die Strings für PLZ, Ort, und Zentrumsname zusammen-joinen und dann oben für die Auswahl benutzen.