6

Ich versuche zu versuchen, eine CSV-Datei mit PhantomJS, von einer Dialogbox herunterladen (auf Platte speichern). Mit Firefox-Profil wäre dies ziemlich einfach, indem Sie die Eigenschaften des Browserprofils festlegen. Irgendwelche Vorschläge, wie Excel Datei in Phantomjs heruntergeladen werden könnte?Selenium-Phantomjs herunterladen csv

Dies ist, wie es firefox-Treiber erfolgen würde:

webdriver.PhantomJS(service_args=['--ignore-ssl-errors=true','--local-storage-path=/tmp']) 

und auf der Suche nach einer Möglichkeit, Eigenschaften einzustellen, die speichern auf der Festplatte überschreiben können, und:

profile = webdriver.firefox.firefox_profile.FirefoxProfile() 
profile.set_preference("browser.download.folderList",2) 
profile.set_preference("browser.download.dir",self.opts['output_dir']) 
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', ('application/octet-stream,application/msexcel')) 

ich PhantomJS Fahrer bin mit Legen Sie den MIME-Typ der Daten fest. Derzeit, ohne die Eigenschaften festgelegt, PhantomJS-Treiber, lädt die Datei nicht herunter.

Ich habe Links über die Vermeidung von Dialog usw. gelesen, aber in diesem Fall wird es benötigt.

+0

Was passiert, wenn Sie versuchen, die Datei auf diese Weise herunterzuladen? – That1Guy

+0

Ich habe ein Beispiel wie es in Firefox funktionieren würde. Ich bin auf der Suche nach einer Möglichkeit, Eigenschaften für PhantomjS-Treiber festzulegen, die das Speichern auf Datenträger überschreiben und den MIME-Typ der Daten festlegen können. Derzeit, ohne die Eigenschaften festgelegt, PhantomJS-Treiber, lädt die Datei nicht herunter. – Devesh

+0

Es gibt eine Abzweigung von [phantomjs] (https://github.com/Vitallium/phantomjs/tree/download-support), die anscheinend Download-Unterstützung bietet, siehe [diese Gruppenmeldung] (https://groups.google.com /forum/ #! msg/phantomjs/JChUakj - 24/epby47h3ZGAJ) – Faiz

Antwort

0

Ich hatte vor kurzem mit einem ähnlichen Problem zu kämpfen. Allerdings habe ich den Webtreiber gewechselt, weil er relativ einfach auf den Netzwerkverkehr zugreifen kann. Dies bedeutet, dass wenn eine Datei nicht direkt auf der Seite ist und eher übertragen wird, kann sie nicht in Phantom angezeigt werden. Es gibt ein paar Leute, die an der Arbeit arbeiten, aber ich fand, dass die meisten meiner Dateien übertragen wurden, und so war es einfacher für mich, Netzwerkverkehr mit dem Web-Treiber + Firebug + Net-Export zu sammeln.

jedoch in PhantomJS sehr hacky Weg, dies zu tun, wäre so etwas wie dies:

phantomjs.exe file_to_run.js > my_log.txt 

Wo Sie einfach die Konsole Inhalt einer Datei speichern. Sie werden jedoch wahrscheinlich Fehler und andere Nachrichten in Ihrer Datei erhalten. Sie könnten es reinigen, da Sie nur nach CDV suchen.

Aus meiner Sicht ist PhantomJS begrenzt, da der Entwickler eine sehr genaue Idee dafür hat, wie es sein sollte. Zum Beispiel haben sie die Unterstützung von Flash eingestellt. Es gibt keine einfache native Methode zum Herunterladen und Speichern von Dateien, so wie Sie es in Firefox tun können. Sie könnten einen anderen Webbrowser starten und diesen herunterladen. Aber ich denke, der einfachste Weg ist, CasperJS zu verwenden, das gut mit PhantomJS spielt. casperjs download csv file

ich, dass das Hauptproblem casper jedoch glaube, dass große Dateien nicht gut unterstützt bei der Verwendung:

Ein gutes Beispiel für casperJS mit Dateien zum Download finden Sie hier. Gibt es einen bestimmten Grund, warum Sie einen kopflosen Browser bevorzugen?