samyun/southwest-price-drop-bot

Wer Versionen vor dem 30.6.2019 (< 3.4.0) einsetzt, sollte vielleicht ein sauberes Deployment machen – wir wechseln von Redis zu MongoDB, und das lässt sich nicht sauber übersetzen. Das kann lokal während der Entwicklung einigermaßen konsistent laufen.

Southwest Price Drop Bot

Mit diesem Tool können Sie den Preis von Southwest-Flügen überwachen, die Sie gebucht haben. Es benachrichtigt Sie, wenn der Preis unter den ursprünglich bezahlten Preis fällt. Dann können Sie den gleichen Flug erneut buchen und bekommen von Southwest eine Gutschrift für die Preisdifferenz. Mit diesem Tool können Sie auch den Preis für alle Southwest-Flüge an einem bestimmten Tag überwachen. Es benachrichtigt Sie, wenn ein Flug an diesem Tag unter den vorherigen günstigsten Flug fällt.

Beachten Sie, dass Sie einen Plivo-Account benötigen, um die SMS-Benachrichtigungen zu versenden und einen Mailgun-Account, um die E-Mail-Benachrichtigungen zu versenden. Sie können dieses Tool auch ohne diese Konten betreiben, aber Sie werden die Benachrichtigungen nicht erhalten.

Sie können sich mit einem von beiden einloggen:

Die zweite Option ist nett, wenn Sie den Zugang an Freunde und Familie weitergeben, da es nur Benachrichtigungen für den angegebenen Benutzernamen anzeigt. Beachten Sie, dass das Passwort für alle Konten gleich ist und der Administrator alle Alarme sehen kann.

Beim Erstellen von Alarmen beachten Sie, dass die E-Mail und die Telefonnummern optional sind. Wenn diese beiden leer gelassen werden, muss sich der Benutzer manuell anmelden, um Preissenkungen anzuzeigen.

Einsatz

  1. Klicken Sie auf diese Schaltfläche:
  2. Füllen Sie die Konfigurationsvariablen aus und klicken Sie auf Deploy
  3. Öffnen Sie das Heroku Scheduler aus dem Dashboard Ihrer App
  4. Fügen Sie eine stündliche Aufgabe hinzu, die npm run task:check

Wenn Updates verfügbar werden, müssen Sie diese selbst über die Heroku CLI bereitstellen. Diese App folgt in ihrer Versionierung SemVer, lesen Sie also unbedingt die Versionshinweise, wenn Sie eine größere Versionsänderung bereitstellen.

Hinweis: Bei der Bereitstellung von Versionen vor dem 9.4.2018 mit Mailgun müssen Konstanten verifiziert werden: MAILGUN_DOMAIN und MAILGUN_EMAIL.

Hinweis: Eingesetzte Versionen vor dem 21.7.2018 (< 3.2.0) auf Heroku müssen die PROXY Konstante verifizieren, wenn Sie einen Proxy für die Aufrufe verwenden möchten.

Screenshots

Southwest Bot Protection

Im Moment, Southwest blockiert erfolgreich Anfragen von diesem Projekt.

Southwest hat einige sehr ausgeklügelte Bot-Schutzmaßnahmen eingerichtet.

  • Heroku-IPs und andere Hosting-Provider werden für den Zugriff auf ihre Seite gesperrt. Lokale Bereitstellungen sollten auf ihre Website zugreifen dürfen, und einige andere Cloud-Provider können ebenfalls funktionieren. Der zuverlässigste Workaround ist die Verwendung eines privaten Proxy-Dienstes.
  • Es gibt auch ein trickreiches und verschleiertes Javascript, das Headless-Browser erkennt und sehr häufig aktualisiert wird. Es gibt eine Gemeinschaft von Leuten, die Umgehungen der Headless-Chrome-Erkennung implementieren, aber es ist ein Katz-und-Maus-Spiel.
    • https//github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth/
  • Verwenden Sie CHROME_DEBUG=true DEBUG="puppeteer:*" in Kombination mit node inspect, um seltsame Chrome-Probleme zu beheben.
    • Das Abfangen von Anfragen protokolliert alle URL-Ladeversuche und akzeptiert alle Anfragen.
    • slowmo ist aktiviert und headless ist deaktiviert
    • wird geöffnet vor einer Südwest-URL

Proxy-Informationen

Anweisungen zum Einsatz eines Proxys liegen außerhalb des Rahmens dieses Projekts. Hier sind jedoch einige Informationen über Proxys, die nützlich sein könnten:

  • Ein gehosteter (billiger) Proxy, der funktioniert, ist https://luminati.io. Er kostet weniger als $1 pro Monat und scheint zuverlässig zu sein. Die meisten öffentlichen Proxys scheinen nicht zu funktionieren, ich kann mir vorstellen, dass es eine Art öffentliche Proxy-Blockierliste gibt.
  • Sie könnten etwas wie Squid verwenden und es nativ, in einem Container oder in einer VM aufsetzen. Natürlich sollten Sie dies außerhalb von Heroku tun
  • Wenn Sie Squid verwenden, sollten Sie eine Port-Weiterleitung einrichten oder auf einem zufälligen Port laufen lassen und das squid.conf mit etwas wie diesem sperren, um zu verhindern, dass jemand Ihre Einrichtung als offenen Proxy verwendet:
acl swa dstdomain .southwest.comhttp_access allow swahttp_access deny all

Entwicklung

Um die Testsuite auszuführen:

yarn test

Um eine mit Alert und Flight Objekten bestückte Konsole zu starten:

yarn console

Beim Debuggen von Chrome/Puppeteer-Problemen ist es hilfreich, den folgenden Befehl zu verwenden:

DEBUG="puppeteer:*" CHROME_DEBUG=true node tasks/check.js

Dieser sendet hilfreiche Chromium-Debugging-Ausgaben in die Konsole und aktiviert einige zusätzliche Protokollierungen, die bei der Fehlersuche helfen.

Versionsgeschichte

– 2019-08-11

  • Aktualisierung der Abhängigkeiten, einschließlich yarn.lock
  • Aktualisierung auf Node v12

– 2019-06-30

  • Umzug von Redis zu MongoDB
  • Aktualisierung der Scraping-Logik
  • Verbesserung der Proxy-Unterstützung
  • Hinzufügen einiger Anti-Bot-Erkennungsmaßnahmen
  • Dank an @iloveitaly für diese Änderungen!

– 2018-12-25

  • Unterstützung für Prämienflüge (Punkte)
  • Abhängigkeiten auf aktuelle Versionen aktualisiert

– 2018-7-23

  • Merge PR von @GC-.Guy, um Proxy-Unterstützung in Checks zu beheben

– 2018-7-21

  • Merge PR von @GC-Guy, um Unterstützung für einen Proxy hinzuzufügen

– 2018-7-14

  • Update Paket.json
  • Merge PR from @evliu to target the price list items more dynamically

– 2018-6-14

  • Flugdaten werden nach dem Laden der Seite geladen – wait for .flight-stops selector
  • URL in aktuelles Format ändern
  • Test zur Behandlung des Falls „keine Preise gefunden“ korrigieren
  • Tests für erwartete fehlerhafte Eingaben hinzufügen

– 2018-5-24

  • Unit-Test für Alerts hinzufügen
  • Zusätzliche Protokollierung und Fehlerbehandlung hinzufügen
  • Versuch, die Speichernutzung durch manuellen Aufruf von about:Blank vor dem Schließen der Seite
  • Protokoll zu E-Mail-Link hinzufügen

– 2018-5-4

  • Fix Bug mit Absturz, wenn E-Mail oder Telefonnummer nicht gesetzt ist, aber der entsprechende Dienst aktiviert ist
  • Add semaphore to limit number of pages open at once – hopefully fixing the „Error: Seite abgestürzt“ Fehler. Begrenzt auf 5 Seiten. Standardmäßig auf 5 Seiten auf einmal – ENV.MAX_PAGES setzen, um zu ändern.

– 2018-4-29

  • Prüfungen für ungültige Fehler hinzufügen
  • Benachrichtigungsleisten für ungültige Parameter hinzufügen

– 2018-4-28

  • Vermeiden Sie mehrere Browserinstanzen während der Aufgabe:Check – Speicherverbrauch reduzieren
  • Add nodejs buildpack for Heroku deployment

– 2018-4-28

  • Refactor to support updated Southwest site redesign, Osmose durch Puppeteer ersetzen

– 2018-4-14

  • Unterstützung für die Suche nach dem günstigsten Flug an einem Tag hinzufügen

– 2018-4-9

  • Upstream-Änderungen von PetroccoCo (E-Mail-Handling) und pmschartz (Redesign)

– 2017-.12-2

  • Unterstützung von Mailgun und Plivo (E-Mail und sms)

– 2017-11-.30

  • Support Mailgun
  • Vorarbeiten

Attribution

Dies ist ein Fork von minamhere’s Fork von maverick915’s Fork von scott113341’s Originalprojekt.

Nachgelagerte Änderungen wurden integriert von:

  • PetroccoCo – Email Handling
  • pmschartz – Redesign

Danke an folgende Personen für ihre Beiträge:

  • @evliu – Dynamischere Ausrichtung der Preislistenartikel
  • @GC-Guy – Proxy-Unterstützung
  • @iloveitaly – MongoDB, aktualisierte Scraping/Proxy-Unterstützung, Anti-Bot-Erkennung
  • @ribordy – Lodash-Fix

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.