Devo confermare Se è possibile utilizzare Stem per avviare un processo Tor che espone 127.0.0.1:port, quindi utilizzarlo su script di selenio come proxy (SOCKS).Selenium WebDriver + Tor come proxy con Stem?
Sto usando Python 3.4.2, Stem 1.3.0 e Tor (tor-win32-tor-0.2.5.10 expert bundle) su Windows.
Questo pezzo di codice funziona con un proxy SOCKS standard.
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')
Ma non riesco a farlo funzionare con Tor come proxy. Ho provato a creare un processo Tor, e il suo creato. Ma non so davvero se funzioni correttamente. Non ottengo errori nel mio 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',
)
poi ho provato due modi per creare il collegamento o autenticare. Il primo utilizza with
e stem.control.controller
. E la seconda a livello inferiore con stem.socket
e stem.connection
Il primo:
# 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)
'''
Il secondo:
# 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
'''
Ed entrambi corsa senza errori ... Ma quando io uso il codice chiamare l'istanza di WebDriver di Firefox con 127.0.0.1:9000
come proxy (anche provato con 127.0.0.1:9051
, perché non conosco la differenza tra socksPort
e controlPort
). Non funziona.
Grazie per lo sforzo, ma questo non è vero. Stem ** CAN ** avvia il processo e crea un'istanza TOR corrente. Puoi crearlo usando 'stem.process.launch_tor_with_config()' in questo modo non hai nemmeno bisogno di un file di configurazione, passi la configurazione alla funzione. L'ho fatto su Linux, ma la mia domanda era per Windows. Quello che hai detto sulle porte è corretto. Altro: https://stem.torproject.org/api/process.html – Jeflopo