Webanfragen mit Curl automatisieren?

13

Ich habe einige "korporative" Systeme, die ich bei der Arbeit verwenden muss. Einige von ihnen sind schrecklich, mit Bildern, Pop-ups und so weiter.

Ich habe darüber nachgedacht, einige Dinge mit Curl oder ähnlichem zu automatisieren. Ich brauche Login, klicke auf Hyperlinks, setze ein paar Daten und sie machen einen Beitrag.

Ist es möglich, Locken zu verwenden? Oder werde ich besser etwas wie Selen verwenden?

Jemand verwendet Sie immer noch MS-DOS
quelle
1
Ich würde dafür Pythons zope.testbrowser verwenden .
Phunehehe
2
Müssen Sie Javascript verwenden können?
Intuited
2
Bei der Verwendung einer Sitzung wird nur die Sitzungs-ID bei jeder Anforderung gesendet. Entweder in einem Cookie oder in einem GET-Parameter. wgetund curlkann die Netscape-Cookie-Datei verwenden. Wenn Ihr Browser auch eine solche Datei verwendet, reicht dies möglicherweise aus, um sie nur dem Downloader anzugeben. Also, welche Art von Browser verwenden Sie?
Manatwork
2
Kein Glück für eine einfache Lösung mit denen. Firefox und Chrome verwenden SQLite, Opera hat ein binäres Dateiformat. Sieht so aus, als müssten Sie nach der Sitzungs-ID suchen und sie manuell an den Downloader übergeben.
Handarbeit

Antworten:

13

Ja, mit Curl ist das völlig möglich. Am wichtigsten wird es sein, Cookies zwischen der Verwendung von curl mit zu speichern und neu zu laden --cookie-jar. Sie können bei Bedarf auch Formulardaten bereitstellen. Normalerweise verwende ich ein Firefox-Add-On namens Live HTTP-Header, um zu erfassen, was passiert, wenn ich auf einer Website navigiere. Es werden alle Überschriften, aber auch alle Formularbeiträge aufgezeichnet, was sehr hilfreich ist, wenn Sie herausfinden möchten, was mit Locken zu tun ist. Ich habe Bash-Skripte geschrieben, die verschiedene Curl-Aufrufe automatisieren und Pipes und temporäre Dateien (mit freundlicher Genehmigung von mktemp) verwenden, um eine begrenzte Verarbeitung auf der Webseite durchzuführen. Wenn ich jedoch viel Webseitenverarbeitung ausführen muss, wechsle ich normalerweise mit LibWWW zu Perl.

penguin359
quelle
Zusätzlich zu Firefox Live HTTP-Headern können sowohl Safari als auch Chrome die nach Objekten aufgeschlüsselten Header im Web Inspector anzeigen.
Bahamat
15

Verwenden Sie für einfache Fälle des Herunterladens des Inhalts einer Seite curl oder wget . Beide sind Befehlszeilentools, die zum Herunterladen von Dateien über HTTP entwickelt wurden und über viele Optionen verfügen. In Ihrem Fall müssen Sie wahrscheinlich dafür sorgen, dass diese Tools eher wie ein Browser aussehen. lutzkys antwort und penguin359s antwort erwähnen einige curl- und wget-optionen, die in dieser hinsicht nützlich sind.

Manchmal, wenn Sie sich anmelden müssen , ist es viel einfacher, sich zuerst manuell in einem Webbrowser anzumelden und dann die Cookies des Webbrowsers zu exportieren (Erweiterungen wie allcookies oder Cookies für Firefox exportieren können helfen).

Wenn Sie benötigen den Inhalt zu analysieren einiger Seiten oder Post Formen , können Sie schickere Werkzeuge als curl und wget benötigen. Einige gute Tools sind Perl mit LWP(libwww) und HTML::TreeBuilder(HTML-Tree) oder Python mit Standardbibliotheken (insbesondere httplibundhtmllib ).

Für komplexere Interaktionen mit einer Website ist die Referenz Perls WWW :: Mechanize . Diese Perl-Bibliothek definiert übergeordnete Funktionen für die Interaktion mit einer Website wie ein Webbrowser, einschließlich POST, Formularen, Cookies, aber nicht Javascript. Wenn Perl nicht Ihr Ding ist, enthält diese Bibliothek Imitationen mit ähnlichen Funktionen in anderen Sprachen, wie z. B. Python mechanize und Ruby Mechanize .

Wenn Sie schließlich Javascript benötigen , besteht der übliche Ansatz darin, einen Webbrowser zu verwenden, der von einem Browser-Automatisierungsframework gesteuert wird. Selen und Watir sind populäre Wahlen; Siehe auch Gibt es neben SeleniumRC noch andere gute Tools, mit denen Webseiten mit Inhalten abgerufen werden können, die mit JavaScript erstellt wurden?

Gilles 'SO - hör auf böse zu sein'
quelle
6

Mein Favorit ist wget, also gebe ich ein Beispiel dafür. Sie möchten Ihre Browsersitzung so genau wie möglich replizieren. Verwenden Sie dazu die entsprechenden Befehlszeilenargumente. Welche erforderlich sind, hängt davon ab, wie gründlich die Website Ihren Browser überprüft. --referer(sic) ist normalerweise ausreichend, aber Sie könnten auch --user-agentund brauchen --load-cookies.

Diese Technik ist im Grunde genommen Browser-Spoofing - Sie versuchen, sich wgetder Site als Browser zu präsentieren. Das größte Problem, dem Sie gegenüberstehen, ist CAPTCHA, das auf der von Ihnen angegebenen Beispielsite nicht vorhanden ist. Stellen Sie außerdem sicher, dass Sie die Zeitrichtlinien der Site einhalten (in diesem Fall 45 Sekunden), da Sie sonst wahrscheinlich blockiert werden.

Es ist wahrscheinlich nicht möglich, dieselbe Datei über verschiedene Sitzungen hinweg herunterzuladen - die Site gewährt einer bestimmten Sitzung Download-Berechtigungen für die jeweilige Datei.

Lutzky
quelle
Gute Antwort mit umfassenden Überlegungen. Vielen Dank
Xiaohan2012