【问题标题】:Page is not completely loaded/rendered when onLoadFinished firesonLoadFinished 触发时页面未完全加载/渲染
【发布时间】:2014-12-02 23:04:02
【问题描述】:

我正在使用 Phantomjs 来检查我的应用程序。我正在查看的页面包含很多组件,并且由 Angularjs 提供支持。我的测试服务器很慢。在onLoadFinished 事件中,我正在使用渲染对网页进行成像:

page.onLoadFinished = function(response) {
    console.log(response, page.url);
    if (page.url.indexOf("login") == -1) {
        page.render('zoot.png');
        phantom.exit();
    }
};

我的问题是zoot.png 只包含网站的菜单栏。渲染了菜单栏的文本和静态图像,但图标是 X。主页区域为空白。预计会在右下角显示一个文本版本号。

render 发生时页面似乎没有完全绘制。是否还有其他事件意味着“完成并准备好使用”?

【问题讨论】:

    标签: javascript angularjs phantomjs


    【解决方案1】:

    您可能会找到一种方法 here 在 Angular 完成渲染时注册事件,但如果您愿意等待一段静态时间,则可能没有必要:

    page.onLoadFinished = function(response) {
        console.log(response, page.url);
        if (page.url.indexOf("login") == -1) {
            setTimeout(function(){
                page.render('zoot.png');
                phantom.exit();
            }, 1000);
        }
    };
    

    您也可以使用waitFor 显式等待选择器的出现,该选择器表示加载结束。

    注意page.open(url);page.onLoadFinished = finishedFunction;page.open(url, finishedFunction) 相同。

    【讨论】:

    • 谢谢!我不知道这是否是正确的答案,但它肯定会让我验证我对页面尚未完成加载的怀疑。如果我等了几秒钟但没有任何变化,那就是另一个问题。
    • 如果您不想等待静态时间,也可以使用waitFor
    • 我等了 10 秒钟。没有改变。我怀疑我没有处理重定向。
    • 但是如果出现重定向问题,屏幕截图上不会显示任何内容,对吗?请注册onConsoleMessageonErroronResourceErroronResourceTimeout 活动。可能有错误。
    • PhantomJS' onConsoleMessage() 报告了一个在 Chrome 中不会发生的错误(该站点运行正常)。该问题涉及浏览器历史记录中的某些内容未初始化。解决方案是通常无害的a.b = a.b || {}; 我还不知道我采取了什么代码路径来达到a.b 未定义的状态,但这超出了我的问题。再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多