Casper / Phantom崩溃并自动重启

时间:2016-02-23 19:43:57

标签: javascript phantomjs casperjs

Fatal Windows exception, code 0xc0000005.
PhantomJS has crashed. Please read the bug reporting guide at 
<http://phantomjs.org/bug-reporting.html> and file a bug report.

当我使用casperJS递归打开新页面时,会随机弹出此错误。它不是随机的,它经过几次迭代(可能大约50次)后出现。

我不认为它是内存泄漏,因为我在运行脚本时监视内存使用情况,并关闭了所有重内存应用程序。

我已经看到有人在github上报告此问题,但我认为它还没有修复。

有没有办法让我的机器在检测到崩溃后重新运行Casper脚本? (即在检测到崩溃后自动运行$ casperjs run.js)

我正在考虑使用shell脚本来执行此操作,但不确定如何检测崩溃。

当然,任何解决这次崩溃的想法都会很好。

不确定这是否有帮助,但我也将Casper代码放在这里:

var runCasper = function(){

    casper.start('https://www.example.com', function() {
        // Do something
    });

    casper.then(function() {
        // Do something
        runCasper();
    });

    casper.run();
}

1 个答案:

答案 0 :(得分:0)

您可以尝试的一件事是继续检查casper / phantom进程是否正在运行。您可以通过在每次运行的开始和结束时写入状态文件来完成此操作。查看https://stackoverflow.com/a/15283576/2231632是否在casper中使用文件系统。代码从这个答案中悄然而来:

var fs = require('fs');
var utils = require('utils');
var data = fs.read('testdata.dat');
utils.dump(data);

然后添加一个经常读取此文件的shell脚本,如果某个特定进程处于“运行”阶段超过10分钟左右,则可以从shell脚本重新运行casper。

理想情况下,每个递归都应该有一个退出条件,你不能永远继续递归。你想通过一次又一次地递归打开同一页面来实现什么?