прямое использование nightmare не очень удобно , комфортнее с ним работать внутри генератора
в вашем случае возможно существует проблема блокировки поля ввода контактом, можно пробовать что-то типа .wait(400).type('#quick_login',vk.login).wait(400).type('#quick_pass', vk.pass)...
А еще я вижу, как минимум некорректные айди инпут блоков вк, index_email, index_pass соответственно.
А вообще можно с кошмаром кошмарить так:
function * run() {
let html = yield nightmare.goto(href);
let resultEvaluate = yield nightmare.evaluate(()=>{return document.body;});
yield nightmare.end();
Естественно в таком исполнении все надо оборачивать в try cartch finaly и ловить все ошибки так, иначе любой просроченный wait даст генерацию ошибки.
И еще, в кошмаре отключены алерты, конфирмы и промпты, для их обработки есть отдельные события.
Ваш код может скорее всег озаработать, если его переписать как-то так:
nightmare
.goto('https://vk.com')
.type('#index_email', vk.login)
.type('#index_pass', vk.pass)
.click('#index_login_button')
.wait(() => {
return document.title.search(/Диалоги/) != -1;
})
.evaluate(() => {
return 'its cool!!!';
})
.end()
.then((result)=> {
console.log(result); // its cool!!!
})
.catch(console.error); // будете пренебрегать обработкой ошибок и кошмар будет именно ваш , а не сайта для парсинга....