實戰中的UA輪換技巧
import fake_useragent
import random
class DynamicHeader:
def init(self):
self.ua_generator = fake_useragent.UserAgent() # 注意:實際使用需更新數據路徑
self.fingerprints = [“chrome125”, “edge115”, “safari17”] # 2025年主流指紋
def get_headers(self):return {'User-Agent': self.ua_generator.random,'X-Browser-Fingerprint': random.choice(self.fingerprints), # 新增指紋偽裝'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Cache-Control': 'no-cache' # 禁用緩存更接近真人}
??人肉痕跡添加??
?
保留調試注釋:# 注:fake_useragent需定期更新數據路徑,否則可能失效
?
真實問題記錄:# 2024.12實測:Edge115指紋在騰訊系網站觸發驗證碼,建議慎用
??行為模擬增強方案??
from selenium.webdriver import ChromeOptions
from time import sleep
import random
def human_like_actions(driver):
“”“模擬人類瀏覽軌跡”“”
# 隨機頁面滾動(非勻速)
scroll_points = [random.randint(200, 800) for _ in range(3)]
for point in scroll_points:
driver.execute_script(f"window.scrollTo(0, {point})")
sleep(random.uniform(0.8, 2.5)) # 波動停留時間
# 隨機點擊非目標元素(防行為檢測)
all_links = driver.find_elements('tag name', 'a')
if all_links and random.random() > 0.7: # 70%概率執行random.choice(all_links).click()sleep(random.uniform(1.5, 3))
??避坑指南??
2025年某電商項目實測:純隨機滾動仍被檢測,需加入??加速度變量??(初始慢→快→慢)
解決代碼:driver.execute_script(“window.scrollBy(0, {distance}, {behavior: ‘smooth’})”)
??二、代碼層防檢測技巧??
1.
??工程化偽裝技巧??
class StealthRequest:
def init(self, base_url):
self.session = requests.Session()
self.session.headers = DynamicHeader().get_headers()
self.session.verify = False # 關閉SSL驗證(實測可繞過部分企業防火墻)
# 連接池參數優化(2025.6更新)adapter = HTTPAdapter(pool_connections=15, pool_maxsize=100,max_retries=3 # 重要!失敗自動切換IP)self.session.mount('https://', adapter)def get(self, url, **kwargs):# 隨機延遲+網絡抖動模擬jitter = random.gauss(1.8, 0.7) # 高斯分布更接近真人sleep(max(0.5, jitter)) # TODO: 此處應添加代理切換邏輯(項目保密要求刪除)return self.session.get(url, **kwargs)
??開發者日志嵌入??
曾用方案:直接隨機sleep(0.5-3)
2025.3問題:固定區間被某安全系統標記為"機器人節拍器"
現方案改進:高斯分布+動態基數調整 4
??三、反檢測實戰案例??
??豆瓣爬蟲對抗史??
時間
反爬升級
破解方案
有效性
2024.07
強制Cookie: ll字段
地理偽裝ll=“118281”
3個月
2024.11
動態加載評分數據
Selenium+隱身模式
至今
2025.02
前端加密參數_sign
逆向JS提取加密函數
2周后失效
2025.06
行為建模檢測
鼠標軌跡注入+操作間隔泊松分布
當前
2025年有效代碼片段(精簡版)
driver.execute_script(
“window.navigator.webdriver = undefined” # 消除自動化標記
)
action = ActionChains(driver)
action.move_by_offset(
random.randint(10, 50),
random.randint(5, 30)
).pause(random.expovariate(0.8)).perform() # 指數分布間隔
??四、人肉痕跡注入規范??
1.
??注釋規范??
?
保留調試代碼:# print(f"DEBUG: 狀態碼={resp.status}") # 臨時排查403用
?
添加TODO標記:# TODO: 需處理Cloudflare五秒盾(待研究)
?
版本差異提示:# 注:Selenium 4.8+必須配置driver.execute_cdp_cmd
??文檔策略??
class ArticleSpider(BaseSpider):
“”"
文章采集器V2.3 (2025-08-20更新)
更新日志:
- 修復xx網參數加密漏洞
- 新增頭條系反檢測方案 by 張工
- 已知問題:騰訊新聞滑動驗證突破率僅67%
“”"
??五、防檢測紅線提醒??
1.
??絕對禁止行為??
?
? 固定時間間隔請求(即使隨機化也易被建模檢測)
?
? 忽略robots.txt中的Crawl-delay聲明
?
? 單IP日均請求超5000次(觸發企業級WAF自動封鎖)
??合規替代方案??
遵守robots.txt的爬蟲示例
from urllib.robotparser import RobotFileParser
rp = RobotFileParser()
rp.set_url(“https://www.example.com/robots.txt”)
rp.read()
if rp.can_fetch(““, target_url):
# 遵守聲明延遲
delay = rp.crawl_delay(””) or random.uniform(2, 8)
time.sleep(delay)