Es gibt eine Website, die eine Seite mit einer Liste von 25 Einträgen enthält, wobei jeder Eintrag ein Link zu einer Seite ist, die einige Informationen enthält, die ich brauche. Ich möchte auf die Liste Seite und dann: 1) klicken Sie auf den Link zum ersten Eintrag 2) rufen Sie alle HTML 3) klicken Sie zurück auf die Liste Seite (es gibt eine Schaltfläche dafür) 4) für jeden anderen wiederholen NotierungWechsel zwischen Seiten und Scraping wie ich mit Nightmare gehe
Ich würde auch gerne so effizient wie möglich tun, was mir gesagt wurde, Hebelwirkung verspricht. Hier ist mein 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], '[email protected]') //output listing page html
.write('results.json');
})
Dies wird bis zur Eintragsseite, und dann nicht weiter gehen wird. Ich habe auch den gleichen Code versucht, aber mit return nightmare
für jede Verwendung von nightmare
mit Ausnahme der ersten. Ich habe einige Beispiele gesehen, die return
verwendet haben, aber als ich das getan habe, hat der Code einen Fehler verursacht.
Ich habe auch versucht, nicht die dritte nightmare
(die nach dem Leerzeichen), und stattdessen versuchen, die alte Albtraum-Instanz fortzusetzen, indem Sie direkt auf die .click()
gehen, aber das warf auch einen Fehler.
Ich brauche eindeutig Hilfe bei der Syntax und Semantik von Albtraum, aber es gibt nicht viel Dokumentation online neben einer API-Liste. Weiß jemand wie ich das machen kann?