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
- Klicken Sie auf diese Schaltfläche:
- Füllen Sie die Konfigurationsvariablen aus und klicken Sie auf
Deploy
- Öffnen Sie das
Heroku Scheduler
aus dem Dashboard Ihrer App - 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 mitnode inspect
, um seltsame Chrome-Probleme zu beheben.- Das Abfangen von Anfragen protokolliert alle URL-Ladeversuche und akzeptiert alle Anfragen.
-
slowmo
ist aktiviert undheadless
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