2016-02-23 3 views
2
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, но я не думаю, что у нее есть исправление.

Есть ли способ, которым я могу позволить моей машине повторить скрипт Каспера после обнаружения сбоя? (т. е. автоматически запускать $ casperjs run.js после обнаружения сбоя)

Я думал использовать сценарий оболочки для этого, но точно не знаю, как обнаружить сбой.

Конечно, любые идеи по устранению этого сбоя тоже будут хороши.

Не уверен, если это помогает, но я ставлю мой Casper код здесь:

var runCasper = function(){ 

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

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

    casper.run(); 
} 

ответ

0

Одна вещь, вы можете попробовать это постоянно проверять, если/фантом процесс Каспер работает. вы можете сделать это, написав файл состояния в начале и в конце каждого прогона. Проверьте https://stackoverflow.com/a/15283576/2231632 на использование файловой системы в кассе. Код snippted из этого ответа:

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

А затем добавить скрипт, который часто читает этот файл и, если конкретный процесс в «работает» фазы более 10 минут или около того, вы можете повторно запустить Каспер из сценарий оболочки.

В идеале, каждая рекурсия должна иметь условие выхода, и вы не можете продолжать рекурсию навсегда. Что вы хотите добиться, рекурсивным открытием одной и той же страницы снова и снова?

+0

Я пытаюсь отменить данные из разных источников. Спасибо за ваш ответ, я думаю, что это сработает. Попробует. –

+0

Причина, по которой я закрываю и открываю одну и ту же страницу, - это то, что я хочу, чтобы каждая сессия была новой и файлы cookie были очищены. Есть ли у вас какие-либо предложения? –

+0

Нельзя ли это сделать в бесконечном цикле, либо внутри сценария Каспера, либо в сценарии оболочки, за пределами которого запускается новый процесс Каспера для каждого цикла? – prabugp

Смежные вопросы