在 Python 上使用 Selenium 来操作 Tor。由于未知原因不起作用

Posted

技术标签:

【中文标题】在 Python 上使用 Selenium 来操作 Tor。由于未知原因不起作用【英文标题】:Using Selenium on Python to operate Tor. Doesn't work for unknown reasons 【发布时间】:2017-05-01 18:50:39 【问题描述】:

来自这个网站 http://www.thedurkweb.com/automated-anonymous-interactions-with-websites-using-python-and-tor/

我做了以下代码

enter code here

import stem.process
from stem import Signal
from stem.control import Controller
from splinter import Browser

proxyIP = "127.0.0.1"
proxyPort = 9150

proxy_settings = "network.proxy.type": 1,
              "network.proxy.ssl": proxyIP,
              "network.proxy.ssl_port": proxyPort,
              "network.proxy.socks": proxyIP,
              "network.proxy.socks_port": proxyPort,
              "network.proxy.socks_remote_dns": True,
              "network.proxy.ftp": proxyIP,
              "network.proxy.ftp_port": proxyPort
              
browser = Browser('firefox', profile_preferences=proxy_settings)
browser.visit("http://www.icanhazip.com")

没用。只是得到这些错误

Traceback(最近一次调用最后一次): 文件“C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\common\service.py”,第 74 行,开始 标准输出=self.log_file,标准错误=self.log_file) init 中的文件“C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\subprocess.py”,第 947 行 恢复信号,开始新会话) _execute_child 中的文件“C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\subprocess.py”,第 1224 行 启动信息) FileNotFoundError: [WinError 2] 系统找不到指定的文件

在处理上述异常的过程中,又发生了一个异常:

Traceback(最近一次调用最后一次): 文件“C:/Users/User/PycharmProjects/LittleBot/Main.py”,第 15 行,在 browser = Browser('firefox', profile_preferences=proxy_settings) 浏览器中的文件“C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\splinter\browser.py”,第 63 行 返回驱动程序(*args,**kwargs) init 中的文件“C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\splinter\driver\webdriver\firefox.py”,第 48 行 超时=超时) init 中的文件“C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\firefox\webdriver.py”,第 140 行 self.service.start() 文件“C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\common\service.py”,第 81 行,开始 os.path.basename(self.path), self.start_error_message) selenium.common.exceptions.WebDriverException:消息:“geckodriver”可执行文件需要在 PATH 中。

异常被忽略:> 回溯(最近一次通话最后): del 中的文件“C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\common\service.py”,第 173 行 自我停止() 文件“C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\common\service.py”,第 145 行,停止 如果 self.process 为无: AttributeError:“服务”对象没有属性“进程”

进程以退出代码 1 结束

我安装了网页上请求的所有库,甚至做了 --upgrade selenium 的事情,希望能摆脱错误。 有没有办法解决这个问题? 到目前为止,我所知道的是程序运行得很好,直到 'browser = Browser('firefox', profile_preferences=proxy_settings)' 发生。 Tor浏览器也是打开的,所以没有问题。 一直在寻找一个半小时的解决方案,并且我已经尝试了与此主题相关的所有内容。

【问题讨论】:

【参考方案1】:

修好了

pip install selenium==2.53.6

Selenium 想要引入一些壁虎的东西,而这一切都搞砸了。 希望这对其他人有用。

【讨论】:

"some gecko thing" 是 geckodriver,现在 selenium 3.x 需要驱动 Firefox ......类似于你需要 chromedriver 来驱动 Chrome。【参考方案2】:

要在 Firefox 中使用 selenium 3.x,您必须安装 geckodriver。 发布的官方网站在这里:https://github.com/mozilla/geckodriver/releases

来自 selenium python 文档:

“Selenium 需要驱动程序才能与所选浏览器交互。 例如,Firefox 需要 geckodriver,它需要 在可以运行以下示例之前安装。确保它在您的 路径,例如。 g.,将它放在 /usr/bin 或 /usr/local/bin 中。

不遵守这一步会报错 selenium.common.exceptions.WebDriverException:消息:'geckodriver' 可执行文件需要在 PATH 中。”

【讨论】:

这并没有回答问题,只是指出了错误出现的位置,甚至没有到达 Tor。【参考方案3】:

如果您使用的是最新的 selenium 和最新的 Firefox 1.下载最新的geckodriver 2.打开tor浏览器,隐藏。 3.运行代码:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefoc.firefox_profile import FirefoxProfile

binary = FirefoxBinary('C:/Program Files(x86)/Mozilla Firefox/firefox.exe')
profile = webdriver.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', 9150)

driver = webdriver.Firefox(firefox_binary = binary, firefox_profile = profile, executable_path='path/to/geckodriver.exe')
driver.get('https://check.torproject.org')    

【讨论】:

tor 是一个浏览器,他试图用tor 代替firefox,而不是用firefox 浏览到tor 站点。甚至 tho tor 和 firefox 也是从同一个父级构建的

以上是关于在 Python 上使用 Selenium 来操作 Tor。由于未知原因不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Python selenium 滚动条

python + selenium + Js 处理轮动条

webdriver元素操作-键盘(python+selenium)

selenium+python环境搭建

Selenium2+python自动化17-JS处理滚动条

Selenium2+python自动化17-JS处理滚动条