Co nowego
Znasz tę procedurę. Otwierasz DevTools, odświeżasz stronę, przewijasz dziesiątki requestów, aż trafisz na ten z cenami, których szukasz, klikasz prawym przyciskiem myszy i wybierasz Copy as cURL. Wtedy zaczyna się właściwa praca: usuwanie nagłówków mających sens tylko wewnątrz Chrome, przepisywanie całości pod własnego klienta i sprawdzanie, czy endpoint nadal odpowiada, gdy zapytanie nie pochodzi z przeglądarki.
Rozszerzenie FourA do Chrome, obecnie w wersji beta, skraca to do kilku kliknięć. Dodaje ono obok Network zakładkę FourA, która listuje requesty strony, znajduje ten zawierający widoczny fragment tekstu i kopiuje go jako gotowe wywołanie do Single, Proxy Finder lub Browser, w formacie curl, Python, Node lub MCP. To samo rozszerzenie zawiera popup, który kieruje ruch samego Chrome przez jednego z użytkowników Twojego portu proxy.
Nie ma go jeszcze w Chrome Web Store. Możesz je pobrać w sekcji Tools w Dashboardzie i załadować w trybie deweloperskim (Chrome, wersja 116 lub nowsza). Rozszerzenie jest bezpłatne; ruch przesyłany przez tunel pomniejsza limit proxy w Twoim planie, a wywołania uruchamiane z poziomu DevTools kosztują tyle, ile standardowo nalicza API.
Jak to działa
Otwórz DevTools na stronie, z której chcesz zbierać dane, i wybierz zakładkę FourA. Odśwież stronę, a zakładka wyświetli listę requestów podobnie jak Network, z domyślnie ukrytymi reklamami oraz analityką i przełącznikiem This site only dla zapytań własnych strony. Wpisz cenę, nazwę produktu lub dowolny inny widoczny tekst w polu Find in responses, a wskaże ono requesty, których response zawiera tę frazę. Często właśnie wtedy okazuje się, że strona renderuje się z endpointu JSON, który można wywołać bezpośrednio.
Wybierz request, wskaż silnik w sekcji FourA call i skopiuj całość. Oto postać cURL dla zapytania JSON na stronie sklepu (wersja skrócona: właściwy schowek zawiera każdy header wysłany przez stronę):
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
}'
Trzy elementy w tym wywołaniu są celowe. Headers są przesyłane jako lista par, dokładnie w takiej kolejności, w jakiej wysłała je strona, co odpowiada formatowi wymaganemu przez Single. Te, które Chrome generuje dla własnego połączenia (host, content-length, accept-encoding, connection i kilka innych), są odrzucane, ponieważ ich skopiowanie psuje działanie kolejnego klienta wysyłającego request. Z kolei browser wraz z os żądają profilu przeglądarki odpowiadającego wersji Chrome, z której korzystasz. Wersja została celowo pominięta: wywołanie otrzymuje najnowszą obsługiwaną przez nas wersję, zamiast zostać odrzuconym z powodu braku konkretnego wydania.
Format MCP to nazwa narzędzia (foura_single) wraz z tym samym JSON, gotowym do użycia przez agenta komunikującego się z naszym serwerem MCP.
Dalej znajdują się dwa przyciski. Open in the playground ładuje wywołanie do Dashboard Playground, wybierając ten sam klucz, jeśli należy do Ciebie. Run through FourA wysyła request i zestawia obok siebie wartości „The browser got” oraz „FourA got”, dzięki czemu możesz sprawdzić zgodność odpowiedzi przed napisaniem choćby jednej linijki kodu.
Rezultat
Ręczna metoda jest dobrze znana. Poradnik ScrapingBee wymaga pięciu kroków, aby wyciągnąć samo cURL z Chrome, i zwraca uwagę, że kopia zawiera każdy header oraz cookie wysłane przez przeglądarkę. W ten sposób zaczyna większość scraperów. To jednak dopiero połowa sukcesu, ponieważ taka kopia dowodzi jedynie, że request działa z poziomu Twojej przeglądarki i nigdzie indziej.
Karta FourA łączy oba etapy w jednym miejscu. Znajdujesz request po tym, co zwraca, zamiast zgadywać na podstawie parametrów URL, otrzymujesz wywołanie w formacie oczekiwanym przez API, a jedno kliknięcie weryfikuje jego działanie po naszej stronie. Sprawdza się to najlepiej na stronach, gdzie dane są pobierane przez request, którego URL nic Ci nie mówi.
Nie mamy jeszcze twardych danych dotyczących zaoszczędzonego czasu. To wersja beta, a rzetelnym sprawdzianem będzie Twoje kolejne zadanie.
Dla zaawansowanych
Przełącz silnik na Proxy Finder, a panel przygotuje ten sam request i zaoferuje opcję 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 to ścisła allowlista. Request nigdy nie przełącza się awaryjnie na inny kraj, a kraj, który obsłużył ruch, wraca jako exitCountry. To funkcja zależna od planu, więc plan bez targetowania na kraje odpowiada odmową z odpowiednim komunikatem.
Browser przyjmuje inny format, ponieważ otwiera strony zamiast wysyłać requesty. Przyjmuje headers jako obiekt, zamienia nagłówek Cookie strony w listę cookies ograniczoną do danego hosta i pomija user-agent oraz nagłówki client-hints, bo silnik wysyła własne (przy włączonej opcji profilu wysyła zamiast tego User-Agent tego okna). Odtwarza tylko metodę GET bez body. POST z formularza wyszukiwania powinien trafić do Single, gdzie body JSON jest przekazywane jako obiekt, a wszystko inne jako dokładny ciąg znaków wysłany przez stronę.
Kliknij prawym przyciskiem myszy dowolny request, aby uzyskać te same opcje kopiowania oraz Copy URL i Copy response. Klucz API do uruchomień znajduje się w Settings karty i pozostaje aktywny do momentu zamknięcia Chrome, chyba że zaznaczysz Keep the key on this computer.
Jedno ostrzeżenie, traktowane bardzo poważnie. Wywołanie skopiowane z cookies odtwarza sesję, na którą jesteś zalogowany. Traktuj je jak hasło i nie umieszczaj go w zgłoszeniach, na czatach ani w publicznych repozytoriach.
Część w popupie również zasługuje na wzmiankę. Mierzy adres, który strona widzi przez tunel, zamiast odczytywać go z Twoich ustawień, a gdy ten adres jest identyczny z Twoim, wyświetla Not routed. Gdy ikona zmienia kolor na czerwony z liczbą, oznacza to, że proxy odrzuciło tyle połączeń w ciągu ostatniej minuty, a popup wyjaśnia przyczynę. Opcje username options na stronie Location są dokładnie takie same, jak opisane w dokumentacji portu proxy.
Co dalej
Rozszerzenie pozostaje w fazie beta, instalowane z Dashboardu, dopóki nie uznamy go za ukończone, i nie podajemy daty publikacji w Chrome Web Store. Chrome to jedyna przeglądarka, dla której zostało zbudowane i przetestowane. Dokument setup guide opisuje bieżącą wersję; to, co zmieni się w następnej kolejności, zależy od tego, na co trafisz, uruchamiając kartę FourA w realnych zadaniach.
Gdy więc następnym razem strona sprawi problem Twojemu parserowi, otwórz DevTools zanim zajrzysz w HTML. Najtańszy scraper to często ten, który wywołuje request wykonany już wcześniej przez stronę.