2015-02-17 4 views
1

Как я вижу, вы не можете просто открыть несколько страниц с помощью page.open() в одном скрипте phantomjs. Потому что они начали работать одновременно. Я пробовал варианты с seTtimeout(), но они не работали. Поэтому мне нужно открыть первую страницу, выполнить некоторые действия, а затем закрыть ее. После этого мне нужно открыть другую страницу. Как я могу это достичь?Как открыть несколько страниц в последовательности (PhantomJS)?

var url = 'url-address-'; 
var referrer = '-url-address-/path'; 
page.customHeaders={'Authorization': 'Basic '+btoa(login+":"+password), 'Referer': referrer}; 

page.open(url, function(status){ 
    if(status === 'fail') 
    { 
     console.log('Status: ' + status); 
     phantom.exit(); 
    } 

    console.log('Status: ' + status); 
    page.render("1.png"); 

    page.evaluate(function() { 
     var form = document.forms[0]; 
     form.data1.value = 'mydata_name'; 
     form.data2.value = 'mydata_surname'; 
     form.submit(); 
    }); 

    setTimeout(function(){ 
     var url = 'post-url-address'; 
     var referrer = '-url-address-/refpath'; 
     page.customHeaders={'Authorization': 'Basic '+btoa(login+":"+password), 'Referer': referrer}; 
     body = 'submit-url=mydata_to_submit'; 
     page.open(url, 'POST', body, function (status) { 
      // 
      // Here goes the error 
      // unable to load url: "post-url-address" 
      // error code: 5, description: Operation canceled 
      // 
      // 
      //setTimeout(function(){}, 5000) 
      console.log('Status: ' + status); 
     }); 

     page.render("2.png"); 
     var fs = require('fs'); 
     fs.write(result, page.content, 'w'); 
     console.log('Finished'); 
     phantom.exit(); 

    }, timeout); 
}); 

Так что все это хорошо, пока я не открываю страницу для публикации данных. Не знаю, почему это происходит. Пытался изменить таймаут на 20-30 секунд - проблема остается. Не исключено, почему это происходит, не так ли?

+0

Просьба предоставить полный сценарий, который воспроизводит эту проблему, так как это должно работать. Зарегистрируйтесь в ['onConsoleMessage'] (http://phantomjs.org/api/webpage/handler/on-console-message.html), [' onError'] (http://phantomjs.org/api/webpage /handler/on-error.html), ['onResourceError'] (http://phantomjs.org/api/webpage/handler/on-resource-error.html), [' onResourceTimeout'] (http: // phantomjs .org/api/webpage/handler/on-resource-timeout.html). Возможно, есть ошибки. –

+0

okay, плохо регистрировать сообщения об ошибках – user3416803

+0

Он загружает первую страницу правильно, а затем, когда дело доходит до сообщений, сценарий говорит 5, описание: Операция отменена. Я размещаю часть кода сейчас – user3416803

ответ

1

Вы выходите слишком рано.

Вы отключаетесь от потока управления после того, как открываете вторую страницу. Вам нужно переместить запись файла и выход в обратный вызов page.open(). Вероятно, ошибка происходит потому, что PhantomJS в настоящее время пытается загрузить страницу и в то же время пытается завершить выполнение. Поэтому загрузка второй страницы отменяется.

Использование:

// second page.open ... 
page.open(url, 'POST', body, function (status) { 
    console.log('Status: ' + status); 
    page.render("2.png"); 
    var fs = require('fs'); 
    fs.write(result, page.content, 'w'); 
    console.log('Finished'); 
    phantom.exit(); 
}); 
+0

. Повторите предыдущий вопрос: http://stackoverflow.com/questions/28525123/how-to-visit-a- страница-несколько-раз-в-ряд-с-phantomjs –

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