Ich bin erfolgreich in der Lage gewesen, roh html (die mit einem anderen Produkt abgerufen wurde) dann phantomjs nehmen Sie diese Roh HTML und rendern die ganze Seite einschließlich der Ausführung alle/alle Javascript. Ich bin kürzlich auf eine Seite gestoßen, auf der JavaScript nicht gerendert wurde. DiesePhantomJs kann nicht eine bestimmte Seite von der Quelle
ist, wie ich es laufen ...
phantomjs myscript.js > OUTPUT.txt 2>&1
Hier ist die MyScript.js Datei, die das Problem veranschaulicht ...
var page = require('webpage').create(),
var system = require('system');
var address = 'http://cloud.firebrandtech.com/#!/login';
var rawHtml = '<!DOCTYPE html>\
<html>\
<head>\
<meta charset="utf-8">\
<meta http-equiv="X-UA-Compatible" content="IE=edge">\
<meta name="viewport" content="width=device-width, initial-scale=1.0">\
<meta name="description" content="Web Portal for managing Cloud Products, Assets, and Distributions">\
<meta name="author" content="Firebrand Technologies">\
<title>Firebrand Cloud</title>\
<link rel="stylesheet" href="/widgets/css/widgets.css">\
<link rel="stylesheet" href="/css/portal.css">\
</head>\
<body ng-app="portal" fc-app="cloud" fc-direct="true" class="fc">\
<div>\
<div data-ng-if="user.isLoaded" data-ng-controller="PortalCtrl">\
<div data-ng-include="getView()"></div>\
<div class="container">\
<div data-ui-view></div>\
</div>\
</div>\
</div>\
<script src="/widgets/js/widgets.js"></script>\
<script src="/js/vendor.js"></script>\
<script src="/js/portal.js"></script>\
</body>\
</html>';
page.settings.resourceTimeout = 5000;
page.settings.loadImages = false;
page.setContent(rawHtml, address);
window.setTimeout(function() {
if(page.content.indexOf('Sign In') > -1)
console.log('YAY!!! Javascript Rendered!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
else
console.log('BOO!!! Javascript NOT Rendered!!!!!!!!!!!!!!!!!!!!!!!!!!')
phantom.exit();
}, 5000);
Scheint, wie diese Seite einige erfordert Auth/cors arbeiten. Ich kann es zum Laufen bringen, wenn phantomjs die tatsächliche Anfrage (mit page.open) macht, um die Quelle wie das folgende Beispiel zu erhalten. Diese Lösung wird jedoch für mich nicht funktionieren. Phantomjs muss die Quelle wie im obigen Beispiel verwenden (was, wie ich bereits erwähnt habe, für alle anderen Seiten gut funktioniert hat).
var page = require('webpage').create(),
var system = require('system');
var address = 'http://cloud.firebrandtech.com/#!/login ';
page.open(address, function(status) {
setTimeout(function(){
if(page.content.indexOf('Sign In') > -1)
console.log('YAY!!! Javascript Rendered!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
else
console.log('BOO!!! Javascript NOT Rendered!!!!!!!!!!!!!!!!!!!!!!!!!!')
phantom.exit();
}, 5000)
});
Ich habe bereits versucht, Fahnen wie die folgenden verwenden, aber sie scheinen keine Wirkung zu haben ...
phantomjs --web-security=false --ignore-ssl-errors=true thefilebelow.js > OUTPUT.txt 2>&1
So ... das ist die Antwort auf Ihre Frage? – Vaviloff
Ja, ich kann es nur als Antwort bis morgen wählen. – sjdirect