2016-08-27 3 views
1

Ich habe mehrere Tage damit verbracht, Antworten und Tests zu lesen und herauszufinden, wie man CasperJS zum Download einer Datei bringt, wenn die URL umgeleitet wird. Ich reproduziert mein Problem versucht, Firefox von https://firefox.com zum Download Ich erhalte Warnungen:Wie mit CasperJS herunterladen, wenn die URL umgeleitet wird

[warning] [phantom] Loading resource failed with status=fail (HTTP 200): https://download.mozilla.org/?product=firefox-48.0.2-SSL&os=linux64&lang=en-US 
[warning] [phantom] Loading resource failed with status=fail (HTTP 200): https://download-installer.cdn.mozilla.net/pub/firefox/releases/48.0.2/linux-x86_64/en-US/firefox-48.0.2.tar.bz2 

und eine 0 ?product=firefox-48.0.2-SSL&os=linux64&lang=en-US

Die zweite Warnung sagt mir casperjs bekommt die neue URL genannt Byte-Datei (beide die gleiche ZIP-Datei herunterladen, wenn Sie navigieren zu ihnen mit einem Browser)

Was fehlt mir, um die heruntergeladene Datei zu erfassen?

var casper = require('casper').create({ 
    pageSettings: { 
     userAgent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" 
    } 
}); 

casper.start().thenOpen("https://firefox.com", function() { 
    this.viewport(1200, 800); 
}); 

casper.then(function() { 
    this.click('li.os_linux64 a'); 
    this.wait(3000); 
}); 

casper.on('resource.received', function (resource) { 
    if (resource.stage !== "end") { 
     return; 
    } 
    if (resource.url.indexOf('download') > -1) { 
     this.download(resource.url, 'out/' + new String(resource.url).substring(resource.url.lastIndexOf('/') + 1)); 
    } 
}); 

casper.run(); 

Versionen:

casperjs 1.1.3
PhantomJS 2.1.1

Befehlszeile:

casperjs --verbose --log-level=warning --ssl-protocol=any --ignore-ssl-errors=true --web-security=no script.js 
+0

Vielleicht ist das nicht möglich? Das Herunterladen von Binärdateien scheint eine erforderliche Funktion für phantomjs https://github.com/ariya/phantomjs/issues/10052 zu sein – codywohlers

Antwort

1

ich meine eigene Frage beantwortet. Alle Beispiele, die ich sah

hatte
if (resource.stage !== "end") { 
    return; 
} 

in der casper.on('resource.received'... Funktion. Das Entfernen von führte dazu, dass der Download erfolgreich war. Ich bin mir nicht sicher, was es tut (oder jetzt nicht tut).

HINWEIS: Ich musste auch eine kleinere Download-Datei zum Testen verwenden, da es bei casperjs/phantomjs resource einen Timeout von 30 Sekunden gibt. siehe CasperJS File Download Times Out After 30 Seconds

Verwandte Themen