Puppeteer и работа с GET запросами
Добрый вечер. Чуть чуть знаком для личного использования с данным продуктом, столкнулся с задачей, что мне необходимо отслеживать от сайта входящие GET запросы в асинхронном режиме (бесконечно долго, до закрытия страницы браузера) и обрабатывать только пришедшие от нужной url.(грубо говоря кидать в консоль лог). Задача совсем не типичная для моих навыков работы, понимаю, что тут пяток строк кода, но я не смог найти в документации чего-то подобного. Подскажите пожалуйста, как реализовать данный функционал.
Спасибо. |
|
Цитата:
|
Добрый вечер.. Решил не создавать новую тему, подскажите пожалуйста, пытаюсь сделать обработку уже пост запросов, которые отсылает браузер, хочу получить ответы. В теории понимаю, скорее всего, в момент получения тела запроса, еще ответа нет и необходимо сделать ожидание его загрузки.. Наверно так.
Спасибо.
import puppeteer from 'puppeteer';
(async () => {
const browser = await puppeteer.launch({
headless: false,
slowMo: 50,
args: ['--start-fullscreen'], // we can use '--start-fullscreen' || --start-maximized
});
const page = await browser.newPage();
await page.setViewport({width: 1720, height: 980});
await page.setRequestInterception(true);
page.on('request', interceptedRequest => {
if (interceptedRequest.isInterceptResolutionHandled()) return;
if (
interceptedRequest.url().endsWith('.png') ||
interceptedRequest.url().endsWith('.jpg')
){
interceptedRequest.abort();
console.log('-');
}
else {
interceptedRequest.continue();
if (interceptedRequest.url() == 'https://website.com/api/'){
console.log('url');
console.log(interceptedRequest.url());
console.log('headers');
console.log(interceptedRequest.headers());
console.log('postData - Отправляемый запрос');
console.log(interceptedRequest.postData());
}
}
});
await page.goto('https://website.com');
await page.type('input[type="email"]', "weqwe@mail.ru", {delay : 3});
await page.type('input[type="password"]', "фывапролдж", {delay : 3});
await page.waitForTimeout(3000);
await page.click ('div.holder.login > div');
//await browser.close();
})();
|
QuZ, вы гуглить не пробовали?
https://stackoverflow.com/questions/60579493 https://stackoverflow.com/questions/45822058 |
Спасибо, сегодня посмотрю. Пробовал, и документацию просматривал, просидел весь вечер, пытаясь понять проблему, мышление у меня пхпшника и все должно вроде как решаться проще. В JS какие-то вещи для меня не логичные. Без попыток самостоятельно разобраться не люблю задавать вопросы.
|
Цитата:
Взял за основу из Ваших ссылок -
page.on('response', async(response) => {
const request = response.request();
if (request.url().includes('desiredrequest.json')){
const text = await response.text();
console.log(text);
}
})
Понял, что вызывать надо второй метод (page.on response) для ожидания ответа. Можно ли сделать, чтобы данный код работал в условии проверки
if (interceptedRequest.url() == 'https://website.com/api/'){
console.log('url');
console.log(interceptedRequest.url());
console.log('headers');
console.log(interceptedRequest.headers());
console.log('postData - Отправляемый запрос');
console.log(interceptedRequest.postData());
// Вызывался тут
}
или надо делать отдельные обработчики для page.on('request', и page.on('response', и объединять занесенные в массив из реквеста и респонса данные по каким-то параметрам? |
page.on('request', async (request) => {
console.log('url', request.url());
if (request.url() !== 'https://website.com/api/') {
return;
}
console.log('headers', request.headers());
console.log('postData - Отправляемый запрос', request.postData());
});
|
Цитата:
|
Цитата:
Посмотрите на метод response и на тип данных, который он возвращает. |
| Часовой пояс GMT +3, время: 13:44. |