为什么 Zombie.js 不能与 Google 图表一起使用?

Why doesn't Zombie.js work with Google Charts?

我有一个加载 Google 图表的简单网页 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>

当我用我的浏览器点击它时,它工作正常。在Chrome中,load()调用请求了一堆外部资源:

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

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

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

没有报告错误。我也尝试过等待几秒钟,browser.wait(),以及实际加载图表的 full web page。 Zombie 从不加载其他资源,当然也从不调用任何 Google 图表回调。

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

您遇到此问题的一个可能原因是您可能没有正确创建等待图表呈现的 callbacks/timeouts,尽管这只是一个猜测。

为了完成您正在尝试做的事情,我强烈建议改用 PhantomJS。 ZombieJS 和 Google 图表 API 的问题有几个记录在案的案例,只是不能很好地结合在一起。

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

phantomjs chart.js

可以找到关于如何使用 PhantomJS 执行此操作的更深入的描述 here