簡體   English   中英

Selenium WebDriver + Tor作為Stem的代理?

[英]Selenium WebDriver + Tor as proxy with Stem?

我需要確認If Stem是否可用於啟動暴露127.0.0.1:port的Tor進程,然后在selenium腳本上使用它作為代理(SOCKS)。

我在Windows上使用Python 3.4.2,Stem 1.3.0和Tor(tor-win32-tor-0.2.5.10專家包)。

這段代碼適用於標准的SOCKS代理。

from selenium import webdriver
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

profile = FirefoxProfile()
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.socks', '127.0.0.1')
profile.set_preference('network.proxy.socks_port', 9000)

driver = webdriver.Firefox(profile)
driver.implicitly_wait(30)
driver.get('http://www.reddit.com')

但我無法讓它與Tor合作作為我的代理。 我試圖創建一個Tor進程,並創建它。 但我真的不知道它是否正常工作。 我的tor_error_log.txt沒有錯誤

# File: stem_process.py
import stem.process
import stem

stem.process.launch_tor_with_config(
  config = {
    'SocksPort': '9000',
    'ControlPort': '9051',
    'ExitNodes': '{us}',
    'Log': [
      'NOTICE stdout',
      'ERR file c:\\tor-win32-tor-0.2.5.10\\Tor\\tor_error_log.txt',
    ],
  },
  tor_cmd = 'C:\\tor-win32-tor-0.2.5.10\\Tor\\tor.exe',
)

然后我嘗試了兩種方法來創建連接或進行身份驗證。 第一個是使用withstem.control.controller 第二個是較低級別的stem.socketstem.connection

第一個:

# File: stem_test1.py
from stem.control import Controller

with Controller.from_port(address='127.0.0.1', port=9051) as controller: #port = 9051
  controller.authenticate()

  print("Tor is running version %s" % controller.get_version())

'''
# Output:
Tor is running version 0.2.5.10 (git-13318a95ddfbbf8d)
'''

第二個:

# File: stem_test2.py
import sys
import stem
import stem.connection
import stem.socket

if __name__ == '__main__':
  try:
    control_socket = stem.socket.ControlPort(port = 9051)
    stem.connection.authenticate(control_socket)
  except stem.SocketError as exc:
    print('Unable to connect to tor on port 9051: %s' % exc)
    sys.exit(1)
  except stem.connection.AuthenticationFailure as exc:
    print('Unable to authenticate: %s' % exc)
    sys.exit(1)

  print("Issuing 'GETINFO version' query...\n")
  control_socket.send('GETINFO version')
  print(control_socket.recv())

'''
# Output:
Issuing 'GETINFO version' query...

version=0.2.5.10 (git-13318a95ddfbbf8d)
OK
'''

並且兩者都運行沒有錯誤......但是當我使用代碼以127.0.0.1:9000作為代理調用Firefox WebDriver實例時(也嘗試使用127.0.0.1:9051 ,因為我真的不知道socksPortcontrolPort )它不起作用。

Stem不能創建一個tor進程,它只是一個庫,用於通過控制端口連接到現有的tor服務器進行檢查/控制。

要創建tor進程本身,您需要讓系統使用upstart / launchctl / etc啟動它。 或者,您可以從命令行鍵入tor ,如果已安裝它,它將在前台運行。

有了它,要使用干,你需要編輯你的torrc到。 啟用ControlPort,和b。 設置一個身份驗證方法(存儲在你的torrc中的cookieauth或哈希密碼)。 默認的tor SocksPort是9050,ControlPort是9051。

SocksPort是您路由流量的那個(即firefox),ControlPort是您連接到的端口。 請注意,只有你甚至需要干,因為它似乎你正試圖用它啟動一個tor實例(而且這是不可行的),如果你讓它在你的系統香草上運行,它將適用於你配置了selenium / firefox(好吧,默認端口是9050而不是9000)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM