Heim  >  Artikel  >  Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

藏色散人
藏色散人nach vorne
2019-01-21 11:12:204418Durchsuche

Verwenden Sie die Programmautomatisierung zum Aktualisieren und klicken Sie, um Tickets zu erhalten, und schon haben Sie dieses Python-Programm zum Erfassen von Tickets. Dieses Programm ist eine Python-Simulation der manuellen Bedienung eines Browsers, sodass das Programm aufgrund verschiedener Netzwerk- oder anderer Faktoren möglicherweise beendet wird. In diesem Artikel werden hauptsächlich die beiden Optimierungspunkte beim Hinzufügen der Zugauswahlfunktion und der Sitzplatzauswahlfunktion erläutert.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

Empfohlene Referenzstudie: „Python-Tutorial

Automatischer Ticket-Grabbing-Prozess

1. Lassen Sie uns zunächst den optimierten Ticket-Grab-Prozess klären.

2. Starten Sie automatisch den Browser und geben Sie automatisch das im Programm festgelegte 12306-Anmeldekonto und Passwort ein.

3. Die grafische Eingabe des Bestätigungscodes ist zu kompliziert und erfordert eine Bilderkennung mit künstlicher Intelligenz. Die Erfolgsquote ist nicht hoch, wenn Sie die Bestätigung eingeben Geben Sie den Code dann manuell ein. Klicken Sie dann manuell auf die Schaltfläche „Anmelden“.

4. Nach erfolgreicher Anmeldung wird die Seite automatisch überprüft. Nach Bestätigung der erfolgreichen Anmeldung wird automatisch zur Ticketprüfungsseite gesprungen. Überprüfen Sie Tickets anhand des in Ihrem eigenen Programmcode eingegebenen Abfahrtsorts und Ziels.

5. Überprüfen Sie anhand der von Ihnen eingegebenen Zugnummer, ob die Schaltfläche „Reservierung“ rechts hervorgehoben und anklickbar ist. Klicken Sie weiterhin auf die Schaltfläche „Abfrage“ und aktualisieren Sie die Seite bis Tickets vorhanden sind und klicken Sie auf die Schaltfläche „Button“.

6. Senden Sie die Bestellseite, wählen Sie den Passagier aus und wählen Sie den Sitzplatztyp aus, z. B. einen Sitzplatz in der zweiten Klasse. Die Seite kehrt zur Seite für die Zugticketabfrage zurück und erneut abfragen, und so weiter.

7. Nachdem Sie sich die gewünschten Tickets gesichert haben, senden Sie die Bestellung ab, senden Sie die E-Mail und fertig!

Anmeldeseite

Ich habe das Browserfenster für diesen Teil nicht auf Vollbild eingestellt, daher sind einige Elemente unterschiedlich Möglicherweise ist das Klicken nicht möglich.

Nach der Anmeldung wird möglicherweise eine Meldung zu möglichen Problemen mit dem Netzwerk angezeigt. Es handelt sich wahrscheinlich um ein Serverproblem. Klicken Sie zu diesem Zeitpunkt manuell auf die Schaltfläche „Zurück“ in der oberen linken Ecke Wenn die Eingabeaufforderung nach einmaligem Klicken immer noch vorhanden ist, klicken Sie zweimal.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

Abfrageseite

Abfrage der Zugticketseite. Während der Hauptverkehrszeit wird auf dieser Seite auch eine Timeout-Eingabeaufforderung angezeigt. Es wird geschätzt, dass darauf zugegriffen wird. Aufgrund von Serveranomalien, die durch zu viele Personen verursacht werden, können Tickets manchmal sehr schnell gefunden werden, ich kann jedoch keine spezifischen Muster erkennen.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

Das Programm wird für uns automatisch aktualisiert, bis die Seite mit den Tickets aktualisiert wird: 1 Sekunde/Zeit.

Die Zugauswahlfunktion ist eine Funktion, die allen am meisten am Herzen liegt. Bisher war die Reihenfolge alle Züge. Diesmal können Sie die entsprechende Nummer entsprechend der Position des Zuges eingeben Beispiel: Der Zug, den Sie buchen möchten, befindet sich in Zeile 5. Sie legen einfach order = 5 fest. Was die Konfiguration dieser Parameter betrifft, werden wir sie unten auflisten.

Bestellseite senden

Bestellseite senden Das Programm führt zwei Dinge aus: Die erste ist die Auswahl basierend auf dem von Ihnen eingegebenen Passagiernamen und die zweite ist die Die Beurteilung basiert auf den eingegebenen Sitzplätzen. Wenn für die von Ihnen gewünschten Sitzplätze Tickets vorhanden sind, wählen Sie diese aus und senden die Bestellung ab. Wenn für die von Ihnen gewünschten Sitzplätze keine Tickets vorhanden sind, kehren Sie zur vorherigen Seite zurück und fragen die Tickets erneut ab. Überprüfen Sie die Sitzplätze usw., bis Sie die gewünschten Tickets buchen.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

Anleitung zum Ändern wichtiger Parameter

Hier kommt der entscheidende Punkt, wenn Sie ihn nicht verstehen Wenn Sie den Quellcode direkt ausführen möchten, lesen Sie ihn sorgfältig durch. Nachdem Sie den Quellcode für die Ticketerfassung erhalten haben, müssen Sie die folgenden Dinge beachten und konfigurieren.

Python-Umgebungskonfiguration

Die Python-Umgebung, die ich für dieses Programm verwendet habe, ist Python 3.6. Eigentlich sollte alles über 3.5 in Ordnung sein. Laden Sie das Installationspaket von Python3 von der offiziellen Website herunter. Denken Sie daran, die Option „Python 3.x zu PATH hinzufügen“ zu aktivieren. Der Vorteil dieser Option besteht darin, dass die Umgebungsvariablen nach Abschluss der Installation automatisch konfiguriert werden , ohne dass Python2.x manuell installiert werden muss. Der nächste Schritt ist eine narrensichere Installation. Wenn Sie nach Abschluss der Installation Python in das Terminal eingeben, um die Version anzuzeigen, ist die Installation erfolgreich. Wenn Sie immer noch nicht wissen, wie es geht, empfehle ich Ihnen, es online auszuprobieren. Es gibt viele Online-Tutorials.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

Pip-Tool

Pip ist ein allgemeines Python-Bibliotheksverwaltungstool. Es ist sehr praktisch, Pip zum Installieren und Verwalten von Bibliotheken zu verwenden . Nachdem der erste Schritt abgeschlossen ist, wird das Pip-Tool mitgeliefert. Sie können den Befehl „Pip List“ im Terminal eingeben, um alle Python-Bibliotheken anzuzeigen, die Sie gerade installieren.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

Installieren und importieren Sie die entsprechenden Bibliotheken

Die in diesem Programm verwendete Hauptbibliothek ist Splitter. Diese Bibliothek wird hauptsächlich zum Ansteuern des Browsers zum Betreiben der Seite verwendet Installieren Sie es direkt.

pip install splinter

Die chinesische Dokumentenadresse für Splinter-bezogene Tutorials lautet wie folgt. Wenn Sie interessiert sind, können Sie mehr darüber erfahren.

https://splinter-docs-zh-cn.readthedocs.io/zh/latest/tutorial.html

Nachdem die Installation abgeschlossen ist, importieren Sie diese Bibliothek mit Import in die IDE. Wenn sie immer noch nicht verwendet werden kann, denken Sie daran, sie im Editor zu installieren und in den Einstellungen zu installieren. Siehe das Bild unten.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

Python muss zwei Module verwenden, die mit Python geliefert werden: smtplib und email. Direkt importieren ohne Download.

Das Einzige, was wirklich installiert werden muss, ist die Splitterbibliothek. Andere können direkt importiert und im Editor importiert werden.

from splinter.browser import Browser
from time import sleep
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.header import Header

Laden Sie den Browser-Treiber herunter und geben Sie den Pfad an

Diese Frage taucht häufig auf: Warum müssen Sie den Browser-Treiber herunterladen? Da das Grundprinzip der Splitterbibliothek darin besteht, den Browser dazu zu bringen, entsprechende Vorgänge über WebDriver auszuführen, müssen Sie den entsprechenden Browsertreiber herunterladen, um den entsprechenden Browser verwenden zu können. Ich verwende den Chrome-Browser, also habe ich Chromedriver heruntergeladen. Hier gibt es eine Zuordnungsbeziehung zwischen Chromedriver und Chrome-Browser. Die Zuordnungsbeziehung ist wie folgt:

ChromeDriver v2.43 (2018-10-16)----------Supports Chrome v69-71
ChromeDriver v2.42 (2018-09-13)----------Supports Chrome v68-70
ChromeDriver v2.41 (2018-07-27)----------Supports Chrome v67-69
ChromeDriver v2.40 (2018-06-07)----------Supports Chrome v66-68
ChromeDriver v2.39 (2018-05-30)----------Supports Chrome v66-68
ChromeDriver v2.38 (2018-04-17)----------Supports Chrome v65-67
ChromeDriver v2.37 (2018-03-16)----------Supports Chrome v64-66
ChromeDriver v2.36 (2018-03-02)----------Supports Chrome v63-65
ChromeDriver v2.35 (2018-01-10)----------Supports Chrome v62-64

(Chrome- und ChromeDriver-Zuordnungstabelle)

Kopieren Sie nach dem Herunterladen und Dekomprimieren von Chromedriver dessen Pfad und ersetzen Sie den Pfad in Zeile 33 des Quellcodes.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen

Einstellungen für die E-Mail-Benachrichtigungsfunktion

Nach der Installation der entsprechenden Bibliothek oben müssen folgende Informationen ausgefüllt werden: Absender und Empfänger Die E-Mail-Adresse des Absenders und der Autorisierungscode des Absenders. Daher sind die Positionen, die geändert werden müssen, das E-Mail-Konto des Absenders und das E-Mail-Konto des Empfängers in den Zeilen 51 und 52 in der sendMail-Funktion sowie der Autorisierungscode der E-Mail des Absenders in Zeile 61.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen


Referenzartikel zum Erhalten des Autorisierungscodes 30 Zeilen Python-Code zum automatischen Senden und Empfangen von E-Mails Ich verwende zum Senden von E-Mails mein kleines QQ-Postfach und das Postfach des Empfängers ist mein großes QQ-Postfach. Ich habe es versucht. Der Absender und der Empfänger im QQ-Postfach können identisch sein, d Im Allgemeinen ist der Vorgang aufgrund des falschen Autorisierungscodes fehlgeschlagen. Bitte besorgen Sie sich den Autorisierungscode erneut.

Der dem Sitzplatz entsprechende Wert

Nach dem Debuggen wurde festgestellt, dass der den verschiedenen Sitzplätzen entsprechende Wert unterschiedlich ist.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen


Nach vielen Debugging-Vorgängen habe ich die Wertwerte, die den verschiedenen Sitzplätzen entsprechen, in einer Tabelle organisiert.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen


Der Ort der Codeänderung befindet sich in den Zeilen 112 und 113 des Quellcodes. Beide Zeilen müssen geändert werden, damit sie den gewünschten Sitzplätzen entsprechen . Der Wert reicht aus.

12306 Benutzername und 12306 Login-Passwort

Ändern Sie einfach diese beiden Elemente in der Hauptfunktion in Ihre eigenen. Ändern Sie einfach die Zeilen 114 und 145 des Quellcodes in Ihren eigen.

Auswahl der Zugnummer

Die Anzahl der Züge wird durch das Bestellfeld dargestellt
0 steht für alle Zugzeiten, 1 steht für die Anzahl der Züge im ersten Reihe und 2 stellt die Anzahl der Züge in der zweiten Reihe dar und so weiter. Im Allgemeinen sind nach der Eingabe von Start- und Zielort die Standorte aller Züge festgelegt. Sie können einfach die Standortnummer des Zuges eingeben, den Sie buchen möchten. Der Speicherort für die Änderung des Quellcodes befindet sich ebenfalls in der Hauptfunktion, Zeile 146.

Passagiernamenformat

Passagiernamen, z. B. Passagiere = ['XXX', 'XXX'], unterstützen Mehrfachauswahl. Beachten Sie, dass Studententickets markiert werden müssen. Hinweis: Die Clear-Methode lautet: Passagiere = ['XXX(student)', 'XXX'], andernfalls wird ein Fehler gemeldet. Der Speicherort der Quellcode-Änderung befindet sich auch in der Hauptfunktion, Zeile 149.

Fahrdatumsformat

Fahrdatum, das Format ist: „28.01.2019“, der Quellcode-Änderungsort befindet sich auch in der Hauptfunktion, Zeile 151 .

Abflug- und Ziel-Cookies abrufen

Aus Zeitgründen ist dies nicht optimiert. Derzeit können Sie die Abfahrts- und Zieladresse nur manuell suchen, abrufen und öffnen Ihre eigene 12306 Gehen Sie zur Seite zur Zugticketabfrage und geben Sie den Abfahrts- und Zielort ein. Öffnen Sie den Debugging-Modus der Seite, verwenden Sie die Tastenkombination F12 oder klicken Sie mit der rechten Maustaste auf „Inspizieren“, um den Debugging-Modus zu öffnen, wählen Sie Netzwerk aus und klicken Sie auf die Schaltfläche „Abfrage“, um die dem Ursprung und Ziel entsprechenden Cookies abzurufen. Der Speicherort für die Änderung des Quellcodes befindet sich ebenfalls in der Hauptfunktion, Zeilen 153 und 155.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen


Zusammenfassend muss das Obige geändert werden, Chromedriver-Pfad: Innerhalb der Initialisierungsfunktion init, der E-Mail-Benachrichtigungsfunktion sendet und empfängt Postfächer. Die Kontonummer und der Absender-Autorisierungscode werden in der sendMail-Funktion geändert, und der entsprechende Sitzplatzwert wird in der check_ticket-Funktion geändert. Weitere Informationen umfassen: 12306 Benutzername, 12306 Passwort, Zugauswahl, Passagiername, Fahrtdatum, Die Cookie-Werte für Abreisedatum, Abfahrtsort und Ziel werden in der Hauptfunktion am Ende des Quellcodes geändert.

Das Python-Programm zur Ticketerfassung ist optimiert. Sie können die Zugnummer und den Sitzplatz auswählen


Wichtiger Hinweis: Aufgrund der begrenzten Zeit verfügt dieses Programm über viele Konfigurationselemente, diese sind jedoch in Ordnung Um Ticket zu erhalten, können wir nur eine weitere Methode ausprobieren. Dieses Programm simuliert beispielsweise die manuelle Bedienung des Browsers. Aufgrund der Netzwerkbeziehung bleibt die Seite jedoch nicht bestehen gefunden und das Programm stoppt auch. Wenn das Programm stoppt, können Sie es später nur noch weiter optimieren.


Stellungnahme:
Dieser Artikel ist reproduziert unter:Python知识圈. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen