Есть ли способ, используя Nightmare или аналогичный, для доступа к ответу json? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть проблема, похожая на 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);
});

Я ценю любую помощь.Спасибо

1 Ответ

1 голос
/ 15 мая 2019

Я не мог проверить это сам, так как я не использовал Nightmare или установленный узел, но исходя из того, что я прочитал здесь , это может помочь:

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.Если вам нужно передать дополнительные параметры, вам лучше использовать XMLHttpRequest внутри блока evaluate(), как описано здесь .

...