Phantomjs 幻影可以';无法从源代码呈现特定页面

Phantomjs 幻影可以';无法从源代码呈现特定页面,phantomjs,Phantomjs,我已经成功地获取了原始html(已通过另一个产品检索到),然后让phantomjs获取原始html并呈现整个页面,包括运行任何/所有javascript。我最近遇到了一个没有呈现javascript的页面 这就是我运行它的方式 phantomjs myscript.js > OUTPUT.txt 2>&1 下面是myscript.js文件,它演示了这个问题 var page = require('webpage').create(), var system = requir

我已经成功地获取了原始html(已通过另一个产品检索到),然后让phantomjs获取原始html并呈现整个页面,包括运行任何/所有javascript。我最近遇到了一个没有呈现javascript的页面

这就是我运行它的方式

phantomjs myscript.js > OUTPUT.txt 2>&1
下面是myscript.js文件,它演示了这个问题

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);
我已经尝试过使用下面这样的标志,但它们似乎没有效果

phantomjs --web-security=false --ignore-ssl-errors=true thefilebelow.js > OUTPUT.txt 2>&1

终于让它工作了

因为我使用了另一个产品(不是phantomjs)来检索页面源代码,所以我需要保存随该请求返回的cookie。然后我不得不用这样的方式把那些饼干递过来

var page = require('webpage').create(),
var system = require('system');
var address = 'http://cloud.firebrandtech.com/#!/login';
var rawHtml = 'same raw html as above...';

//THE NEXT 3 LINES ARE WHAT CHANGED
var cookiesFromInitialRequest = [{name: 'aaa', value: 'bbb', domain: 'ccc'}, etc...]
for(var i = 0; i < cookiesFromInitialRequest.length; i++)
    phantom.addCookie(cookiesFromInitialRequest[i])

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);
var page=require('webpage')。create(),
var系统=要求(“系统”);
var地址=http://cloud.firebrandtech.com/#!/登录';
var rawHtml='与上面相同的原始html…';
//接下来的3行是更改的内容
var cookiesFromInitialRequest=[{name:'aaa',value:'bbb',domain:'ccc'}等..]
for(变量i=0;i-1)
console.log('YAY!!!Javascript渲染!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
其他的
console.log('BOO!!!Javascript未呈现!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
phantom.exit();
}, 5000);

终于实现了这一目标

因为我使用了另一个产品(不是phantomjs)来检索页面源代码,所以我需要保存随该请求返回的cookie。然后我不得不用这样的方式把那些饼干递过来

var page = require('webpage').create(),
var system = require('system');
var address = 'http://cloud.firebrandtech.com/#!/login';
var rawHtml = 'same raw html as above...';

//THE NEXT 3 LINES ARE WHAT CHANGED
var cookiesFromInitialRequest = [{name: 'aaa', value: 'bbb', domain: 'ccc'}, etc...]
for(var i = 0; i < cookiesFromInitialRequest.length; i++)
    phantom.addCookie(cookiesFromInitialRequest[i])

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);
var page=require('webpage')。create(),
var系统=要求(“系统”);
var地址=http://cloud.firebrandtech.com/#!/登录';
var rawHtml='与上面相同的原始html…';
//接下来的3行是更改的内容
var cookiesFromInitialRequest=[{name:'aaa',value:'bbb',domain:'ccc'}等..]
for(变量i=0;i-1)
console.log('YAY!!!Javascript渲染!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
其他的
console.log('BOO!!!Javascript未呈现!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
phantom.exit();
}, 5000);

所以。。。这就是你问题的答案吗?是的,我明天才能选择它作为答案。所以。。。这就是你问题的答案吗?是的,我明天才能选择它作为答案。