【问题标题】:Casper/Phantom crashes and auto restartCasper/Phantom 崩溃和自动重启
【发布时间】:2016-02-27 02:52:25
【问题描述】:
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();
}

【问题讨论】:

    标签: javascript phantomjs casperjs


    【解决方案1】:

    您可以尝试的一件事是继续检查 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。

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

    【讨论】:

    • 我正在尝试从不同来源抓取数据。感谢您的回复,我认为它会工作。会试一试的。
    • 我关闭和打开同一个页面的原因是我想确保每个会话都是新的并且cookies被清除。你有什么建议吗?
    • 这不能在无限循环中完成,无论是在 Casper 脚本内部还是在外部的 shell 脚本中,为每个循环启动一个新的 Casper 进程?
    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多