首页 > 解决方案 > 由 Python Selenium 控制的运行 Tor 的最后一个障碍

问题描述

我使用以下代码在 Lubuntu 中运行由 Selenium 控制的 Tor:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

torexe = os.popen(r'/home/sergey/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/firefox')
profile = FirefoxProfile(r"/home/sergey/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Browser/profile.default")
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.socks', '127.0.0.1')
profile.set_preference('network.proxy.socks_port', 9050)
profile.set_preference("network.proxy.socks_remote_dns", False)
profile.update_preferences()
driver = webdriver.Firefox(firefox_profile=profile, executable_path=r'/usr/local/bin/geckodriver')
driver.get("https://www.google.com")
...

它有效,但方式有点奇怪。运行它会打开两个窗口,一个是 Tor 的,另一个是 Firefox 的。Selenium 仅控制 FF 窗口。Tor 窗口只是闲置在那里。

并不是说这会让生活变得难以忍受,正如我所说的每件事都有效,但我只是想知道如何“让它完全正确”(我的意思是在 Tor 的唯一窗口中执行 Selenium 脚本)。

标签: seleniumselenium-webdriverfirefoxtor

解决方案


我想到了。为了使用 Selenium 启动 Tor,请运行以下代码(它仍然启动 Firefox,这次没有任何 Tor 窗口,但它使用 Tor 服务):

from selenium import webdriver
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', 9050)
profile.set_preference("network.proxy.socks_remote_dns", False)
profile.update_preferences()
driver = webdriver.Firefox(profile)

您可能需要添加以下三行来验证 Tor 服务是否为您的 Firefox 实例提供了新 IP:

driver.get("http://icanhazip.com")
current_IP = driver.find_element_by_css_selector("body > pre:nth-child(1)")
print(current_IP.get_attribute("innerHTML"))

这个网站 icanhazip.com 允许人们查看他的外部 IP,而无需通过可恶的验证码测试。


推荐阅读