How to connect to Tor browser using Python How to connect to Tor browser using Python selenium selenium

How to connect to Tor browser using Python


To connect to a Tor Browser through a FirefoxProfile you can use the following solution:

  • Code Block:

    from selenium import webdriverfrom selenium.webdriver.firefox.firefox_profile import FirefoxProfileimport ostorexe = os.popen(r'C:\Users\AtechM_03\Desktop\Tor Browser\Browser\TorBrowser\Tor\tor.exe')profile = FirefoxProfile(r'C:\Users\AtechM_03\Desktop\Tor Browser\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'C:\Utility\BrowserDrivers\geckodriver.exe')driver.get("http://check.torproject.org")
  • Browser Snapshot:

Tor_Python


You can find a relevant discussion in How to use Tor with Chrome browser through Selenium


I would like to expand on @DebanjanB answer by adding the Linux counterpart:

from selenium import webdriverfrom selenium.webdriver.firefox.firefox_profile import FirefoxProfileimport ostorexe = os.popen('some/path/tor-browser_en-US/Browser/start-tor-browser') # in my case, I installed it under a folder tor-browser_en-US after# downloading and extracting it from # https://www.torproject.org/download/ for linuxprofile = FirefoxProfile(    'some/path/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()firefox_options = webdriver.FirefoxOptions()firefox_options.binary_location = '/usr/bin/firefox' # /usr/bin/firefox is default location of firefox - for me anywaydriver = webdriver.Firefox(    firefox_profile=profile, options=firefox_options,     executable_path='wherever/you/installed/geckodriver') # I keep my geckodriver(s) in a special folder sorted by versions.# Geckodriver downloadable here: # https://github.com/mozilla/geckodriver/releases/driver.get("http://check.torproject.org")


The verified answer does not work in case of opening dot onion sites(I believe that's something to do with tor network which is not allowing access to normal firefox).

As for the latest tor browser (from the tor browser bundle), starting it using selenium causes some error due to which the browser cannot start tor proxy itself causing proxy and timeout errors(doesn't matter if tor proxy is started by python or manually or not started at all). This could also be due to port 9050 or 9150 being used by tor proxy and not being available to browser's tor instance but this does not explain the error caused when no instance of tor proxy is running.

The solution i have found is to start the tor proxy as normal, manually or using os.popen("tor.exe") and configure tor browser to not start tor proxy.here's the code:

from selenium import webdriverfrom selenium.webdriver.firefox.firefox_profile import FirefoxProfilefrom selenium.webdriver.firefox.firefox_binary import FirefoxBinaryos.popen(r'e:\\bla\\bla\\bla\\tor\\Tor\\tor.exe')binary=FirefoxBinary(r'e:\\bla\\bla\\bla\\Tor Browser\\Browser\\firefox.exe')fp=FirefoxProfile(r'e:\\foo\\bar\\bla\\Tor Browser\\Browser\\TorBrowser\\Data\\Browser\\profile.default')fp.set_preference('extensions.torlauncher.start_tor',False)#note thisfp.set_preference('network.proxy.type',1)fp.set_preference('network.proxy.socks', '127.0.0.1')fp.set_preference('network.proxy.socks_port', 9050)fp.set_preference("network.proxy.socks_remote_dns", True)fp.update_preferences()driver = webdriver.Firefox(firefox_profile=fp,firefox_binary=binary)driver.get("http://check.torproject.org")driver.get('https://www.bbcnewsv2vjtpsuy.onion/')

*note fp.set_preference('extensions.torlauncher.start_tor',False) on line 10 is being used to configure tor to not start its own tor instance so that it uses the proxy config and tor instance started above.

lo and behold as the tbb starts working like normal firefox bot browser