How to initiate a Tor Browser 9.5 which uses the default Firefox to 68.9.0esr using GeckoDriver and Selenium through Python How to initiate a Tor Browser 9.5 which uses the default Firefox to 68.9.0esr using GeckoDriver and Selenium through Python selenium selenium

How to initiate a Tor Browser 9.5 which uses the default Firefox to 68.9.0esr using GeckoDriver and Selenium through Python


I managed to resolve this by updating to v9.5.1 and implementing the following changes:

Note that although the code is in C# the same changes to the Tor browser and how it is launched should be applied.

FirefoxProfile profile = new FirefoxProfile(profilePath);profile.SetPreference("network.proxy.type", 1);profile.SetPreference("network.proxy.socks", "127.0.0.1");profile.SetPreference("network.proxy.socks_port", 9153);profile.SetPreference("network.proxy.socks_remote_dns", false);FirefoxDriverService firefoxDriverService = FirefoxDriverService.CreateDefaultService(geckoDriverDirectory);firefoxDriverService.FirefoxBinaryPath = torPath;firefoxDriverService.BrowserCommunicationPort = 2828;var firefoxOptions = new FirefoxOptions{    Profile = null,    LogLevel = FirefoxDriverLogLevel.Trace};firefoxOptions.AddArguments("-profile", profilePath);FirefoxDriver driver = new FirefoxDriver(firefoxDriverService, firefoxOptions);driver.Navigate().GoToUrl("https://www.google.com");

Important notes:

The following TOR configs need to be changed in about:config :

  • marionette.enabled: true

  • marionette.port: set to an unused port, and set this value to firefoxDriverService.BrowserCommunicationPort in your code. This was set to 2828 in my example.


note:
I am not sure whether this really is the definite answer (thus, I'd really appreciate feedback)

solution:
I've managed to send a get request to the check tor page (https://check.torproject.org/) and it displayed an unknown IP to me (additionally, IPs differ if you repeat the request after a time)

Essentially, I've set up the chrome driver to run TOR. Here's the code:

from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionstor_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('--proxy-server=socks5://%s' % tor_proxy)driver = webdriver.Chrome(options=chrome_options)driver.get('https://check.torproject.org/')

Because the driver is not in headless mode you can inspect the resulting page yourself. It should read:
"Congratulations. This browser is configured to use Tor. [IP Info]. However, it does not appear to be Tor Browser. Click here to go to the download page"

Make sure that the chromedriver.exe file is linked on the path or provide the path to the file as an argument to the driver.Chrome() function.

Edit: make sure TOR browser is running in the background, thanks @Abhishek Rai for pointing that out