執行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)

Categorized in: