Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.04.2023, 01:07
QuZ QuZ вне форума
Новичок на форуме
Отправить личное сообщение для QuZ Посмотреть профиль Найти все сообщения от QuZ
 
Регистрация: 03.04.2023
Сообщений: 8

Puppeteer и работа с GET запросами
Добрый вечер. Чуть чуть знаком для личного использования с данным продуктом, столкнулся с задачей, что мне необходимо отслеживать от сайта входящие GET запросы в асинхронном режиме (бесконечно долго, до закрытия страницы браузера) и обрабатывать только пришедшие от нужной url.(грубо говоря кидать в консоль лог). Задача совсем не типичная для моих навыков работы, понимаю, что тут пяток строк кода, но я не смог найти в документации чего-то подобного. Подскажите пожалуйста, как реализовать данный функционал.

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 03.04.2023, 14:08
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

https://pptr.dev/guides/request-interception
Ответить с цитированием
  #3 (permalink)  
Старый 03.04.2023, 15:55
QuZ QuZ вне форума
Новичок на форуме
Отправить личное сообщение для QuZ Посмотреть профиль Найти все сообщения от QuZ
 
Регистрация: 03.04.2023
Сообщений: 8

Сообщение от Nexus Посмотреть сообщение
https://pptr.dev/guides/request-interception
Спасибо Вам большое. Отличный пример, как раз то что будет полезно.
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2023, 01:56
QuZ QuZ вне форума
Новичок на форуме
Отправить личное сообщение для QuZ Посмотреть профиль Найти все сообщения от QuZ
 
Регистрация: 03.04.2023
Сообщений: 8

Добрый вечер.. Решил не создавать новую тему, подскажите пожалуйста, пытаюсь сделать обработку уже пост запросов, которые отсылает браузер, хочу получить ответы. В теории понимаю, скорее всего, в момент получения тела запроса, еще ответа нет и необходимо сделать ожидание его загрузки.. Наверно так.
Спасибо.

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();
  })();
Ответить с цитированием
  #5 (permalink)  
Старый 07.04.2023, 14:11
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

QuZ, вы гуглить не пробовали?
https://stackoverflow.com/questions/60579493
https://stackoverflow.com/questions/45822058
Ответить с цитированием
  #6 (permalink)  
Старый 08.04.2023, 01:23
QuZ QuZ вне форума
Новичок на форуме
Отправить личное сообщение для QuZ Посмотреть профиль Найти все сообщения от QuZ
 
Регистрация: 03.04.2023
Сообщений: 8

Спасибо, сегодня посмотрю. Пробовал, и документацию просматривал, просидел весь вечер, пытаясь понять проблему, мышление у меня пхпшника и все должно вроде как решаться проще. В JS какие-то вещи для меня не логичные. Без попыток самостоятельно разобраться не люблю задавать вопросы.
Ответить с цитированием
  #7 (permalink)  
Старый 08.04.2023, 10:49
QuZ QuZ вне форума
Новичок на форуме
Отправить личное сообщение для QuZ Посмотреть профиль Найти все сообщения от QuZ
 
Регистрация: 03.04.2023
Сообщений: 8

Сообщение от Nexus Посмотреть сообщение
QuZ, вы гуглить не пробовали?
https://stackoverflow.com/questions/60579493
https://stackoverflow.com/questions/45822058
Добрый день.
Взял за основу из Ваших ссылок -
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',
и объединять занесенные в массив из реквеста и респонса данные по каким-то параметрам?
Ответить с цитированием
  #8 (permalink)  
Старый 08.04.2023, 16:12
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

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());
});
Ответить с цитированием
  #9 (permalink)  
Старый 08.04.2023, 19:19
QuZ QuZ вне форума
Новичок на форуме
Отправить личное сообщение для QuZ Посмотреть профиль Найти все сообщения от QuZ
 
Регистрация: 03.04.2023
Сообщений: 8

Сообщение от Nexus Посмотреть сообщение
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());
});
Простите, не совсем Вас понял. А где запрос на получение данных из ответа? Запрос ( postDate и header) я уже получал, в Вашем коде Вы поменяли проверку на принадлежность ссылки к нужному для обработки запросу.
Ответить с цитированием
  #10 (permalink)  
Старый 08.04.2023, 19:47
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от QuZ
Простите, не совсем Вас понял. А где запрос на получение данных из ответа?
Ознакомьтесь с типом HTTPRequest.
Посмотрите на метод response и на тип данных, который он возвращает.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Angular разработчик на удаленную постоянную работа goldi77 Работа 0 13.10.2021 07:58
Вакансия: Программист IOS, работа в офисе,г.Ростов-на-Дону Анна NikitaOnline Работа 0 21.03.2016 18:45
Работа php с запросами. Duda.Ml1986@gmail.com Серверные языки и технологии 16 07.01.2012 16:04
Постоянная работа / Front-end / Москва kooper Работа 4 29.09.2011 22:06