我需要确认是否可以使用Stem启动一个Tor进程,该进程公开了127.0.0.1:port,然后在selenium脚本上使用它作为代理(SOCKS)。
我在Windows上使用Python3.4.2、Stem1.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_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',
)然后,我尝试了两种方法来创建连接或身份验证。第一个是使用with和stem.control.controller。第二层是较低层次的stem.socket和stem.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为代理的火狐127.0.0.1:9000实例时(也尝试过使用127.0.0.1:9051,因为我并不真正知道socksPort和controlPort之间的区别),这是行不通的。
发布于 2015-04-29 23:20:14
Stem不能创建tor进程,它只是一个库,用于通过控制端口连接到现有的tor服务器进行检查/控制。
要创建tor进程本身,您需要让系统用upstart/launchctl/etc启动它。或者,如果安装了命令行并在前台运行,您只需从命令行键入tor即可。
这样,就需要编辑torrc以启用ControlPort,并且b.设置一个身份验证方法(存储在torrc中的cookieauth或散列密码)。默认的tor SocksPort为9050,ControlPort为9051。
SocksPort是您路由您的流量(即火狐)的一个,ControlPort是您连接的源头。请注意,只有当您甚至需要茎时,因为看起来您只是试图用它来启动tor实例(这是不可行的),如果您让它在您的系统香草上运行,它将在配置好的selenium/firefox上工作(默认端口是9050而不是9000)。
https://stackoverflow.com/questions/28651889
复制相似问题