在本篇文章中,我們將深入探討如何在 Python 中使用 Tor 代理來進行多 IP 測試,特別是與 Selenium 結合使用的方式。這是進行網頁爬蟲或自動化測試時的一個重要技巧,可以有效避免 IP 被封鎖的問題。本文將提供完整的教學流程、實作範例、錯誤排除以及延伸應用,確保你能夠輕鬆上手。

## 1. 下載 Tor

首先,我們需要下載並安裝 Tor。你可以從官方網站獲取最新版本:[Tor Project 下載頁面](https://www.torproject.org/download/tor/)

### Linux 安裝

若你使用 Linux,可以透過 Homebrew 安裝 Tor,執行以下指令:

“`bash
brew install tor
“`

## 2. 更改 torrc 參數

### Windows

在 Windows 上,第一次執行 `tor.exe` 後,系統會自動生成設定檔,路徑如下:

“`
C:\Users\\AppData\Roaming\tor
“`

### Linux

在 Linux 上,打開 Tor 的設定檔:

“`bash
nano /usr/local/etc/tor/torrc
“`

然後儲存以下設定:

“`plaintext
ControlPort 9051
SocksPort 9000 IsolateDestAddr
SocksPort 9001 IsolateDestAddr
SocksPort 9002 IsolateDestAddr
SocksPort 9003 IsolateDestAddr
SocksPort 9004 IsolateDestAddr
“`

## 3. 啟動 Tor

### Windows

執行 `tor.exe` 來啟動 Tor 服務。

### Linux

在 Linux 上,執行以下指令來啟動 Tor:

“`bash
tor
“`

## 4. 設置 Tor 密碼

為了增強安全性,我們需要設置 Tor 控制端口的密碼。執行以下指令:

“`bash
tor –hash-password “password”
“`

這將產生一個哈希值,記下來並修改以下檔案:

– Windows: `C:\Users\\AppData\Roaming\tor\torrc`
– Linux: `/usr/local/etc/tor/torrc`

在檔案中添加以下內容:

“`plaintext
HashedControlPassword 16:6464F4D45216423A60D0784136BBBFC2F7B64F1014F071CECA46F84047
“`

完整的 `torrc` 設置如下:

“`plaintext
ControlPort 9051
SocksPort 9000 IsolateDestAddr
SocksPort 9001 IsolateDestAddr
SocksPort 9002 IsolateDestAddr
SocksPort 9003 IsolateDestAddr
SocksPort 9004 IsolateDestAddr
HashedControlPassword 16:6464F4D45216423A60D0784136BBBFC2F7B64F1014F071CECA46F84047
“`

## 5. 使用 Selenium 與 Tor 代理

確保 Tor 已經啟動後,我們可以使用以下 Python 程式碼來每 3 秒更換一次 IP:

“`python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from stem import Signal
from stem.control import Controller
import time
import random

def renew_tor_ip():
with Controller.from_port(port=9051) as controller:
controller.authenticate(password=’password’) # 用你的 Tor 控制端口密碼替換 ‘password’
controller.signal(Signal.NEWNYM)
time.sleep(5) # 等待 Tor 生成新的路由

def setup_chrome_with_tor():
socks_port = random.choice([‘9000’, ‘9001’, ‘9002’, ‘9003’, ‘9004’]) # 隨機選擇一個 SocksPort
chrome_options = Options()
# chrome_options.add_argument(‘–headless’) # 若需要無頭模式,請取消註解
chrome_options.add_argument(‘–proxy-server=socks5://127.0.0.1:’ + socks_port) # 配置 Chrome 使用 Tor 代理

# 使用 ChromeDriverManager 自動管理 ChromeDriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
return driver

while True:
# 使用這個函數來啟動瀏覽器並通過 Tor 訪問網站
driver = setup_chrome_with_tor()
driver.get(‘http://icanhazip.com’)
print(driver.page_source) # 打印當前 IP 地址
driver.quit()

# 更換 Tor 路由來獲得新的 IP 地址
renew_tor_ip()

time.sleep(3)
“`

### 錯誤排除

1. **Tor 未啟動**:確保 Tor 服務正在運行。
2. **代理設置錯誤**:檢查所使用的 SocksPort 是否正確。
3. **網路連接問題**:確保你的網路連接正常。

## 延伸應用

利用 Tor 代理技術,你可以進行更廣泛的網頁爬蟲任務,特別是需要隱藏真實 IP 或者需要高頻率請求的情況。請遵守網站的使用條款,避免對伺服器造成負擔。

如需進一步了解 Python 相關技術,建議參考 [Vocus 教學文](https://vocus.cc/)。

## Q&A(常見問題解答)

**Q1: 可以使用其他代理服務器嗎?**
A1: 是的,你可以使用其他代理服務器,但需確保它們支持 SOCKS5 協議。

**Q2: 為什麼我需要更換 IP?**
A2: 更換 IP 可以幫助避免被網站封鎖,特別是在進行大量請求時。

**Q3: Tor 會影響我的網速嗎?**
A3: 是的,使用 Tor 可能會導致網速變慢,因為它經過多個中繼節點。

Categorized in: