Fingerprinting del browser spiegato per chi fa scraping
Il fingerprinting del browser è la pratica di identificare un visitatore tramite l'insieme delle caratteristiche del suo browser, non tramite un cookie o un account. I siti lo usano per riconoscere i visitatori che tornano, per individuare frodi e per riconoscere l'automazione. Se fai scraping sul web, prima o poi lo incontrerai. Questa guida spiega cosa viene misurato, perché una sola incongruenza causa problemi e come mantenere un unico profilo coerente e corretto per raccogliere dati pubblici. Spiega anche i limiti di ciò che la regolazione del fingerprint può e deve fare.
Di cosa è fatto un fingerprint
Nessun valore singolo identifica da solo un browser, ma molti piccoli valori insieme spesso ci riescono. Gli input comuni includono:
- User agent e client hints. Il nome del browser, la versione e il sistema operativo che il browser dichiara.
- Geometria dello schermo e della finestra. Dimensioni dello schermo, profondità del colore, rapporto dei pixel del dispositivo e dimensione del viewport.
- Lingua e fuso orario. L'header
Accept-Language,navigator.languagese il fuso orario dichiarato dal browser. - Font installati. I font che la pagina riesce a rilevare, che differiscono tra sistemi operativi e software installato.
- Output di canvas, WebGL e audio. Piccole differenze nel modo in cui lo stack grafico o audio disegna un'immagine di prova o elabora un suono.
- Caratteristiche di rete. L'handshake TLS, le impostazioni HTTP/2 e l'ordine degli header delle richieste. Sono visibili al server anche prima che venga eseguito qualsiasi JavaScript.
Gli script di fingerprinting combinano questi valori in un hash o in un punteggio. Più segnali sono stabili e insoliti, più il risultato identifica.
Perché un'incongruenza si nota
Un browser reale è internamente coerente. Il suo sistema operativo corrisponde ai suoi font, il suo fuso orario corrisponde all'impostazione della lingua, e la dimensione dello schermo corrisponde al dispositivo su cui gira. Gli scraper spesso rompono questa coerenza senza volerlo:
- Uno user agent copiato da un browser desktop, inviato da un server che non ha alcun font installato.
- Un header
Accept-Languagetedesco su una richiesta il cui IP è in un altro paese, con un fuso orario che non corrisponde a nessuno dei due. - Un ambiente headless che dichiara una dimensione di finestra che nessun monitor reale usa.
- Un profilo completamente nuovo a ogni esecuzione, quindi cookie e storico non sembrano mai quelli di un visitatore che torna.
Ogni incongruenza è un piccolo segnale. Insieme possono far passare una richiesta da "visitatore normale" a "richiede un controllo più attento".
Passo 1: misura la tua configurazione
Puoi vedere cosa scopre una pagina sul tuo client caricando una pagina di test del fingerprint che controlli tu, o una pagina diagnostica che esegui in locale. Guarda i valori e chiediti se descrivono una macchina coerente. Ecco un esempio minimo con Playwright che ne stampa alcuni:
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") # sostituisci con una pagina di cui sei proprietario
print(page.evaluate("""() => ({
language: navigator.language,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
platform: navigator.platform,
viewport: [innerWidth, innerHeight]
})"""))
browser.close()
Passo 2: mantieni un'identità per profilo
L'abitudine più utile è trattare ogni identità di scraping come un unico profilo. Assegnagli un insieme di caratteristiche e mantienile per tutta la sua vita:
- Una sola build di browser, uno user agent e un sistema operativo.
- Una locale, una lingua e un fuso orario che corrispondano alla regione da cui arriva il traffico.
- Un viewport e un fattore di scala del dispositivo che corrispondano a uno schermo reale.
- Un cookie jar persistente, così il profilo si comporta come un visitatore che torna.
Cambiare uno di questi valori a ogni richiesta è più sospetto che mantenerlo stabile. La coerenza è ciò che rende un profilo normale.
Passo 3: fai muovere il profilo come un visitatore
Il fingerprinting è solo un input. I siti osservano anche la velocità con cui un profilo si muove nel sito. Un profilo che carica duecento pagine di prodotto in un minuto non è un essere umano, qualunque sia il suo fingerprint. Distribuisci le richieste, metti in cache i risultati e fermati quando una pagina lo indica. La checklist per evitare il blocco durante lo scraping tratta il ritmo in modo più approfondito.
Passo 4: conosci i limiti
La regolazione del fingerprint non può far sembrare un profilo automatizzato una persona che non c'è. I siti che si affidano al fingerprinting di solito lo combinano con limiti di frequenza, controlli sugli account e, a volte, un captcha. Quando compare un captcha, ti serve un token da un solver, non altri ritocchi al fingerprint. Il tipo di captcha attivo su Scarnox è PopularCaptcha; la guida Python a PopularCaptcha mostra la richiesta. Per il quadro più ampio dei widget esistenti, leggi tipi di captcha spiegati.
Soprattutto, l'elusione del fingerprint non è una licenza per ignorare le regole di un sito. Se il proprietario ha limitato l'accesso automatico, la mossa giusta è fermarsi, non rendere il tuo profilo più difficile da notare. Il fingerprinting è anche un tema di privacy. Alcuni siti lo usano per tracciare le persone tra una visita e l'altra, ed è un motivo in più per raccogliere solo ciò che serve al tuo progetto.
Scraping responsabile
- Leggi
robots.txte i termini del sito prima di fare scraping. - Usa meno richieste, più lente, e metti in cache ciò che hai già raccolto.
- Non costruire profili per impersonare persone reali o per aggirare un blocco.
- Non conservare dati personali che non ti servono, e tratta con cura quelli che conservi.
Dove andare dopo
Se il tuo obiettivo è protetto da un controllo a livello di browser, inizia con rilevamento dei browser headless, che copre i segnali specifici dei browser automatizzati. Le pagine che richiedono JavaScript per mostrare il loro contenuto sono trattate in scraping di siti JavaScript.
Inizia con crediti di prova gratuiti, senza carta di credito: crea un account e prova il flusso PopularCaptcha su una pagina di cui sei proprietario. Per le tariffe attuali, consulta la pagina dei prezzi.