Что нового
Вы знаете эту рутину. Открыть 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. Самый простой скрейпер часто просто повторяет тот запрос, который страница уже выполнила сама.