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], 'body@html') //output listing page html
.write('results.json');
})
これはリストページまで到達し、それ以上先に進みません。私も同じコードを試しましたが、最初のものを除いてreturn nightmareすべての用途で使用しました。nightmareを使用した例をいくつか見returnたことがありますが、これを実行すると、コードがエラーをスローしました。
nightmareまた、3つ目 (空白の後のもの)を含めずに、古い悪夢のインスタンスを に直行して続行しようとしました.click()が、これもエラーをスローしました。
ナイトメアの構文とセマンティクスについて助けが必要であることは明らかですが、API リスト以外にオンラインのドキュメントはあまりありません。誰も私がこれを機能させる方法を知っていますか?