2017-01-03 5 views
0

Я только что установил phantom.js и пытаюсь использовать его сейчас.PhantomJS Cookies Сохранять и повторно использовать по следующему запросу

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

Мой текущий код ниже:

var page = require('webpage').create(); 
lastName = "T"; 
firstName = "N"; 
mmddyyyyS = "12/03/2016"; 
mmddyyyyE = "12/04/2016"; 
page.open("http://example.com/casesearch/processDisclaimer.jis"); 
page.open("http://example.com/casesearch/inquirySearch.jis?lastName="+lastName+"company=N&firstName="+firstName+"&filingStart="+mmddyyyyS+"&filingEnd="+mmddyyyyE, function(status) { 
    if (status === "success") { 
     if (page.injectJs("jquery.min.js")&&page.injectJs("moment.min.js")) { 
      var h1 = page.evaluate(function() { 
       return $("h1:eq(0)").css({fontSize: 10, color: "red"}).text(); 
      }); 
      console.log(h1); 
     } 
    } 
    else{ 
     console.log("error"); 
    } 
}); 
phantom.onError = function(msg, trace) { 
    var msgStack = ['PHANTOM ERROR: ' + msg]; 
    if (trace && trace.length) { 
    msgStack.push('TRACE:'); 
    trace.forEach(function(t) { 
     msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : '')); 
    }); 
    } 
    console.error(msgStack.join('\n')); 
    phantom.exit(1); 
}; 

Я всегда получаю сообщение об ошибке, из console.log("error"). Я считаю, что это потому, что я делаю первый запрос, который указывает, что я принимаю их условия, но cookie, который я обычно получаю в браузере после того, как это представление не будет сохранено для последующего (второго) page.open запроса. Я видел в документации addCookie() и page.cookies, но ничего о цепочке запросов, чтобы cookie, достигнутый на одной странице, не использовался в запросе для второй страницы.

Как это сделать?

спасибо.

ответ

1

Любые сетевые запросы являются асинхронными в PhantomJS, поэтому второй page.open запускается до первого завершения, поэтому выдается ошибка.

page.open("http://example.com/casesearch/processDisclaimer.jis", function(){ 

    // this block is executed after the first page is opened 
    page.open("http://example.com/casesearch/inquirySearch.jis?lastName="+lastName+"company=N&firstName="+firstName+"&filingStart="+mmddyyyyS+"&filingEnd="+mmddyyyyE, function(status) { 

     // after the second page is opened 

    }) 
}); 

Также отметим, что PhantomJS может сохранять куки из предыдущих запросов для использования в будущем при запуске с аргументом командной строки --cookies-file

/path/to/phantomjs --cookies-file=/path/to/cookies.txt /path/to/script.js