2017-06-01 26 views
0

Ich bin ein Neuling, vor kurzem begonnen, Phantomjs mit Casperjs zu verwenden. Ich möchte Informationen von einem iframe erhalten, aber phantomjs lädt sie nicht.Phantomjs kann iframe nicht laden

Das ist mein Skript:

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: "debug", 
    waitTimeout: 20000, 
    retryTimeout: 100, 
    viewportSize: { 
    width: 1920, 
    height: 1080 
    }, 
    pageSettings: { 
     "userAgent": 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1' 
    }, 
    localToRemoteUrlAccessEnabled: true 
}); 

casper.start(); 

casper.open('http://www.badboysbarber.ru/online'); 

casper.waitForSelector('.y-main-container', function() { 
    this.echo("Selector appeared."); 
}); 

casper.then(function() { 
    this.capture('screen.png'); 
}); 

casper.run(); 

So Phantom einen Fehler wirft (obwohl Selektor definiert ist richtig):

[error] [phantom] Wait timeout of 20000ms expired, exiting. 

Könnte jemand mir bitte helfen? Vielleicht mache ich etwas falsch? Vielen Dank.

Antwort

0

Ein iframe lädt ein Dokument in ein anderes Dokument. Wenn Sie mit Frames arbeiten und CasperJS verwenden möchten, benötigen Sie wahrscheinlich withFrame() in Casper.prototype.

Das folgende Skript fängt den rohen HTML Inhalt des ersten iframe in Ihrer Hauptseite:

var casper = require('casper').create({ 
    viewportSize: { 
    width: 1920, 
    height: 1080 
    }, 
    pageSettings: { 
    'userAgent': 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1' 
    }, 
    localToRemoteUrlAccessEnabled: true 
}); 

casper.start('http://www.badboysbarber.ru/online'); 

casper.withFrame(0, function() { 
    this.echo(this.getHTML()); // HTML code of the first iframe 
}); 

casper.run(); 
+0

Sorry, aber selbst wenn Sie withFrame Funktion verwenden, schlägt es ein iframe zu laden. Versuchen Sie einfach 'this.captureSelector ('selector.png', '.y-main-container');' anstelle von 'this.echo (this.getHTML());' mit der Funktion Frame zu verwenden, und Sie werden sehen. Das ist das ganze Problem. –

+0

Außerdem können Sie [this topic] (https://groups.google.com/forum/#!topic/casperjs/AtbXjGnp7M0) ebenfalls ansehen. –

+0

Wenn Sie den HTML-Code bekommen können, ist der 'iframe' offensichtlich geladen. Sie haben nur ein Problem mit "Capture". Ich habe 'this.capture ('screenshot.png');' in 'withFrame' mit SimmerJS ausprobiert und ich kann den' iframe' sehen, nicht nur wenn SimmererJS die Seite bearbeitet, sondern auch auf dem resultierenden Screenshot: http: // imgur.com/a/gWtiY – Badacadabra