Wechseln zwischen Seiten und Scraping mit Nightmare

Es gibt eine Website, die eine Seite mit einer Liste von 25 Einträgen enthält, wobei jeder Eintrag einen Link zu einer Seite enthält, die einige von mir benötigte Informationen enthält. Ich möchte zur Listingseite gelangen und dann: 1) auf den Link zum ersten Eintrag klicken 2) alle HTML-Dateien abrufen 3) zurück zur Listingseite klicken (es gibt eine Schaltfläche dafür) 4) für jede andere Listung wiederholen

Ich möchte dies auch so effizient wie möglich machen, was bedeutet, Versprechen zu nutzen. Hier ist meine Code-Skizze, die nicht funktioniert:

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');
})

Dies reicht bis zur Listenseite und fährt dann nicht weiter fort. Ich habe auch den gleichen Code ausprobiert, aber mitreturn nightmare für jede Verwendung vonnightmare außer dem ersten. Ich hatte einige Beispiele gesehen, die @ verwendetreturn, aber als ich das tat, warf der Code einen Fehler.

Ich habe auch versucht, das dritte @ nicht einzuschließnightmare (das nach dem Leerzeichen) und stattdessen versuchen, die alte Alptraum-Instanz fortzusetzen, indem Sie direkt zum @ gehe.click(), aber das warf auch einen Fehler.

Ich brauche natürlich Hilfe bei der Syntax und Semantik von Nightmare, aber es ist nicht viel Dokumentation online, abgesehen von einer API-Auflistung. Weiß jemand, wie ich das zum Laufen bringen kann?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage