Fingerprinting przeglądarki wyjaśnione dla scraperów
Fingerprinting przeglądarki to identyfikowanie odwiedzającego na podstawie łącznych cech jego przeglądarki, a nie ciasteczka czy konta. Serwisy używają go, by rozpoznawać powracających odwiedzających, wykrywać oszustwa i rozpoznawać automatyzację. Jeśli scrapujesz sieć, na to się natkniesz. Ten przewodnik wyjaśnia, co jest mierzone, dlaczego pojedyncza niezgodność sprawia kłopoty i jak utrzymać jeden spójny, dobrze zachowujący się profil do zbierania danych publicznych. Pokazuje też granice tego, co strojenie fingerprintu może i powinno robić.
Z czego składa się fingerprint
Żadna pojedyncza wartość sama nie identyfikuje przeglądarki, ale wiele drobnych wartości razem często to robi. Typowe dane wejściowe to:
- User agent i client hints. Nazwa przeglądarki, wersja i system operacyjny, które przeglądarka raportuje.
- Geometria ekranu i okna. Rozmiar ekranu, głębia kolorów, stosunek pikseli urządzenia i rozmiar viewportu.
- Język i strefa czasowa. Nagłówek
Accept-Language,navigator.languagesi strefa czasowa, którą raportuje przeglądarka. - Zainstalowane czcionki. Czcionki, które strona może wykryć, różniące się między systemami operacyjnymi i zainstalowanym oprogramowaniem.
- Wynik canvas, WebGL i audio. Drobne różnice w sposobie, w jaki stos grafiki lub dźwięku rysuje lub przetwarza obraz testowy albo dźwięk.
- Cechy na poziomie sieci. Handshake TLS, ustawienia HTTP/2 i kolejność nagłówków żądania. Są widoczne dla serwera, zanim uruchomi się jakikolwiek JavaScript.
Skrypty fingerprintingu łączą te dane w hash lub wynik punktowy. Im więcej stabilnych i nietypowych sygnałów, tym bardziej identyfikujący jest rezultat.
Dlaczego niezgodność rzuca się w oczy
Prawdziwa przeglądarka jest wewnętrznie spójna. Jej system operacyjny zgadza się z czcionkami, strefa czasowa zgadza się z ustawieniem języka, a rozmiar ekranu pasuje do urządzenia, na którym działa. Scrapery często łamią tę spójność nieświadomie:
- User agent skopiowany z przeglądarki desktopowej, wysłany z serwera bez zainstalowanych czcionek.
- Niemiecki nagłówek
Accept-Languagew żądaniu z adresem IP z innego kraju, ze strefą czasową, która nie pasuje do żadnego z nich. - Środowisko headless raportujące rozmiar okna, którego nie używa żaden prawdziwy monitor.
- Zupełnie nowy profil przy każdym uruchomieniu, więc ciasteczka i historia nigdy nie wyglądają jak powracający odwiedzający.
Każda niezgodność to niewielki sygnał. Razem mogą przenieść żądanie z kategorii "zwykły odwiedzający" do kategorii "wymaga bliższej uwagi".
Krok 1: zmierz własną konfigurację
Możesz zobaczyć, czego strona dowiaduje się o Twoim kliencie, ładując stronę testową fingerprintu, którą kontrolujesz, albo stronę diagnostyczną uruchomioną lokalnie. Spójrz na wartości i zapytaj, czy opisują jedną spójną maszynę. Oto minimalny przykład w Playwright, który wypisuje kilka z nich:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context(locale="en-GB", timezone_id="Europe/London")
page = context.new_page()
page.goto("https://example.com") # zamień na stronę, której jesteś właścicielem
print(page.evaluate("""() => ({
language: navigator.language,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
platform: navigator.platform,
viewport: [innerWidth, innerHeight]
})"""))
browser.close()
Krok 2: jedna tożsamość na profil
Najbardziej użyteczny nawyk to traktowanie każdej tożsamości scrapingowej jako jednego profilu. Nadaj jej jeden zestaw cech i zachowuj go przez cały jej okres życia:
- Jedna wersja przeglądarki, jeden user agent i jeden system operacyjny.
- Ustawienia lokalizacji, języka i strefy czasowej zgodne z regionem, z którego pochodzi ruch.
- Viewport i współczynnik skali urządzenia pasujące do prawdziwego ekranu.
- Trwały zestaw ciasteczek, dzięki czemu profil zachowuje się jak powracający odwiedzający.
Zmienianie jednej z tych cech przy każdym żądaniu jest bardziej podejrzane niż utrzymywanie ich stabilnie. To spójność sprawia, że profil wygląda zwyczajnie.
Krok 3: dawkuj profil jak odwiedzającego
Fingerprinting to tylko jedno źródło sygnałów. Serwisy patrzą też na to, jak szybko jeden profil porusza się po stronie. Profil, który ładuje dwieście stron produktów w minutę, nie jest człowiekiem, cokolwiek mówi jego fingerprint. Rozkładaj żądania, cache'uj wyniki i zatrzymuj się, gdy strona na to wskazuje. Lista kontrolna scrapowania bez blokad omawia dawkowanie szczegółowiej.
Krok 4: znaj granice
Strojenie fingerprintu nie sprawi, że zautomatyzowany profil będzie wyglądał jak człowiek, którego tam nie ma. Serwisy opierające się na fingerprintingu zwykle łączą go z limitami tempa, kontrolami kont i czasem captcha. Gdy pojawi się captcha, potrzebujesz tokenu od solvera, a nie kolejnych poprawek fingerprintu. Obecnie działającym typem captcha w Scarnox jest PopularCaptcha; przewodnik po PopularCaptcha w Pythonie pokazuje żądanie. Szerszy obraz tego, jakie widżety istnieją, znajdziesz w artykule rodzaje captcha wyjaśnione.
Co ważniejsze, omijanie fingerprintu nie jest licencją na ignorowanie zasad serwisu. Jeśli właściciel ograniczył zautomatyzowany dostęp, właściwym ruchem jest zatrzymanie się, a nie utrudnianie zauważenia Twojego profilu. Fingerprinting to także temat prywatności. Niektóre serwisy używają go do śledzenia ludzi między wizytami i to kolejny powód, by zbierać tylko to, czego potrzebuje Twój projekt.
Scrapuj odpowiedzialnie
- Przeczytaj
robots.txti regulamin, zanim zaczniesz scrapować serwis. - Używaj mniejszej liczby wolniejszych żądań i przechowuj w cache to, co już zebrałeś.
- Nie buduj profili podszywających się pod prawdziwych ludzi ani nie omijaj blokady.
- Nie przechowuj danych osobowych, których nie potrzebujesz, i obchodź się z tym, co zachowasz, ostrożnie.
Dokąd dalej
Jeśli Twój cel znajduje się za kontrolą na poziomie przeglądarki, zacznij od wykrywania przeglądarki headless, które omawia sygnały specyficzne dla zautomatyzowanych przeglądarek. Strony, które wymagają JavaScriptu, aby pokazać treść, opisano w artykule scrapowanie stron JavaScript.
Zacznij od darmowego kredytu próbnego, bez karty: załóż konto i wypróbuj przepływ PopularCaptcha na stronie, której jesteś właścicielem. Aktualne stawki znajdziesz na stronie cennika.