2017-02-12 7 views
1
 

    var Nightmare = require('nightmare'); 
    var nightmare = Nightmare({ 
     show: true 
    }) 


    nightmare 
     .goto('https://mail.yandex.ru') 
     .type('input[name=login]', 'mylogin') 
     .type('input[name=passwd]', 'mypassword') 
     .click('button.nb-button._nb-action-button.nb-group-start') 
     .wait('.mail-User-Name') 
     .cookies.get() 
     .then(function (cookies) { 
     //actions 
     }) 

Я получаю файлы cookie после авторизации, но я не знаю, где я должен установить их и как их установить. Я попытался сделать .cookie.set() в начале, но это не сработает.NightmareJS: как настроить cookie?

Как я могу использовать сохраненный файл cookie? Благодарю.

+0

Согласно [это] (https://github.com/segmentio/nightmare#cookiessetname-value) 'cookies.set()' должен работать. Что именно вы подразумеваете под «это не работает»? Вы пытались получить ваш файл cookie сразу после его установки, чтобы вы могли увидеть, работает ли он? – Benni

+0

Можете ли вы показать мне пример с .cookies.set() и .cookies.get()? – happinapps

+0

Конечно, просто дай мне несколько минут. – Benni

ответ

6

я сделал следующее из терминала узла:

> var Nightmare = require('nightmare') 
undefined 
> var nightmare = Nightmare({show:true}) 
undefined 
> nightmare. 
... goto('https://google.com'). 
... cookies.set('foo', 'bar'). 
... cookies.get(). 
... then((cookies) => { 
...  console.log(JSON.stringify(cookies, null, 4)) 
... }) 
Promise { <pending> } 
> [ 
    { 
    "name": "NID", 
    "value": "96=qo1qY9LTKh1np4OSgiyJTi7e79-_OIoIuc71hnrKWvN1JUnDLJqZlE8u2ij_4mW0-JJhWOCafo5J0j-YkZCFt8H2VHzYUom4cfEd2QLOEsHmAcT2ACx4a5xSvO0SZGZp", 
    "domain": ".google.de", 
    "hostOnly": false, 
    "path": "/", 
    "secure": false, 
    "httpOnly": true, 
    "session": false, 
    "expirationDate": 1502733434.077271 
    }, 
    { 
    "name": "CONSENT", 
    "value": "WP.25d07b", 
    "domain": ".google.de", 
    "hostOnly": false, 
    "path": "/", 
    "secure": false, 
    "httpOnly": false, 
    "session": false, 
    "expirationDate": 2145916800.077329 
    }, 
    { 
    "name": "foo", 
    "value": "bar", 
    "domain": "www.google.de", 
    "hostOnly": true, 
    "path": "/", 
    "secure": false, 
    "httpOnly": false, 
    "session": true 
    } 
] 

nightmare.cookies.set('key', 'value') действительно правильный способ использовать его, как вы можете увидеть в моем результирующем объекте. Возможно, https://mail.yandex.ru не принимает ваш файл cookie, потому что он недействителен. Пожалуйста, сделайте то же самое и отредактируйте свой вопрос, чтобы включить ваши результаты.

Редактировать: По-видимому, OP должен хранить файлы cookie, чтобы он мог использовать их в другом экземпляре Nightmare. Это может быть достигнуто, как это:

var Nightmare = require('nightmare') 
var storedCookies // This is where we will store the cookies. It could be stored in a file or database to make it permanent 

// First instance: 
var nightmare1 = Nightmare({show: true}) 
nightmare1. 
    goto('https://google.com'). 
    cookies.get(). 
    then((cookies) => { 
     storedCookies = cookies 
    }) 

// Second instance: 
var nightmare2 = Nightmare({show: true}) 

for(var i = 0; i < storedCookies.length; i++) 
    nightmare2. 
     cookies.set(storedCookies[i].name, storedCookies[i].value) 

nightmare2. 
    goto('https://google.com') 
+0

Да, это работает. , но в моем примере: Я использую .set ('foo', 'bar') и .get(), а затем авторизуюсь. авторизовать состояние в порядке, я закрываю процесс , затем запускаем новый, и мое состояние не авторизовано. Я попробую сделать эти действия на других сайтах, и проблема повторится, я делаю что-то неправильно. Может быть, не нужно использовать .set ('foo', 'bar') на второй итерации? – happinapps

+0

NightmareJS не хранит ваши файлы cookie, вы должны сделать это сами. Я отредактирую свой ответ в соответствии с вашими потребностями. – Benni

+0

Хорошо, я понял. Благодаря! – happinapps

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

  • Нет связанных вопросов^_^