Ich möchte Folgendes tun. Melden Sie sich bei einer Website an, klicken Sie auf einige bestimmte Links und dann auf einen Download-Link. Ich möchte dies entweder als geplante Aufgabe unter Windows oder als Cron-Job unter Linux ausführen. Ich bin nicht wählerisch in Bezug auf die Sprache, die ich verwende, aber ich möchte, dass dies ausgeführt wird, ohne dass ein Browserfenster auf dem Bildschirm angezeigt wird, wenn dies möglich ist.
70
Antworten:
Hier ist eine Liste von Headless-Browsern, die ich kenne:
Headless-Browser, die JavaScript über ein emuliertes DOM unterstützen, haben im Allgemeinen Probleme mit einigen Websites, die erweiterte / undurchsichtige Browserfunktionen verwenden, oder Funktionen mit visuellen Abhängigkeiten (z. B. über CSS-Positionen usw.), während die reine JavaScript-Unterstützung in diesen Browser sind in der Regel vollständig, die tatsächlich unterstützten Browserfunktionen sollten nur teilweise betrachtet werden.
(Hinweis: In der Originalversion dieses Beitrags wurde nur HtmlUnit erwähnt, daher die Kommentare. Wenn Sie andere kopflose Browser-Implementierungen kennen und über Bearbeitungsrechte verfügen, können Sie diesen Beitrag bearbeiten und hinzufügen.)
quelle
Schauen Sie sich Twill an , eine sehr praktische Skriptsprache für genau das, was Sie suchen. Aus den Beispielen :
Es gibt auch eine Python-API, wenn Sie mehr Flexibilität suchen.
quelle
Schauen Sie sich PhantomJS an , ein JavaScript-basiertes Automatisierungsframework, das für Windows, Mac OS X, Linux und andere * ix-Systeme verfügbar ist.
Mit PhantomJS können Sie Folgendes tun:
Oder bewerten Sie den Titel einer Seite :
Beispiele von der PhantomJS-Schnellstartseite . Mit der render () -Methode können Sie eine Seite sogar in PNG, JPEG oder PDF rendern .
quelle
Ich habe das einmal mit dem Internet Explorer ActiveX-Steuerelement (WebBrowser, MSHTML) gemacht. Sie können es instanziieren, ohne es sichtbar zu machen.
Dies kann mit jeder Sprache erfolgen, die COM unterstützt (Delphi, VB6, VB.net, C #, C ++, ...).
Dies ist natürlich eine schnelle und schmutzige Lösung und möglicherweise in Ihrer Situation nicht angemessen.
quelle
PhantomJS ist ein kopfloser WebKit-basierter Browser, den Sie mit JavaScript skripten können.
quelle
Mit Ausnahme des automatischen Downloads der Datei (da dies ein Dialogfeld ist) wird dies in einem Gewinnformular mit der eingebetteten Websteuerung ausgeführt.
Sie könnten sich Watin und Watin Recorder ansehen . Sie können mit C # -Code helfen, der sich auf Ihrer Website anmelden, zu einer URL navigieren und möglicherweise sogar den Dateidownload automatisieren kann.
YMMV allerdings.
quelle
Wenn die Links bekannt sind (z. B. müssen Sie die Seite nicht nach ihnen durchsuchen), können Sie sie wahrscheinlich verwenden
wget
. Ich glaube, dass es das Staatsmanagement über mehrere Abrufe hinweg erledigen wird.Wenn Sie etwas unternehmerischer sind, würde ich mich mit den neuen Extras in Python 3.0 befassen . Sie haben die Schnittstelle zu ihrem HTTP-Stack überarbeitet und meiner Meinung nach eine sehr schöne Schnittstelle , die für diese Art von Skripten anfällig ist.
quelle
Node.js mit YUI auf dem Server. Schauen Sie sich dieses Video an: http://www.yuiblog.com/blog/2010/09/29/video-glass-node/
Der Typ in diesem Video, Dav Glass, zeigt ein Beispiel dafür, wie er mit Node eine Seite von Digg abruft. Dann befestigte er YUI an dem DOM, das er sich schnappte, und kann es vollständig manipulieren.
quelle
Wenn Sie PHP verwenden, versuchen Sie es mit http://mink.behat.org/
quelle
Sie können Watir mit Ruby oder Watin mit Mono verwenden.
quelle
Sie können auch Live-HTTP-Header (Firefox-Erweiterung) verwenden, um Header aufzuzeichnen, die an die Site gesendet werden (Login -> Links -> Download Link) und diese dann mit fsockopen mit PHP zu replizieren. Das einzige, was Sie wahrscheinlich ändern müssen, ist der Wert des Cookies, den Sie von der Anmeldeseite erhalten.
quelle
libCURL könnte verwendet werden, um so etwas zu erstellen.
quelle
Können Sie nicht einfach einen Download-Manager verwenden?
Es gibt bessere, aber FlashGet verfügt über eine Browser-Integration und unterstützt die Authentifizierung. Sie können sich anmelden, auf eine Reihe von Links klicken, diese in die Warteschlange stellen und den Download planen.
Sie könnten etwas schreiben, das beispielsweise als Proxy fungiert, der bestimmte Links abfängt und für den späteren Download in die Warteschlange stellt, oder ein Javascript-Lesezeichen, das die zu ändernden Links ändert
"http://localhost:1234/download_queuer?url=" + $link.href
dass die Downloads in diese Warteschlange gestellt werden - aber Sie würden den Download-Manager neu erfinden -Rad, und mit Authentifizierung kann es komplizierter sein ..Wenn Sie möchten, dass das Bit "Anmelden, Klicken auf Links" auch automatisiert wird, schauen Sie sich das Scraping von Bildschirmen an Sie sich das . Grundsätzlich laden Sie die Seite über eine HTTP-Bibliothek, suchen die Download-Links und laden sie herunter.
Leicht vereinfachtes Beispiel mit Python:
Das würde jeden Link auf example.com herunterladen, nachdem er sich mit dem Benutzernamen / Passwort von "Benutzername" und "Passwort" authentifiziert hat. Sie können natürlich mithilfe der HTML-Auswahl von BeautifulSoup spezifischere Links finden (z. B. können Sie alle Links mit der Klasse "Download" oder URLs finden, die mit beginnen
http://cdn.example.com
).Sie können das gleiche in so ziemlich jeder Sprache tun.
quelle
.NET enthält System.Windows.Forms.WebBrowser . Sie können eine Instanz davon erstellen, sie an eine URL senden und dann den HTML-Code auf dieser Seite einfach analysieren. Sie können dann allen gefundenen Links usw. folgen.
Ich habe mit diesem Objekt nur minimal gearbeitet, daher bin ich kein Experte, aber wenn Sie bereits mit .NET vertraut sind, lohnt es sich wahrscheinlich, es zu untersuchen.
quelle