Wie lade ich eine Datei von einer Website herunter, auf der ein Popup-Formular angezeigt wird?

7

In den letzten Jahren konnten wir FedACHmit dem wgetDienstprogramm eine Datei von der Federal Reserve-Website (frbservices.org) herunterladen . Der folgende Link lieferte die ursprüngliche Lösung:

wget, wie man eine Datei von einer Webseite herunterlädt, die Sie auffordert, auf "Zustimmen" zu klicken

  1. Holen Sie sich die Cookies:

    wget --post-data="agreementValue=Agree" https://frbservices.org/EPaymentsDirectory/submitAgreement --save-cookies cookie.txt --keep-session-cookies --delete-after
  2. Laden Sie die Datei herunter:

    wget --load-cookies=cookie.txt 'https://frbservices.org/EPaymentsDirectory/FedACHdir.txt?AgreementSessionObject=Agree'

Wenn Sie diese wgetBefehle verwenden, werden sie nur heruntergeladen, https://www.frbservices.org/EPaymentsDirectory/download.htmlda die Website das Ausfüllen eines Popup-Formulars anfordert, nachdem Sie jetzt auf die Schaltfläche "Zustimmen" geklickt haben. Gibt es eine Möglichkeit, das Formular einfach mit zu schließen wget?

In IE und Chrome wurden die folgenden Schritte ausgeführt, um die gewünschte Datei herunterzuladen:

  1. Gehen Sie zur URL: https://www.frbservices.org/EPaymentsDirectory/FedACHdir.txt

  2. Klicken Sie auf die Schaltfläche Zustimmen.

  3. Das Formular wird angezeigt und fordert Organisationsinformationen an.

  4. Klicken Sie im Formular auf die Schaltfläche Schließen (ich habe keine Informationen eingegeben).

  5. Gehen Sie zur URL: https://www.frbservices.org/EPaymentsDirectory/FedACHdir.txt

  6. Datei erfolgreich heruntergeladen.

GMP
quelle

Antworten:

6

Für die Website müssen zwei Cookies gesetzt sein: A gültig JSESSIONID und das abaDataCaptureCookieaufgerufene Vertrags-Cookie. Der erste kann mit Ihrem ersten wgetBefehl abgerufen werden , der zweite muss manuell hinzugefügt werden.

  1. Erhalten Sie eine gültige JSESSIONID und speichern Sie sie unter cookies.txt:

    wget --post-data="agreementValue=Agree" frbservices.org/EPaymentsDirectory/submitAgreement --save-cookies cookies.txt --keep-session-cookies --delete-after
  2. Ergänzen Sie die abaDataCaptureCookie Zeile hinzu:

    echo -e "frbservices.org\tFALSE\t/EPaymentsDirectory/\tFALSE\t0\tabaDataCaptureCookie\tabaDataCaptureCookie" >>cookies.txt
  3. Laden Sie die Datei herunter:

    wget --load-cookies cookies.txt frbservices.org/EPaymentsDirectory/FedACHdir.txt

Ich bin mir nicht ganz sicher, wie lange das erste Cookie gültig bleibt, aber ich gehe davon aus, dass Sie die Liste nicht mehrmals pro Stunde herunterladen. Daher erscheint es mir in Ordnung, bei jedem Lauf eine neue zu erhalten - das ist schließlich der ausfallsichere Ansatz.

Skriptversion der obigen Schritte unter Verwendung einer Tempfile als Cookie-Datei:

#!/bin/bash
cookiefile=$(mktemp)
wget --post-data="agreementValue=Agree" frbservices.org/EPaymentsDirectory/submitAgreement --save-cookies $cookiefile --keep-session-cookies --delete-after
echo -e "frbservices.org\tFALSE\t/EPaymentsDirectory/\tFALSE\t0\tabaDataCaptureCookie\tabaDataCaptureCookie" >>$cookiefile
wget --load-cookies $cookiefile frbservices.org/EPaymentsDirectory/FedACHdir.txt

Durch Ausführen dieses Skripts wird der aktuelle FedACHdir.txtWert im aktuellen Verzeichnis gespeichert, ohne dass eincookies.txtWenn Sie gespeichert, herumliegen müssen. Wenn bereits eine Datei mit diesem Namen vorhanden ist, wird wgeteine Nummer hinzugefügt und als z FedACHdir.txt.1.

Bei der Behebung dieses Problems fand ich hier große Hilfe: Format von Cookies bei Verwendung von wget? · U & L.

Dessert
quelle
1
Fast vergessen, wie viel Spaß es macht, solche Dinge zu lösen.
Dessert
Danke Dessert. Die von Ihnen angegebenen Schritte haben meine Frage beantwortet.
GMP
@GMP Wenn diese Antwort Ihr Problem gelöst hat, nehmen Sie sich bitte einen Moment Zeit und akzeptieren Sie sie, indem Sie auf das Häkchen links klicken. Dadurch wird die Frage als beantwortet markiert und auf den Stack Exchange-Websites wird der Dank ausgesprochen.
Dessert