Muszę potwierdzić, czy można użyć Trzonu do uruchomienia procesu Tora, który udostępnia 127.0.0.1:port, a następnie użyć go na skrypcie selenowym jako proxy (SOCKS).Selenium WebDriver + Tor jako proxy ze stemplem?
Używam Pythona 3.4.2, Trzonu 1.3.0 i Tora (tor-win32-tor-0.2.5.10 expert ) w systemie Windows.
Ten fragment kodu działa ze standardowym proxy 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')
Ale nie mogę sprawić, by działała z Torem jako moim pełnomocnikiem. Próbowałem stworzyć proces Tora i jego stworzenie. Ale tak naprawdę nie wiem, czy to działa poprawnie. Nie pojawiają się błędy w moim 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',
)
Potem próbowałem dwa sposoby tworzenia połączenia lub uwierzytelniania. Pierwsza z nich używa with
i stem.control.controller
. A druga na niższym poziomie z stem.socket
i stem.connection
Pierwszy:
# 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)
'''
Drugi:
# 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
'''
i zarówno prowadzony bez błędów ... Ale kiedy użyć kodu aby wywołać instancję przeglądarki Firefox WebDriver pod numerem 127.0.0.1:9000
jako proxy (również próbowano z 127.0.0.1:9051
, ponieważ tak naprawdę nie znam różnicy między socksPort
i controlPort
) To nie działa.
Dzięki za wysiłek, ale to nie jest prawda. Pytanie ** CAN ** uruchamia proces i tworzy działającą instancję TOR. Możesz go utworzyć za pomocą 'stem.process.launch_tor_with_config()' w ten sposób nie potrzebujesz nawet pliku konfiguracyjnego, przekazujesz konfigurację do funkcji. Zrobiłem to w Linuksie, ale moje pytanie dotyczyło Windowsa. To, co powiedziałeś o portach, jest poprawne. Więcej: https://stem.torproject.org/api/process.html – Jeflopo