執行python selenium
需要多ip測試網頁
但又不想購買proxy
自己架設tor proxy
1. 下載Tor
下載連結:
https://www.torproject.org/download/tor/
Linux有Homebrew直接下指令
brew install tor
2. 更改torrc參數
Windows
第一次執行 tor.exe 後會產生設定檔路徑在
C:\Users\<USER>\AppData\Roaming\tor
Linux
下指令
nano /usr/local/etc/tor/torrc
儲存以下設定
ControlPort 9051
SocksPort 9000 IsolateDestAddr
SocksPort 9001 IsolateDestAddr
SocksPort 9002 IsolateDestAddr
SocksPort 9003 IsolateDestAddr
SocksPort 9004 IsolateDestAddr
3. 啟動Tor
Windows
執行 tor.exe
Linux
下指令
tor
4. 設置Tor密碼
下指令
tor --hash-password "password"
產生 Hash 如下
16:6464F4D45216423A60D0784136BBBFC2F7B64F1014F071CECA46F84047
修改
C:\Users\<USER>\AppData\Roaming\tor\torrc
或是
/usr/local/etc/tor/torrc
加入
HashedControlPassword 16:6464F4D45216423A60D0784136BBBFC2F7B64F1014F071CECA46F84047
完整torrc設置如下
ControlPort 9051
SocksPort 9000 IsolateDestAddr
SocksPort 9001 IsolateDestAddr
SocksPort 9002 IsolateDestAddr
SocksPort 9003 IsolateDestAddr
SocksPort 9004 IsolateDestAddr
HashedControlPassword 16:6464F4D45216423A60D0784136BBBFC2F7B64F1014F071CECA46F84047
5. selenium+proxy+tor
請確保tor有啟動
執行python每3秒會更換一次ip
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 控制端口密碼替換 'cowcow'
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)