Movendo-se entre páginas e raspar enquanto eu ando com o Nightmare

Existe um site que contém uma página com uma lista de 25 entradas, onde cada entrada é um link para uma página que contém algumas informações necessárias. Quero chegar à página da listagem e, em seguida: 1) clique no link da primeira entrada 2) recupere todo o html 3) clique na página da listagem (existe um botão para isso) 4) repita para todas as outras listagens

Eu também gostaria de fazer isso da maneira mais eficiente possível, o que me disseram que significa alavancar promessas. Aqui está o meu esboço de código, que não funciona:

var Nightmare = require('nightmare');
var nightmare = Nightmare({ openDevTools: true, show: true })
var Xray = require('x-ray');
var x = Xray();
var resultArr = [];

nightmare
.goto(hidTestURL)
.wait(2500)
.click('input[name="propertySearchOptions:advanced"]') //start navigating to listing page
.wait(2500)
.type('input[name="propertySearchOptions:streetName"]', 'Main')
.wait(2500)
.select('select[name="propertySearchOptions:recordsPerPage"]', '25')
.wait(2500)
.click('input[name="propertySearchOptions:search"]') //at listing page
.wait(2500)
.then(function(){
  nightmare
  .click('a[href^="Property.aspx?prop_id=228645"]') //first entry
  .evaluate(function(){ //retrieve info
    var resultArr = [];
    resultArr.push(document.querySelector('html').innerHTML);
  })
})

nightmare
.click('a[id="propertyHeading_searchResults"]') //return to listing page
.evaluate(function(){
  return resultArr.push(document.querySelector('html').innerHTML); retrieve listing page info to show that it returned.
})
.then(function (resultArr) {
  console.log('resultArr', resultArr);
  x(resultArr[1], 'body@html') //output listing page html
    .write('results.json');
})

Isso chega até a página de listagem e não prossegue. Eu também tentei o mesmo código, mas comreturn nightmare para todo uso denightmare exceto o primeiro. Eu já tinha visto alguns exemplos que usavamreturn, mas quando fiz isso, o código gerou um erro.

Eu também tentei não incluir o terceironightmare (aquele após o espaço em branco) e, em vez disso, tente continuar com a antiga instância de pesadelo indo direto para o.click(), mas isso também gerou um erro.

Claramente, preciso de ajuda com a sintaxe e a semântica do pesadelo, mas não há muita documentação online além de uma listagem da API. Alguém sabe como eu posso fazer isso funcionar?

questionAnswers(1)

yourAnswerToTheQuestion