有一个网站包含一个包含 25 个条目列表的页面,其中每个条目都是指向包含我需要的一些信息的页面的链接。我想进入列表页面,然后: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
(空格后面的那个),而是尝试通过直接转到 来继续旧的噩梦实例.click()
,但这也引发了错误。
我显然需要一些关于噩梦的语法和语义方面的帮助,但是除了 API 列表之外,在线文档并不多。有谁知道我怎样才能使这项工作?