我遇到一个类似于this的问题,其中我正在使用Nightmare登录页面并浏览页面。在此页面中,某些请求会获得json响应以填充数据(在“网络”标签中可见)。有什么方法可以访问此json而不是解析页面本身?
var Nightmare = require('nightmare');
const nightmare = Nightmare({ show: true });
nightmare
.goto('https://my.url/')
.type('#user_id', 'myUserId')
.type('#password', 'passw0rd')
.click('#button-login')
.wait(3000)
.goto('specific-url') // this URL loads a page with some data
.end()
.then(console.log) // this prints stuff like HTTP response: OK
.catch((error) => {
console.error('Search failed:', error);
});
感谢您的帮助。谢谢
答案 0 :(得分:1)
由于我没有使用过噩梦或已安装的节点,因此无法自己进行测试,但根据我读过的here的知识,这也许可以解决问题:
var Nightmare = require('nightmare');
const nightmare = Nightmare({ show: true });
nightmare
.goto('https://my.url/')
.type('#user_id', 'myUserId')
.type('#password', 'passw0rd')
.click('#button-login')
.wait(3000)
.goto('specific-url') // this URL loads a page with some data
.wait(1000)
.evaluate(() => {
var jsonUrl = 'needs to contain the address of the JSON backend';
var filename = './json-result.json';
var file = fs.createWriteStream(filename);
var request = http.get(jsonUrl, function (response) {
response.pipe(file);
});
}
)
.end()
.then(console.log) // this prints stuff like HTTP response: OK
.catch((error) => {
console.error('Search failed:', error);
});
这要求您拥有一个被调用的静态URL,然后将返回JSON响应。如果您需要传递其他参数,则最好在evaluate()
块内使用XMLHttpRequest,如所述的here。