Python Selenium与TOR浏览器绑定

时间:2015-12-16 16:13:23

标签: python selenium selenium-webdriver 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)
driver = webdriver.Firefox(profile)
driver.get('http://estoeslapollaconcebol.la')

它给出了错误:

  

无法加载个人资料。简介目录:   C:\ Users \ HPPAV1~1 \ AppData \ Local \ Temp \ tmppcuwx3xd Firefox输出:   无

当我尝试这个解决方案时。

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
profile=webdriver.FirefoxProfile('C:\\Users\\HP PAV 15\\Desktop\\Tor     Browser\\Browser\\TorBrowser\\Data\\Browser\\profile.default\\')
binary =FirefoxBinary('C:\\Users\\HP PAV 15\\Desktop\\Tor Browser\\Browser\\firefox')
#browser = binary.launch_browser(profile)
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)
browser=webdriver.Firefox( binary, profile)
browser.get("http://yahoo.com")
browser.save_screenshot("/Users/admin/Pictures/screenshot.png")
browser.close()

它给了我以下错误:

  

Traceback(最近一次调用最后一次):文件   “C:/Python34/torfirstscript.py”,第10行,in       browser = webdriver.Firefox(binary,profile)文件“C:\ Python34 \ lib \ site-packages \ selenium-2.43.0-py3.4.egg \ selenium \ webdriver \ firefox \ webdriver.py”,   第46行,在 init 中       self.NATIVE_EVENTS_ALLOWED和self.profile.native_events_enabled)AttributeError:'FirefoxBinary'对象没有属性   'native_events_enabled'

通过申请

browser=webdriver.Firefox( firefox_binary = binary, firefox_profile = profile)

我收到了这个错误:

  

追踪(最近一次通话):    文件“C:\ Python34 \ torfirstscript.py”,第9行,in      browser = webdriver.Firefox(firefox_binary = binary,firefox_profile => profile)    文件“C:\ Python34 \ lib \ site-packages \ selenium-2.43.0-> py3.4.egg \ selenium \ webdriver \ firefox \ webdriver.py”,第59行, init      self.binary,timeout),    文件“C:\ Python34 \ lib \ site-packages \ selenium-2.43.0-> py3.4.egg \ selenium \ webdriver \ firefox \ extension_connection.py”,第47行,> init      self.binary.launch_browser(self.profile)    在launch_browser中输入文件“C:\ Python34 \ lib \ site-packages \ selenium-2.43.0-> py3.4.egg \ selenium \ webdriver \ firefox \ firefox_binary.py”,第64行       self._wait_until_connectable()    文件“C:\ Python34 \ lib \ site-packages \ selenium-2.43.0-py3.4.egg \ selenium \ webdriver \ firefox \ firefox_binary.py”,第108行,在_wait_until_connectable中       self.profile.path,self._get_firefox_output()))   selenium.common.exceptions.WebDriverException:消息:“无法加载配置文件。配置文件目录:> C:\ Users \ HPPAV1~1 \ AppData \ Local \ Temp \ tmpig7zvx_0 \ webdriver-py-profilecopy Firefox输出:无”

将该图像作为输出。

enter image description here

9 个答案:

答案 0 :(得分:4)

在Windows上使用Selenium和Tor的工作示例:

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

binary = FirefoxBinary(r"C:\Program Files (x86)\TorBrowser\Browser\firefox.exe")
profile = FirefoxProfile(r"C:\Program Files (x86)\TorBrowser\Browser\TorBrowser\Data\Browser\profile.default")

driver = webdriver.Firefox(profile, binary)
driver.get("http://stackoverflow.com")
driver.save_screenshot("screenshot.png")
driver.quit()

答案 1 :(得分:1)

使用以下方式更新selenium:

pip install -U selenium

然后在启动TOR之后运行您的代码。 此错误已得到确认和修复。

P:不要忘记' Sudo'如果你在Linux上。

答案 2 :(得分:1)

另一个简单的解决方案是: 在Firefox或Chrome中创建新的配置文件, 配置浏览器以使用Tor代理(将SOCKS 5代理设置为地址127.0.0.1端口9150),然后在使用webdriver时加载该配置文件。

答案 3 :(得分:0)

您正在将FirefoxBinary实例作为第一个位置参数传递给Firefox构造函数,但是,根据definitionFirefox期望FirefoxProfile实例作为第一个位置论证。

相反,只需使用关键字参数:

browser = webdriver.Firefox(firefox_binary=binary, firefox_profile=profile)

这给可读性带来了很小的好处。

答案 4 :(得分:0)

Windows上最新TOR安装的代​​码:

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

binary = FirefoxBinary(r"C:\Users\<Windows User>\Desktop\Tor Browser\Browser\firefox.exe")
profile = FirefoxProfile(r"C:\Users\<Windows User>\Desktop\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default")

driver = webdriver.Firefox(profile, binary)
driver.get("http://stackoverflow.com")

答案 5 :(得分:0)

我在Windows上解决了类似的问题:

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

binary = FirefoxBinary(r"C:\Users\<Windows User>\Desktop\Tor Browser\Browser\firefox.exe")

driver = webdriver.Firefox(firefox_binary=binary)
driver.profile.set_preference('network.proxy.type', 1)
driver.profile.set_preference('network.proxy.socks', '127.0.0.1')
driver.profile.set_preference('network.proxy.socks_port', 9051)

driver.get("http://stackoverflow.com")

答案 6 :(得分:0)

我试过这样的事情并且工作了:

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(profile)

执行此操作时打开Tor浏览器

答案 7 :(得分:0)

由于其中某些方法在当前Windows版本中不起作用,因此返回“启动失败”错误将通知用户,为了启动代理,在执行脚本之前,他们将需要已经运行。 / p>

答案 8 :(得分:0)

截至2020年5月12日。在运行此脚本之前,您需要运行浏览器。这将在Chrome中运行Tor。

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


tor_proxy = "127.0.0.1:9150"

chrome_options = Options()

'''chrome_options.add_argument("--test-type")'''
chrome_options.add_argument('--ignore-certificate-errors')
'''chrome_options.add_argument('--disable-extensions')'''
chrome_options.add_argument('disable-infobars')
'''chrome_options.add_argument("--incognito")'''
chrome_options.add_argument('--user-data=C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\User Data\\Default')
chrome_options.add_argument('--proxy-server=socks5://%s' % tor_proxy)
driver = webdriver.Chrome(executable_path='C:\\chromedriver.exe', options=chrome_options)
driver.get('https://www.google.com')
time.sleep(4)
driver.switch_to.frame(0)
driver.find_element_by_id("introAgreeButton").click()