Tôi cần phải xác nhận Nếu Stem có thể được sử dụng để khởi chạy một quá trình Tor hiển thị 127.0.0.1:port, sau đó sử dụng nó trên các kịch bản selenium làm proxy (SOCKS).Selenium WebDriver + Tor là proxy với gốc?
Tôi đang sử dụng Python 3.4.2, Gốc 1.3.0 và Tor (tor-win32-tor-0.2.5.10 chuyên gia gói) trên Windows.
Đoạn mã này hoạt động với proxy SOCKS chuẩn.
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')
Nhưng tôi không thể quản lý nó làm việc với Tor làm proxy của mình. Tôi đã cố gắng tạo ra một quá trình Tor, và nó được tạo ra. Nhưng tôi không thực sự biết nếu nó hoạt động đúng. Tôi không gặp lỗi trong số 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',
)
Sau đó, tôi đã thử hai cách để tạo kết nối hoặc xác thực. Mục đầu tiên là sử dụng with
và stem.control.controller
. Và thứ hai ở mức thấp với stem.socket
và stem.connection
Thứ nhất:
# 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)
'''
Thứ hai:
# 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
'''
và cả hai chạy mà không có lỗi ... Nhưng khi tôi sử dụng mã để gọi phiên bản Firefox WebDriver với 127.0.0.1:9000
làm proxy (cũng đã thử với 127.0.0.1:9051
, vì tôi không thực sự biết sự khác biệt giữa socksPort
và controlPort
) Nó không hoạt động.
Cảm ơn bạn đã nỗ lực nhưng điều này là không đúng sự thật. Gốc ** CÓ THỂ ** khởi chạy tiến trình, và tạo ra một TOR instance đang chạy. Bạn có thể tạo nó bằng cách sử dụng 'stem.process.launch_tor_with_config()' bằng cách này bạn thậm chí không cần một tệp cấu hình, bạn chuyển cấu hình cho hàm. Tôi đã làm điều đó trong Linux, nhưng câu hỏi của tôi là dành cho Windows. Những gì bạn nói về các cổng là chính xác. Thêm: https://stem.torproject.org/api/process.html – Jeflopo