Как можно в JavaScript перехватить и получить ответ от XMLHttpRequest запроса на странице?

Как на JavaScript перехватить ответ с данными, когда парсите данные со страницы, которая делает XMLHttpRequest запросы для получения JSON массива, используя headless браузер и вставку JS-скриптов на страницу?
  • 16 сентября 2023 г. 15:07
Ответы на вопрос 2
В JavaScript вы можете перехватить и получить ответ от XMLHttpRequest запроса, используя событие `readystatechange`. 

Пример кода:

```javascript
var xhr = new XMLHttpRequest();
xhr.open("GET", "url_запроса", true);
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var response = xhr.responseText;
        // обработка ответа
        console.log(response);
    }
};
xhr.send();
```

В этом примере мы создаем новый объект XMLHttpRequest, открываем GET-запрос на указанный URL, и назначаем функцию обратного вызова на событие `readystatechange`. После отправки запроса и получения ответа, функция обратного вызова проверяет состояние запроса (`readyState`) и код состояния (`status`). Когда `readyState` равен 4 (завершено) и `status` равен 200 (успешный ответ), мы получаем ответ с помощью метода `responseText` и обрабатываем его по нашему усмотрению.

Чтобы перехватить ответ с данными, при использовании headless браузера и вставке JS-скриптов на страницу, можно использовать тот же подход. Вы можете вставить код события `readystatechange` на страницу и перехватить ответ внутри этого кода.

Пример кода:

```javascript
// Вставка JS-скрипта на страницу с headless браузером
var script = document.createElement('script');
script.innerHTML = `
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "url_запроса", true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
            var response = xhr.responseText;
            // обработка ответа
            console.log(response);
        }
    };
    xhr.send();
`;
document.head.appendChild(script);
```

В этом примере мы создаем новый элемент `<script>`, вставляем код XMLHttpRequest запроса со событием `readystatechange`, и вставляем этот элемент `<script>` в `<head>` страницы с headless браузером. При выполнении страницы, код будет выполнен и выведет ответ в консоль.
Техника, которая может помочь вам, называется манкипатчинг. Она заключается в замене оригинальной функции своей собственной функцией-оберткой. Если вам нужны более подробные сведения, вы можете воспользоваться поиском: https://yandex.ru/search/?text=XMLHttpRequest+пере...

P.S. Я помню, что уже отвечал на подобный вопрос: как получить ответы на запросы сторонних скриптов в JS.
Похожие вопросы