← Все статьи

Расширение Chrome (бета): любой запрос страницы как вызов API

Наше расширение Chrome в бета-версии находит запрос с данными страницы и копирует его как вызов FourA для curl, Python, Node или MCP, включая headers и cookies.

Что нового

Вы знаете эту рутину. Открыть DevTools, перезагрузить страницу, прокрутить десятки requests, пока один из них не покажет нужные цены, правый клик, Copy as cURL. Затем начинается настоящая работа: убрать headers, актуальные только для Chrome, переписать всё под свой клиент и проверить, отвечает ли endpoint вне браузера.

Chrome extension от FourA, сейчас в beta, сокращает весь процесс до пары кликов. Оно добавляет вкладку FourA рядом с Network: вкладка показывает requests страницы, находит тот, что содержит нужный видимый текст, и копирует готовый вызов для Single, Proxy Finder или Browser на curl, Python, Node или MCP. В том же extension есть popup для маршрутизации самого Chrome через одного из ваших пользователей proxy port.

В Chrome Web Store его пока нет. Скачайте его в разделе Tools панели Dashboard и загрузите в developer mode (Chrome версии 116 или новее). Расширение бесплатно. Трафик через туннель расходует лимит proxy вашего тарифа, а вызовы из DevTools оплачиваются по стандартным тарифам API.

Как это работает

Откройте DevTools на целевой странице и выберите вкладку FourA. Перезагрузите страницу, и вкладка отобразит requests аналогично Network, скрыв рекламу и аналитику по умолчанию, с переключателем This site only для собственных requests страницы. Введите цену, название товара или любой видимый текст в Find in responses, и инструмент укажет на requests, чей response содержит эту строку. Часто именно так обнаруживается, что страница рендерится из JSON endpoint, к которому можно обращаться напрямую.

Выберите request, укажите движок в FourA call и скопируйте. Вот пример в формате curl для JSON request на странице магазина (сокращено: оригинал содержит каждый header, отправленный страницей):

curl https://api.foura.ai/api/single \
  -H 'X-API-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "method": "GET",
  "url": "https://shop.example.com/api/products?category=coffee&page=2",
  "headers": [
    ["accept", "application/json"],
    ["referer", "https://shop.example.com/coffee"],
    ["accept-language", "en-GB,en;q=0.9"]
  ],
  "browser": "Chrome",
  "os": "macOS",
  "unblocker": true
}'

Три вещи в этом вызове сделаны намеренно. Заголовки передаются списком пар в том порядке, в котором их отправила страница, а именно такой формат принимает Single. Заголовки, которые Chrome формирует для собственного соединения (host, content-length, accept-encoding, connection и еще несколько), отбрасываются, поскольку их копирование сломает любой клиент, отправляющий следующий вызов. А browser и os запрашивают browser profile, соответствующий запущенной версии Chrome. Версия намеренно опущена: вызов получает самую свежую версию из доступных у нас, а не отклоняется из-за отсутствия нужной.

Формат MCP представляет собой имя инструмента (foura_single), за которым следует тот же JSON, готовый для агента, работающего с нашим MCP server.

Далее идут две кнопки. Open in the playground загружает вызов в Dashboard Playground, выбирая тот же ключ, если он принадлежит вам. Run through FourA отправляет его и сопоставляет результаты "The browser got" и "FourA got", позволяя убедиться в совпадении ответов до написания кода.

Impact

Ручной способ хорошо известен. ScrapingBee's tutorial требует пять шагов только для получения cURL из Chrome, отмечая, что копия содержит все переданные браузером заголовки и cookie. С этого начинают большинство скраперов. Но это лишь половина задачи, так как скопированный запрос гарантированно работает только в вашем браузере.

Вкладка FourA закрывает обе задачи в одном месте. Вы находите запрос по возвращаемым данным, а не гадаете по URL, получаете вызов в ожидаемом API формате, и одним кликом проверяете его работоспособность с нашей стороны. Это дает максимальный эффект на страницах, где данные приходят через запрос с неинформативным URL.

Точных цифр по сэкономленному времени пока нет. Это бета-версия, и реальным тестом станет ваша следующая задача.

For Power Users

Переключите движок на Proxy Finder, и панель обернет тот же запрос, предложив выбор Exit country:

{
  "request": {
    "method": "GET",
    "url": "https://shop.example.com/api/products?category=coffee&page=2",
    "headers": [["accept", "application/json"]],
    "unblocker": true
  },
  "exitCountries": ["DE"]
}

exitCountries представляет собой строгий белый список. Запрос никогда не переключается на другую страну, а страна, выполнившая ответ, возвращается как exitCountry. Это функция тарифа, поэтому план без таргетинга по странам возвращает отказ с соответствующим сообщением.

Browser работает иначе, поскольку открывает страницы, а не отправляет запросы. Он принимает headers в виде объекта, преобразует заголовок Cookie страницы в список cookie с привязкой к хосту и исключает user-agent вместе с заголовками client hints, так как движок отправляет собственные (с включенной опцией профиля он отправляет User-Agent текущего окна). Он воспроизводит только GET без тела. Запрос POST из формы поиска следует выполнять через Single, где тело JSON передается как объект, а любые другие данные передаются именно той строкой, которую отправила страница.

Кликните правой кнопкой мыши по любому запросу, чтобы получить те же команды копирования плюс Copy URL и Copy response. API key для запусков находится в Settings вкладки и сохраняется до закрытия Chrome, если не включить Keep the key on this computer.

Одно важное предупреждение. Запрос, скопированный с cookies, воспроизводит активную сессию с вашей авторизацией. Относитесь к нему как к паролю и не передавайте в тикеты, чаты или публичные репозитории.

О всплывающем окне тоже стоит упомянуть. Оно определяет адрес, который сайт видит через туннель, а не берет его из ваших настроек, и если этот адрес совпадает с вашим, выводит Not routed. Если значок становится красным с числом, значит proxy отклонил столько соединений за последнюю минуту, а popup объясняет причину. Опции username options на странице Location совпадают с теми, что описаны в документации к порту proxy.

What's Next

Расширение остается в бета-версии и устанавливается из Dashboard, пока мы не сочтем его готовым. Сроков публикации в Chrome Web Store мы не устанавливаем. Chrome остается единственным браузером, под который оно разрабатывается и тестируется. Руководство по настройке setup guide описывает текущий функционал, а дальнейшие изменения зависят от того, с чем вы столкнетесь при решении реальных задач через вкладку FourA.

Поэтому, когда сайт блокирует ваш парсер в следующий раз, откройте DevTools, прежде чем разбирать HTML. Самый простой скрейпер часто просто повторяет тот запрос, который страница уже выполнила сама.