selenium - 由 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 脚本)。
解决方案
我想到了。为了使用 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,而无需通过可恶的验证码测试。
推荐阅读
- python - 在 Python 中更新 CSV 文件
- javascript - 哪种方式最适合 React Native 中的条件渲染?
- python - 尝试在 Windows10 上使用 Python 创建 Virtualenv 时出现 AssertionError
- c++ - C++ 对泛型类成员的未定义引用
- algorithm - 计算给定代码的时间复杂度的问题
- android - Searchview 过滤器不适用于包含已解析 JSON 的列表,但适用于非 JSON 列表
- php - PDO:使用子字符串作为标准来获取行数
- python - 在 EMR 中运行 Jupyter notebook 时没有名为“pyspark”的模块
- python - 使用 Python 将 Excel DATE(不是日期时间)数据插入 SQL Server
- java - Maven发布插件配置及示例