2015-11-24 3 views
1

У меня проблема с этим скриптом. Предполагается загрузить некоторые ссылки (строки за строкой), сохраненные в файле prova.txt, затем передать ссылки один за другим в CasperJS и получить html страницы. Я знаю, что должна быть какая-то проблема с тайм-аутами/JavaScript.JavaScript/CasperJS обработка таймаутов при переполнении страниц

Вот сценарий:

var fs = require('fs'); 
var file_h = fs.open('prova.txt', 'r'); 
var line = file_h.readLine(); 
var links = new Array(); 
var casper = require('casper').create(); 

while(line) { 
    line = file_h.readLine(); 
    links.push(line); 
} 

(function theLoop (i) { 
    console.log("LOOP"); 
    casper.start(links[i], function() { 
     setTimeout(function() { 
      fs.write("stats" + i + ".html", this.getHTML()); 
      i = i + 1; 
      if (--i) { 
       theLoop(i); 
      } 
     }, 2000); 
    }); 
    casper.run(); 
})(4); 

документации, которую я использовал: http://scottiestech.info/2014/07/01/javascript-fun-looping-with-a-delay/

+0

Документация, которую я использовал: http://scottiestech.info/2014/07/01/javascript-fun-looping-with-a-delay/ – ohdecas

ответ

1

Не называйте start и run несколько раз на одной и той же casper инстанции.

casper.start(); 

(function theLoop (i) { 
    console.log("LOOP"); 
    casper.thenOpen(links[i], function() { 
     this.wait(2000, function() { 
      fs.write("stats" + i + ".html", this.getHTML()); 
      if (--i) { 
       theLoop(i); 
      } 
     }); 
    }); 
})(4); 

casper.run(); 

Кроме того, кажется, что вы хотите уменьшить i 0, так что вы не должны увеличивать (i = i + 1) и уменьшаем его --i в следующей строке.

Имейте в виду, что если вы используете setTimeout в сценарии CasperJS, вы выходите из ступенчатого потока управления и должны каким-то образом поймать прерывание выполнения. Используйте возможности CasperJS, пока это не станет неизбежным. Например, я заменил setTimeout(function(){}, x) на casper.wait(x, function(){}).

+0

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

+0

Код, который я предоставил, должен работать. Между тем, я также нашел другую проблему. –

+0

Спасибо, что это работает;) Теперь мне просто нужно понять, где большое изменение смотрит на мой предыдущий код. – ohdecas

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