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, время: 10:36. |