Willst du eine PlayStation 5, aber

  • bist du muede, staendig den “Aktualisieren”-Button des Browsers zu druecken, um zu pruefen, ob der Shop sie auf Lager hat,
  • ist sie immer eine Minute nachdem irgendein Online-Shop sie angeboten hat ausverkauft,
  • bist du total genervt von Softwareentwicklern, die diese Bots erstellt haben, die alle PlayStations im Nu kaufen?

Nun, warum nicht Feuer mit Feuer bekaempfen und deinen eigenen Bot schreiben?

Dieser Beitrag ist ein Tutorial darueber, wie man einen Web-Bot mit Selenium in Python erstellt. Dieser Bot wird staendig eine Produktseite fuer die PlayStation 5 in einem beliebten Webshop in Deutschland ueberpruefen.

Ich habe ein Video gemacht, das zwei Szenarien zeigt. Im ersten aktualisiert der Browser periodisch und prueft die Produktseite der PlayStation 5, um zu sehen, ob sie verfuegbar ist. Zum Zeitpunkt der Aufnahme war sie nicht verfuegbar, also habe ich fuer die Demonstration des restlichen Kaufprozesses ein Produkt gewaehlt, das verfuegbar ist.

https://youtu.be/LSBEMbfQMww

Keine Sorge, wenn du einen Bot fuer einen anderen Shop brauchst - der Code ist einfach und kann leicht angepasst werden. Es gibt einige Links im Abschnitt “Ressourcen” am Ende des Dokuments, die dir helfen koennten, tiefer einzusteigen.

Der Code kann hier heruntergeladen werden: https://github.com/twissmueller/playstation-bot/tree/master

Haftungsausschluss: Bitte pruefe die Lizenz im Code-Repository. Kurz gesagt: Der Code wird wie besehen bereitgestellt. Du kannst mit dem Code machen, was du willst, aber beschuldige mich nicht, wenn du versehentlich dein Bankkonto leerst.

Was du brauchst, ist ein Computer mit:

  • Python 3 und pip
  • Chrome und ChromeDriver

Bitte stelle sicher, dass deine Chrome-Version mit ChromeDriver uebereinstimmt.

$ chromedriver --version
ChromeDriver 94.0.4606.41 (333e85df3c9b656b518b5f1add5ff246365b6c24-refs/branch-heads/4606@{#845})

Du kannst den Code von diesem Link bekommen: TODO GITHUB LINK

Wenn alles an seinem Platz ist, wechsle in das Verzeichnis und aktiviere die Python-Umgebung.

cd playstation-bot
source bin/activate

Dann installiere die Anforderungen mit:

python3 -m pip install -r requirements.txt

Bearbeite jetzt das Skript und gib den Benutzernamen und das Passwort fuer den Shop an und natuerlich das richtige Produkt, das du kaufen moechtest. Siehe Zeilen 6 bis 9.

Fuehre schliesslich das Skript aus:

python3 app.py

Je nachdem, welches Produkt adressiert wird, aktualisiert das Skript entweder periodisch die Seite oder legt das Produkt in den Warenkorb und faehrt mit dem Bestellvorgang fort.

Es gibt einen Vorbehalt: Das Skript fuehrt nicht den Zahlungsprozess durch, da dieser von der bevorzugten Zahlungsoption abhaengt. Zusaetzlich koennen einige Zahlungsanbieter wie PayPal 2-Faktor-Authentifizierung verwenden, was die Automatisierung komplizierter macht.

Um den Rest zu implementieren, ist noch etwas Arbeit erforderlich, aber zumindest ist das Produkt bereits im Warenkorb. Forke gerne das Repo und beende, was getan werden muss.

Wie funktioniert es?

Lass uns ein bisschen in die technischen Details gehen.

Was ist Selenium und wie kann es verwendet werden, um eine PlayStation zu kaufen?

Von der Selenium-Website:

Selenium is a suite of tools for automating web browsers.

So einfach ist das.

Selenium imitiert den Benutzer, sodass wir bestimmte Aufgaben automatisieren koennen, z.B. das Testen kompletter Websites.

Heruntergebrochen emulieren wir in diesem Tutorial drei einfache Aufgaben, die ein Benutzer normalerweise beim Besuch einer Website erledigt:

  • den Browser oeffnen und zur Produktseite navigieren
  • ein paar Buttons klicken
  • ein Formular ausfuellen

Einfach - dahinter steckt nicht viel mehr. Wirklich.

Das Code-Snippet zum Oeffnen der Produktseite ist:

PRODUCT = "<product_link>"
driver = webdriver.Chrome()
driver.get(PRODUCT)

Nur die PRODUCT-Variable muss geaendert werden, um das Skript an ein anderes Produkt anzupassen. Xbox jemand?

Jetzt ist der Browser mit der Produktseite geoeffnet und die naechsten Schritte, z.B. zu pruefen, ob der “In den Warenkorb”-Button gedrueckt werden kann, koennen ausgefuehrt werden.

Ein Element auf einer Seite kann leicht ueber seine ID angesprochen werden, z.B.

element = driver.find_element_by_id("mms-login-form__email")

Was, wenn ein Element keine ID hat? Dann koennen wir das Element ueber seinen XPath auswaehlen. Im Code geschieht dies in der Funktion zum Klicken eines Buttons:

element = driver.find_element(By.XPATH, f'//button[text()="{button_text}"]')

Mit dem Code element.click() wird der Button “geklickt”, aber manchmal funktioniert das nicht wegen der Art, wie die Entwickler JavaScript fuer ihre Buttons verwendet haben.

Daher habe ich eine andere Methode zum Klicken eines Buttons hinzugefuegt:

driver.execute_script("arguments[0].click();", element)

Schliesslich die Aktion zum Ausfuellen eines Formularelements, z.B. desjenigen fuer die E-Mail-Adresse:

driver.find_element_by_id("mms-login-form__email").send_keys(username)

Es gibt vielleicht noch eine letzte Frage: Woher kennen wir die IDs dieser Elemente?

Oeffne Chrome auf der Seite mit dem Element, das du identifizieren moechtest, klicke mit der rechten Maustaste und klicke auf “Untersuchen”. Pruefe dann das “id”-Feld dieses Elements.

Eine Seitenleiste oeffnet sich und zeigt den Quellcode mit dem ausgewaehlten Element.

Was, wenn es kein id-Attribut gibt? Klicke erneut mit der rechten Maustaste und waehle “Kopieren XPath”.

Fazit

Ich hoffe, dieses Tutorial hat dir einen Einblick gegeben, wie man Browser-Aufgaben fuer verschiedene Zwecke automatisiert. Entschuldigung, dass ich dich mit einem “Clickbait”-Titel in das Feld der Web-Frontend-Tests gelockt habe. Hinter dem Code steckt wirklich nicht viel und er ist leicht zu verstehen, oder?

Jedenfalls hoffe ich, dass dir dieses Tutorial gefallen hat!

Gerne kannst du mir einen Kaffee kaufen, wenn dir dieser Beitrag gefallen hat.

Fertig fuer heute!

Ressourcen