Selenium WebDriver + Tor 作为 Stem 的代理?

2024-02-20

我需要确认是否可以使用 Stem 启动公开 127.0.0.1:port 的 Tor 进程,然后在 selenium 脚本上使用它作为代理 (SOCKS)。

我正在使用 Python 3.4.2 、 Stem 1.3.0 和 Tor (tor-win32-tor-0.2.5.10 Expert 捆绑)在 Windows 上。

这段代码适用于标准 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 进程,并且它被创建了。但我真的不知道它是否正常工作。我没有收到错误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 and stem.control.controller。第二个处于较低水平stem.socket and 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
'''

两者都运行没有错误......但是当我使用代码调用 Firefox WebDriver 实例时127.0.0.1:9000作为代理(也尝试过127.0.0.1:9051,因为我真的不知道之间的区别socksPort and 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)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium WebDriver + Tor 作为 Stem 的代理? 的相关文章

随机推荐

  • Android 图标下方的文本(按钮)

    我正在尝试创建一个主入口界面 我将创建六个按钮 每个按钮将打开另一个活动 对于每个按钮 我希望它有一个大图标 按钮下方有文字 目前 我可以在按钮上显示图像 但我不知道如何使文本显示在按钮下方 我尝试将文本直接放在图像上 但看起来不太好 这是
  • AngularJS : $pristine 用于 ng-check 检查输入

    我有一个包含大约 100 个问题的表单 每个问题都有一个单选按钮和一些复选框 因此我需要用户能够保存该表单并稍后加载 我还需要检查用户在本次会话中更改了哪些内容 这个问题解决了这个问题 如何表示 AngularJS 中哪些输入字段已更改 h
  • 如何将图像从aws s3下载到imageview中?

    所以我希望能够从我的 s3 存储桶中获取图像并 使用 glide 或 picasso 将该图像加载到 imageview 中 我不想将该图像下载到我的手机中 目前我有这个 downloadButton Button findViewById
  • 程序如何执行?操作系统在哪里发挥作用?

    程序从某种语言编译为 ASM gt 机器代码 直接可执行 当人们说这是平台相关时 意味着形成的二进制文件只能在具有相同指令集架构 如 x86 x86 64 的 CPU 上运行 正确 由于 ISA 的差异 它可能 错误地 可能 根本 不在其他
  • Matlab套接字等待响应

    我正在尝试在 matlab 中运行以下客户端和服务器套接字示例代码 http www mathworks com help instrument using tcpip server sockets html http www mathwo
  • 模板化的operator()重载C++

    有人已经问过这个问题 但该线程最终以原始问题没有得到回答 假设你有这个 template
  • Dart Isolates 的暂停功能未按预期工作

    我一直在玩飞镖分离物 https api dartlang org stable 1 24 3 dart isolate Isolate class html并在使用时遇到了问题isolate pause 功能 import dart io
  • 在 Web 应用程序中的何处存储数据库凭据?

    我想知道您使用什么技术来存储应用程序的数据库凭据 我特别关心 java webapps 但我认为没有必要将问题限制于此 需要考虑的事情 您是否使用属性文件 xml 配置文件或其他文件 它是捆绑到您的应用程序中 即在 jar 文件中 还是单独
  • com.google.android.gms.maps.MapFragment:无法解析符号“地图”

    我已遵循此处的所有指示 没有任何问题 https developers google com maps documentation android start getting the google maps android api v2 h
  • 我在 Nhibernate Query Over fetch 上做错了什么吗?

    我有这个 using ITransaction transaction session BeginTransaction Task tAlias null CompletedTask cAlias null List
  • 从 D 中的字符串获取普通 char*?

    我正在尝试弄清楚如何从 D 字符串 不可变 char 获取普通的可变 C 字符串 char 以便将字符数据传递给遗留的 C 代码 toStringz 不起作用 因为我收到一条错误 说我 无法将 immutable char 类型的表达式 t
  • 在 Python 中切片字符串时如何使用变量作为索引?

    我一直在尝试使用循环从字符串中切出两个字符 但它不是抓取两个字符 而是只抓取一个 我试过了 input i i 1 and input i i 1 但似乎都不起作用 如何使用变量进行切片 完整的例程 def StringTo2ByteLis
  • 查看netbeans中的执行线

    当我按下运行程序按钮 向右指向的绿色箭头 时 如何查看 netbean v6 8 用于执行我的 java 应用程序的执行行 我正在寻找类似的东西 java cp 构建 类主要 我正在尝试从 15 年使用 vi 编写 c 和 c 转向 jav
  • iPhone iOS 5.0 OpenGl ES 2.0

    说真的 我已经花了几周甚至几个月的时间来寻求有关 iPhone 上使用 XCode 4 2 的 OpenGL 的一些认真帮助 我需要一个很好的教程 介绍如何从使用新的 XCode 4 2 的 OpenGL 游戏 模板开始 然后从那里开始进展
  • Chrome 不支持 css @page?

    我有用于打印的CSS 就像这样简单 page top left content TOP SECRET color red bottom center content counter page font style italic 但Chrom
  • 如何使用 Riverpod 在 Flutter 中刷新 FutureProvider 而无需再次显示加载指示器?

    目前我正在刷新一个 FutureProvider 它负责从 Firebase 获取数据并将其显示在一个简单的 ListView 中液体拉动刷新 https pub dev packages liquid pull to refresh包 这
  • JavaScript:那个与这个

    我试图更好地理解 JavaScript 中 that 和 this 的用法 我在这里关注 Douglas Crockford 的教程 http javascript crockford com private html http javas
  • 按行拆分数据框并另存为 csv

    我只有一个数据框 想要按行分割数据框 将几个新数据框分配给新变量并将它们保存为 csv 文件 a lt rep 1 5 each 3 b lt rep 1 3 each 5 c lt data frame a b a b 1 1 1 2 1
  • 将 zip 文件解压到本地文件夹

    我有带有 Express 的节点应用程序 我从邮递员等客户端发送请求 我需要从req并将其解压到我的本地文件夹中 我该怎么做 我找到了以下开源但不知道如何获取req body并将其提取到我的本地文件夹中 例如 C Test extractD
  • Selenium WebDriver + Tor 作为 Stem 的代理?

    我需要确认是否可以使用 Stem 启动公开 127 0 0 1 port 的 Tor 进程 然后在 selenium 脚本上使用它作为代理 SOCKS 我正在使用 Python 3 4 2 Stem 1 3 0 和 Tor tor win3