为什么Zombie.js不能使用Google Charts?

lad*_*dge 6 node.js zombie.js

我有一个加载Google Chart API的简单网页:

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
    google.charts.load("current", {packages:["corechart"]});
    console.log("load() called");
</script>
Run Code Online (Sandbox Code Playgroud)

当我用浏览器点击它时,它工作正常.在Chrome中,该load()调用会请求大量外部资源:

外部资源(Chrome)

Zombie中,只请求一个外部资源:

zombie Opened window http://localhost/graph  +7s
zombie GET http://localhost/graph => 200 +17ms
zombie Loaded document http://localhost/graph +15ms
zombie GET https://www.gstatic.com/charts/loader.js => 200 +71ms
load() called
zombie Event loop is empty +135ms
Run Code Online (Sandbox Code Playgroud)

这是我简单的Zombie代码,供参考:

Browser.visit('http://localhost/graph', function (err, browser) {
    if (browser.errors.length > 0)
        return console.log(browser.statusCode, browser.errors);
});
Run Code Online (Sandbox Code Playgroud)

没有报告错误.我也试过等待几秒钟,browser.wait()以及一个实际加载图表的完整网页.Zombie从不加载其他资源,当然,从不调用任何Google Charts回调.

为什么Zombie似乎无法使用Google Charts API?

lax*_*089 1

您遇到此问题的一个可能原因是您可能没有正确创建等待图表渲染的回调/超时,尽管这只是一种猜测。

为了完成您想要做的事情,我强烈建议您使用 PhantomJS。有几个记录在案的 ZombieJS 和 Google Charts API 无法很好地协同工作的问题案例。

使用 PhantomJS,您可以创建一个包含图表的 html 文件以及一个包含代码的 javascript 文件。最后,您将使用 PhantomJS 执行 javascript 文件:

phantomjs chart.js
Run Code Online (Sandbox Code Playgroud)

有关如何使用 PhantomJS 执行此操作的更深入描述可以在此处找到。