用 Python 實現谷歌瀏覽器多開:實現獨立指紋與代理的實戰方法
在做跨境電商運營、多賬號管理、反檢測爬蟲或自動化測試時,我們常常面臨一個共同的問題:如何在一臺電腦上同時運行多個瀏覽器實例,并確保每個實例都擁有獨立的瀏覽器指紋、獨立的代理IP和獨立的登錄環境?不少人第一時間會想到使用“指紋瀏覽器”類的商業軟件,確實方便,但成本較高,而且靈活性有限。
方案原理
其實,使用 Python + Chrome + Selenium,就可以以非常低的成本、極高的可控性,打造一套屬于自己的瀏覽器多開方案,本文將詳細介紹實現過程。
這個方案的原理是基于 Chrome 瀏覽器支持的參數 --user-data-dir
,它可以讓每個瀏覽器實例使用獨立的配置目錄,從而實現 Cookie、本地存儲、插件、緩存等環境的完全隔離。每個實例都像一臺“虛擬瀏覽器”,互不干擾。
同時,我們通過 Selenium 來啟動這些瀏覽器實例,控制它們打開網頁、執行操作,并通過啟動參數設置代理IP和瀏覽器指紋(如 User-Agent、語言、WebRTC、窗口大小等),再借助 JavaScript 注入技術,在頁面打開前覆蓋掉一些敏感屬性,比如 navigator.webdriver
、plugins
、platform
等。這些字段是很多平臺用于判斷自動化操作和多賬號行為的關鍵指標,因此這一步也是實現指紋偽裝的核心。
準備高質量代理IP
實現多開最關鍵的一步,是為每個實例分配一個干凈、穩定的代理IP。如果使用公共免費代理,不但速度慢,而且穩定性差、IP質量不可控,非常容易被識別甚至封禁。建議使用商業級代理服務,支持高匿名、自動輪換、地域選擇等特性。
目前我自己使用的代理服務是快代理,它支持 HTTP、HTTPS、Socks5 協議,提供靜態和動態兩種套餐,可以一鍵獲取 API 接口,非常適合開發者自動化調用。如果你打算做中到大型賬號管理或腳本項目,這是一個性價比非常高的選擇。
用 Python 啟動多實例瀏覽器
可以來看一個具體的實現代碼。核心思路就是定義一個函數 launch_browser
,它會啟動一個 Chrome 實例,設置它的獨立配置路徑、代理IP、User-Agent 等參數,然后通過 Chrome DevTools Protocol(CDP)注入一段 JS 腳本,在頁面加載前偽裝指紋字段。這樣啟動的每個瀏覽器,都會擁有一個獨立的環境。下面是完整代碼:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os
import time
def launch_browser(profile_id, proxy=None, user_agent=None):
profile_path = os.path.abspath(f"./chrome_profiles/profile_{profile_id}")
os.makedirs(profile_path, exist_ok=True)
options = Options()
options.add_argument(f"--user-data-dir={profile_path}")
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
if proxy:
options.add_argument(f'--proxy-server={proxy}')
if user_agent:
options.add_argument(f'user-agent={user_agent}')
# 指紋偽裝基礎設置
options.add_argument("--lang=en-US,en;q=0.9")
options.add_argument("--window-size=1200,800")
options.add_argument("--disable-webgl")
options.add_argument("--mute-audio")
driver = webdriver.Chrome(options=options)
# 注入 JS,修改 navigator 字段
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {get: () => undefined});
Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});
Object.defineProperty(navigator, 'platform', {get: () => 'Win32'});
Object.defineProperty(navigator, 'plugins', {get: () => [1,2,3]});
"""
})
driver.get("https://browserleaks.com/javascript")
return driver
# 批量啟動兩個實例作為示例
browsers = []
proxies = ["http://127.0.0.1:8001", "http://127.0.0.1:8002"]
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4)..."
]
for i in range(2):
driver = launch_browser(i+1, proxies[i], user_agents[i])
browsers.append(driver)
time.sleep(300) # 停留一段時間查看效果
for b in browsers:
b.quit()
以上這段代碼實現了完整的瀏覽器多開功能。每個實例都可以訪問不同的網站,登錄不同的賬號,甚至模擬不同地區的訪問行為。你只需要準備好代理IP列表和 User-Agent 列表,即可實現大規模賬號環境的“去重”部署。而且這些瀏覽器運行時是可控的,也就是說你可以后續通過腳本繼續控制它們,比如執行點擊、輸入、抓取、截圖等操作,實現一整套自動化任務。相比之下,手動開幾十個窗口,不僅效率低,而且環境很難完全隔離,容易被平臺檢測為“批量操作”。
當然需要說明的是,通過代碼控制雖然能實現常規字段的偽裝,比如 navigator.webdriver
、User-Agent、語言、屏幕大小等,但對于更底層的指紋識別技術,比如 Canvas、WebGL、AudioContext 這些繪圖和音頻指紋,想要完美偽裝就要引入專門的瀏覽器插件、擴展程序,甚至使用指紋瀏覽器(如 AdsPower、GoLogin、Multilogin)才能實現更強的防檢測能力。不過如果你的目標是做基礎賬號隔離、基本防追蹤、初級多開,這套方案已經綽綽有余。
總結
這種基于 Python 腳本的 Chrome 多開方案,有幾個突出的優點:首先,它非常靈活和可控,你可以通過代碼控制每一個參數,實現完全定制化的運行邏輯;其次,它支持批量賬號管理,每個實例擁有獨立的瀏覽器配置、代理IP和存儲空間,不存在任何賬號關聯問題;再者,它也支持 Cookie 隔離、本地環境獨立、插件個性化配置等高級操作;最后,通過 Selenium、Pyppeteer 等庫,還能實現完整的自動化腳本控制,從打開瀏覽器、輸入賬號密碼到完成指定任務,全流程無人工干預。可以說,這是一種極具性價比的瀏覽器環境隔離和自動化管理方案。