25のエントリのリストを含むページが含まれているWebサイトがあります。各エントリは、必要な情報を含むページへのリンクです。 1)最初のエントリへのリンクをクリック 2)すべてのhtmlを取得 3)リスティングページに戻る(このボタンがあります) 4)お互いに繰り返しナイトメアと一緒に移動するとページ間を移動して掻き集める
私はこれを可能な限り効率的に行いたいと約束しました。ここでは動作しないコードスケッチがあります:
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');
})
これはリスティングページまで取得され、これ以上進まません。私も同じコードを試しましたが、nightmare
のすべての使用のためにreturn nightmare
と最初のものを除いて。私はreturn
を使ったいくつかの例を見ていましたが、これを実行したときにコードがエラーを投げました。
また、第3のnightmare
(空白スペースの後ろ)は含まず、代わりに.click()
にまっすぐ進むことによって古い悪夢のインスタンスを続行しようとしましたが、これもエラーを投げかけました。
悪夢の構文とセマンティクスについてはっきりと助けが必要ですが、APIリストのほかにオンラインのドキュメントはあまりありません。どのように私はこの仕事をすることができます誰も知っていますか?