2012-09-05 18 views
5

Ich versuche den WebDriver zu verwenden, um durch eine https-Site zu navigieren und eine Datei mit WebDriver herunterzuladen. Wenn ich es so gemacht habe, ist der Datei-Download-Dialog aufgetaucht.Laden Sie eine Datei über HTTP in WebDriver herunter

WebDriver driver = new ChromeDriver(); 
driver.get("http://xxx/file1.txt"); 

Ich frage mich, ist es eine Möglichkeit, ein Verfahren in WebDriver rufen Sie einfach die Datei mit regelmäßigen https anfordern herunterzuladen, ohne den Klick zu simulieren?

Vielen Dank im Voraus.

Antwort

8

Es gibt nicht, jedenfalls nicht in allen Browsern funktioniert. Möglicherweise können Sie einige Browser (Firefox und Chrome) so konfigurieren, dass Dateien ohne Aufforderung an einen bestimmten Speicherort heruntergeladen werden. Für etwas wie das, wonach du fragst, brauchst du Selen überhaupt nicht. Jeder programmatische HTTP-Client reicht aus. In Java würde ich empfehlen, HttpClient von Apache zu betrachten; in .NET mit einem HttpWebRequest wird die Arbeit erledigt. Wenn die Website, von der Sie die Datei herunterladen, eine Authentifizierung erfordert, müssen Sie möglicherweise benutzerdefinierte Header in Ihrer HTTP-Anforderung angeben.

Als Nebenbemerkung möchten Sie vielleicht neu bewerten, warum Sie das Herunterladen einer Datei testen sollten, wenn es nicht so einfach ist, eine HTTP-Anfrage außerhalb des Browsers auszuführen. This article diskutiert das Problem sehr detailliert und bietet ein sehr durchdachtes Argument, warum das Herunterladen einer Datei problematisch und oft unnötig ist.

+0

Danke, aber ich muss sich zuerst anmelden und dann auf die Download-Seite erhalten Sie die URL und kriechen. Treffer direkt auf die URL funktionieren aufgrund des Autorisierungsprozesses nicht. – zsong

+2

Um Sokratic für einen Moment zu bekommen, wie lädt der Browser die Datei nur mit HTTP? In vielen Fällen setzt der Authentifizierungsprozess ein Cookie mit Authentifizierungsinformationen, die dann in den Headern der HTTP-Anfrage übergeben werden. Glücklicherweise ermöglichen Ihnen HTTP-Clientbibliotheken normalerweise ein gewisses Maß an Kontrolle über die HTTP-Anforderungsheader, sodass Sie nur die Cookie-Informationen benötigen. Ich werde meine Antwort bearbeiten, um das Problem zu beheben, das in der ursprünglichen Frage nicht erwähnt wurde. – JimEvans

+1

Ich bin gespannt auf den Abschlag auf diese Antwort. Es ist technisch nicht falsch. Sein Ton ist nicht entzündlich. Es ist vielleicht nicht das, was Sie hören möchten, aber es mindert nicht die Nützlichkeit oder Korrektheit der Antwort. Wenn die Downvoter Kommentare abgeben würden, wo sie die Mängel in der Antwort finden, könnte sie verbessert werden. Ein einfaches Downvoting ohne weitere Rückmeldungen ist weder für den Beantworter noch für die, die danach kommen, hilfreich, um eine Antwort auf dieselbe oder eine ähnliche Frage zu finden. – JimEvans

6

Ja, Sie können. Sie müssen ein benutzerdefiniertes Chromedriver-Profil einrichten:

Es werden keine Dialogfelder angezeigt. Ich hatte eine detailliertere Antwort, wie man das Download-Verzeichnis einrichtet und validiert, dass die Datei eine gegebene Größe here hat.

Weitere chromedriver Schalter sind hier zu finden: http://peter.sh/experiments/chromium-command-line-switches/

Verwandte Themen