有没有办法使用 Nightmare 或类似工具来访问 json 响应?
Is there a way, using Nightmare or similar, to access the json response?
我有一个类似于 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);
});
感谢任何帮助。谢谢
我无法自己测试这个,因为我没有使用 Nightmare 或安装节点,但根据我读过的内容 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,然后将 return JSON 响应。如果您需要传递额外的参数,您最好在 evaluate()
块内使用 XMLHttpRequest,如 here.
所述
我有一个类似于 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);
});
感谢任何帮助。谢谢
我无法自己测试这个,因为我没有使用 Nightmare 或安装节点,但根据我读过的内容 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,然后将 return JSON 响应。如果您需要传递额外的参数,您最好在 evaluate()
块内使用 XMLHttpRequest,如 here.