Jef*_*opo 5 python proxy selenium tor
我需要确认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')
Run Code Online (Sandbox Code Playgroud)
但我无法让它与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',
)
Run Code Online (Sandbox Code Playgroud)
然后我尝试了两种方法来创建连接或进行身份验证.第一个是使用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)
'''
Run Code Online (Sandbox Code Playgroud)
第二个:
# 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
'''
Run Code Online (Sandbox Code Playgroud)
而如果没有错误都跑......但是当我使用的代码来调用与火狐的webdriver实例127.0.0.1:9000作为代理(也试过用127.0.0.1:9051,因为我真的不知道之间的区别socksPort和controlPort)它不工作.
Stem 无法创建 Tor 进程,它只是一个用于连接到现有 Tor 服务器以通过控制端口进行检查/控制的库。
要创建 tor 进程本身,您需要让系统使用 upstart/launchctl/etc 启动它。或者,tor如果已安装,您可以从命令行键入,并且它将在前台运行。
这样,要使用stem,您需要将torrc编辑为a。启用控制端口,并且 b.设置身份验证方法(cookieauth 或存储在 torrc 中的散列密码)。默认的 SocksPort 是 9050,ControlPort 是 9051。
SocksPort 是您路由流量(即 firefox)的端口,ControlPort 是您连接的端口。请注意,只有当您需要Stem时,因为您似乎正在尝试用它启动一个Tor实例(这是不可能的),如果您让它在您的系统上运行,它将与selenium/firefox 正如你所配置的那样(默认端口是 9050 而不是 9000)
| 归档时间: |
|
| 查看次数: |
1899 次 |
| 最近记录: |