Dlaczego wykrywanie zdarza się
Wykrywanie skanowania sieci jest procesem wielowarstwowym. Systemy antybotowe nie opierają się na jednym sygnale - łączą w sobie reputację IP, nagłówki HTTP, Odciski palców TLS, odciski palców przeglądarkioraz analizy behawioralnej w celu obliczenia oceny ryzyka. Kiedy ten wynik przekracza próg, zostaje zablokowany, serwowane CAPTCHA, lub karmione wprowadzające w błąd dane.
Niniejszy przewodnik stanowi kompleksowe podejście do ograniczania wykrywania wszystkich warstw. Przegląd funkcjonowania tych systemów znajduje się w naszym artykule dotyczącym filaru: jak systemy anty-bot wykrywają proxy.
Warstwa 1: Reputacja IP i wybór proxy
Twój adres IP to pierwsza rzecz, jaką widzi serwer. Systemy anty-bot utrzymują bazy danych, które zdobywają adresy IP według typu, historii i zachowania.
Wybór typu proxy
| Typ proxy | Ryzyko wykrycia | Najlepsze dla |
|---|---|---|
| Mieszkalne | Niski | Większość zadań scrating, chronione miejsca |
| ISP (Static Residential) | Średnie | Długie sesje, rachunki |
| Datacenter | Wysoki | Niechronione obiekty, zadania o dużym wolumenie |
| Mobile | Bardzo niski | Najwyższe zabezpieczenia, media społecznościowe |
Dla większości projektów scrating, ProxyHat 's residential proxy oferują najlepszą równowagę niskiego ryzyka wykrywania i efektywności kosztowej. Zobacz nasze szczegółowe Porównanie typu proxy dla wskazówek.
Strategia rotacji IP
# Python: Rotating proxy per request using ProxyHat
import requests
proxy_url = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
proxies = {
"http": proxy_url,
"https": proxy_url
}
# Each request through the gateway gets a different IP
for url in urls_to_scrape:
response = requests.get(url, proxies=proxies, timeout=30)
process(response)
- Obróć na żądanie za zamieszczenie stron i wyników wyszukiwania.
- Użyj lepkich sesji dla wielostronnych przepływów (paginacja, sekwencje logowania).
- Geo-target your IP aby dopasować oczekiwaną publiczność witryny za pomocą Cel lokalizacji ProxyHat.
Warstwa 2: nagłówki HTTP
Nieprawidłowe lub brakujące nagłówki HTTP są jednym z najprostszych sygnałów dla systemów anty-bot do wykrywania. Prawdziwa przeglądarka wysyła 15- 20 nagłówków w określonej kolejności; domyślny skrypt Pythona wysyła 3- 4.
Podstawowe nagłówki
# Python: Realistic header set
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Cache-Control": "max-age=0",
"Sec-Ch-Ua": '"Chromium";v="131", "Not_A Brand";v="24"',
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": '"Windows"',
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"Connection": "keep-alive"
}
response = requests.get(url, headers=headers, proxies=proxies)
Zasady spójności nagłówków
- Mecz Sec- Ch- Ua z User- Agent: Jeśli chcesz Chrome 131,
Sec-Ch-Uamusi odnosić się do wersji 131. - Dołącz wszystkie nagłówki sec- Fetch: Modern Chrome wysyła je na każdą nawigację. Brak ich to silny sygnał botowy.
- Ustaw język przyjmowania, aby pasował do geo proxy: Proxy USA
Accept-Language: ja-JPTo podejrzane. - Zachować kolejność nagłówka: Niektóre systemy antybotowe sprawdzają kolejność nagłówków. Użyj bibliotek, które zachowują kolejność wprowadzania.
Warstwa 3: TLS i HTTP / 2
Twoja biblioteka klienta HTTP produkuje unikalny Odcisk palca TLS Systemy anty-botowe sprawdzają twojego agenta. Agent Chrome z odciskiem palca Pythona TLS jest natychmiast oznakowany.
Łagodzenie według języka
| Język | Domyślna biblioteka | Ryzyko wykrycia | Alternatywa dla przeglądarki |
|---|---|---|---|
| Python | wnioski / urllib3 | Bardzo wysoki | curl _ cffi z podszyciem |
| Node.js | axios / got | Wysoki | got- scrating |
| Idź. | net / http | Bardzo wysoki | UTLS + transport niestandardowy |
# Python: Browser-grade TLS with curl_cffi
from curl_cffi import requests as curl_requests
response = curl_requests.get(
"https://example.com",
impersonate="chrome",
proxies={
"http": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080",
"https": "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
}
)
Warstwa 4: Drukowanie odcisków palców w przeglądarce
Jeśli używasz przeglądarki bez głowy, anty-bot JavaScript sonduje odcisk palca przeglądarki - Canvas, WebGL, AudioContext, właściwości nawigatora. Kluczową zasadą jest wewnętrzna spójność:
- Wszystkie sygnały daktyloskopijne muszą się ze sobą zgadzać
- Odciski palców muszą pasować do żądań twojego agenta.
- Odcisk palca powinien się zmienić, gdy obrócisz proxy
Konfiguracja stealth
// Node.js: Puppeteer with stealth and proxy
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
headless: 'new',
args: [
'--proxy-server=http://gate.proxyhat.com:8080',
'--disable-blink-features=AutomationControlled',
'--window-size=1920,1080'
]
});
const page = await browser.newPage();
await page.authenticate({
username: 'USERNAME',
password: 'PASSWORD'
});
await page.setViewport({ width: 1920, height: 1080 });
Warstwa 5: Wzory behawioralne
Nawet z perfekcyjną techniką naśladowania, wzory zachowania bot- jak zachowanie spowoduje wykrycie. Systemy antybotowe analizują czas, wzorce nawigacji i sygnatury interakcji.
Prośba o czas
- Dodaj losowe opóźnienia: Ludzie nie składają wniosków w dokładnych odstępach czasu. Dodaj 1-5 sekund losowego opóźnienia pomiędzy żądaniami.
- Odmienne opóźnienia według rodzaju strony: Strony treści zasługują na dłuższe "czytanie" pauzy niż wyświetlanie stron.
- Unikać pęknięć wzorów: Nie rób 50 szybkich żądań, a następnie pauza. Rozpowszechnianie wniosków równomiernie z naturalną wariancją.
# Python: Natural request timing
import time
import random
def scrape_with_natural_timing(urls, proxies):
for url in urls:
response = requests.get(url, proxies=proxies, headers=headers)
process(response)
# Random delay: 1-4 seconds with normal distribution
delay = max(0.5, random.gauss(2.5, 0.8))
time.sleep(delay)
Wzory nawigacyjne
- Podążaj ścieżkami naturalnymi: Odwiedź najpierw stronę główną, potem stronę kategorii, a następnie strony szczegółowe - nie przejść bezpośrednio do głębokich adresów URL.
- Ustaw właściwe nagłówki Referer: Każda strona powinna odnosić się do poprzedniej strony jako jej referer.
- Przekierowywanie obsługi: Podążaj za przekierowaniem HTTP w sposób naturalny, zamiast ponownie próbować oryginalnego adresu URL.
Zarządzanie sesją
- Utrzymanie słoików na ciasteczka: Akceptuj i zwracaj pliki cookie w trakcie sesji - odrzucenie wszystkich plików cookie jest sygnałem bot.
- Limit długości sesji: Po 50- 100 próbach, rozpocząć nową sesję ze świeżym IP i cookies.
- Limity stawek przestrzegania: Jeśli otrzymacie 429 odpowiedzi, wycofajcie się wykładniczo, zamiast natychmiast próbować.
Warstwa 6: Walidacja odpowiedzi
Wykrywanie nie zawsze powoduje blokadę. Strony mogą służyć do różnych treści, wstrzyknąć wprowadzające w błąd dane lub zwrócić miękkie bloki. Zawsze potwierdzaj swoje odpowiedzi:
- Sprawdź kody stanu: 200 nie zawsze oznacza sukces - niektóre strony zwracają 200 ze stronami CAPTCHA lub pustą zawartością.
- Sprawdzić strukturę treści: Upewnij się, że odpowiedź zawiera oczekiwane elementy (ceny produktów, tekst artykułu itp.).
- Monitor dla miodu: Ukryte linki lub pola form przeznaczone do połowu automatycznych czołgów.
- Wskaźniki sukcesu toru: Jeśli wskaźnik sukcesu spadnie poniżej 90%, coś się zmieniło i wymaga śledztwa.
Kompleksowa lista kontrolna wykrywania
| Warstwa | Działanie | Priorytet |
|---|---|---|
| IP | Użyj proxy mieszkalnych z geocelowaniem | Krytyczne |
| IP | Obróć IP na żądanie lub sesję | Krytyczne |
| Nagłówki | Wyślij kompletne, realistyczne zestawy nagłówków | Krytyczne |
| Nagłówki | Dopasuj język akceptacji do lokalizacji proxy | Wysoki |
| TLS | Użyj biblioteki TLS dla przeglądarki | Krytyczne |
| TLS | Dopasuj odcisk palca TLS do żądanej przeglądarki | Krytyczne |
| Przeglądarka | Użyj wtyczek do przeglądarek bez głowy | Wysoki |
| Przeglądarka | Utrzymanie spójnych profili odcisków palców | Wysoki |
| Zachowanie | Dodaj losowe opóźnienia pomiędzy wnioskami | Wysoki |
| Zachowanie | Podążaj naturalnymi ścieżkami nawigacyjnymi | Średni |
| Zachowanie | Utrzymywanie plików cookie w sesjach | Średni |
| Walidacja | Sprawdź zawartość odpowiedzi, nie tylko kody statusu | Wysoki |
Przykład: Pełny skaner antydetekcji
# Python: Complete anti-detection scraper setup
from curl_cffi import requests as curl_requests
import time
import random
class StealthScraper:
def __init__(self, proxy_user, proxy_pass):
self.proxy = f"http://{proxy_user}:{proxy_pass}@gate.proxyhat.com:8080"
self.session = curl_requests.Session(impersonate="chrome")
self.session.proxies = {
"http": self.proxy,
"https": self.proxy
}
self.request_count = 0
def get(self, url, referer=None):
headers = {}
if referer:
headers["Referer"] = referer
response = self.session.get(url, headers=headers, timeout=30)
self.request_count += 1
# Rotate session every 50-80 requests
if self.request_count >= random.randint(50, 80):
self._rotate_session()
# Natural delay
time.sleep(max(0.5, random.gauss(2.0, 0.6)))
return response
def _rotate_session(self):
self.session = curl_requests.Session(impersonate="chrome")
self.session.proxies = {
"http": self.proxy,
"https": self.proxy
}
self.request_count = 0
# Usage
scraper = StealthScraper("USERNAME", "PASSWORD")
home = scraper.get("https://example.com")
listing = scraper.get("https://example.com/products", referer="https://example.com")
detail = scraper.get("https://example.com/products/123", referer="https://example.com/products")
When to Escalate Your Approach
Zacznij od najprostszego podejścia i eskaluj tylko w razie potrzeby:
- Poziom 1 - Klient HTTP + nagłówki + proxy: Pracuje dla większości stron. Stosowanie
curl_cffilubgot-scrapingz ProksyHat proxy. - Poziom 2 - Dodaj TLS klasy przeglądarkowej: Wymagane, gdy strona sprawdza odciski palców JA3 / JA4.
- Poziom 3 - przeglądarka bez głowy + stealth: Niezbędne dla JavaScript- renderowane treści i wyrafinowane systemy antybotowe.
- Poziom 4 - Pełna automatyzacja przeglądarki z mimiką behawioralną: Rezerwat na najbardziej chronione obiekty (Cloudflail Enterprise, PerimeterX itp.).
W odniesieniu do wzorców wdrażania w poszczególnych językach należy zapoznać się z naszymi przewodnikami: Python, Node.jsoraz Idź..
Wytyczne etyczne
Techniki antydetekcji to narzędzia - ich etyczne zastosowanie zależy od kontekstu. Zawsze:
- Szacunek robot.txt i warunki świadczenia usług
- Scrape tylko publicznie dostępne dane
- Ograniczenie stawek za żądanie, aby uniknąć wpływu serwera
- Zgodność z przepisami dotyczącymi ochrony danych (GDPR, CCPA)
- Stosowanie praktyki etycznego skrobania jako wartość wyjściowa
Celem antydetekcji nie jest ominięcie legalnego bezpieczeństwa. Ma to na celu zapewnienie, że automatyczny dostęp do danych publicznych nie jest nieprawidłowo oznaczony jako złośliwy.






