Python Selenium binding with TOR browser
Asked Answered
S

10

14

I researched on it but I get that solution:

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')

It gives that error:

Can't load the profile. Profile Dir: C:\Users\HPPAV1~1\AppData\Local\Temp\tmppcuwx3xd Firefox output: None

When I try that solution.

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

It gives me the following error:

Traceback (most recent call last): File "C:/Python34/torfirstscript.py", line 10, in browser=webdriver.Firefox( binary, profile) File "C:\Python34\lib\site-packages\selenium-2.43.0-py3.4.egg\selenium\webdriver\firefox\webdriver.py", line 46, in init self.NATIVE_EVENTS_ALLOWED and self.profile.native_events_enabled) AttributeError: 'FirefoxBinary' object has no attribute 'native_events_enabled'

By applying

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

I got this error:

Traceback (most recent call last): File "C:\Python34\torfirstscript.py", line 9, in browser=webdriver.Firefox( firefox_binary = binary, firefox_profile = >profile) File "C:\Python34\lib\site-packages\selenium-2.43.0->py3.4.egg\selenium\webdriver\firefox\webdriver.py", line 59, in init self.binary, timeout), File "C:\Python34\lib\site-packages\selenium-2.43.0->py3.4.egg\selenium\webdriver\firefox\extension_connection.py", line 47, in >init self.binary.launch_browser(self.profile) File "C:\Python34\lib\site-packages\selenium-2.43.0->py3.4.egg\selenium\webdriver\firefox\firefox_binary.py", line 64, in launch_browser self._wait_until_connectable() File "C:\Python34\lib\site-packages\selenium-2.43.0-py3.4.egg\selenium\webdriver\firefox\firefox_binary.py", line 108, in _wait_until_connectable self.profile.path, self._get_firefox_output())) selenium.common.exceptions.WebDriverException: Message: "Can't load the profile. Profile Dir: >C:\Users\HPPAV1~1\AppData\Local\Temp\tmpig7zvx_0\webdriver-py-profilecopy Firefox output: None"

with that image as output.

enter image description here

Scenic answered 16/12, 2015 at 16:13 Comment(0)
A
8

A working example with Selenium and Tor on 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:\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()
Addison answered 26/3, 2016 at 16:25 Comment(3)
This doesn't work for me on windows. The tor browser opens, and after a while, I get selenium.common.exceptions.WebDriverExceptionChaffin
When I run this on Windows, the profile assignment causes DeprecationWarning: firefox_profile has been deprecated, please use an Options objectLeatrice
@AlSweigart, have you any solution for this?Wildermuth
E
3

I tried something like this, and worked:

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)

Open the Tor browser while you are doing this

Este answered 3/8, 2017 at 16:47 Comment(0)
W
3

Another simple solution is: Create a new profile in Firefox or Chrome, configure your browser to use Tor proxy (Set a SOCKS 5 proxy to address 127.0.0.1 port 9150), and then load that profile when you use webdriver.

Workaday answered 24/6, 2020 at 18:41 Comment(0)
H
2

Code for latest TOR installation on 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")
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")
Hidden answered 6/4, 2016 at 19:25 Comment(0)
C
1

This is what worked for me, this doesn't use the tor browser but geckodriver

pip install selenium webdriver-manager

import asyncio
import os
import subprocess

from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager

profile_path = os.path.expandvars(
    r"%USERPROFILE%\Desktop\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default"
)
options = Options()
options.set_preference("profile", profile_path)
service = Service(
    # os.path.expandvars(r"%USERPROFILE%\Desktop\Tor Browser\Browser\firefox.exe"),
    executable_path=GeckoDriverManager().install()
)

options.set_preference("network.proxy.type", 1)
options.set_preference("network.proxy.socks", "127.0.0.1")
options.set_preference("network.proxy.socks_port", 9050)
options.set_preference("network.proxy.socks_remote_dns", False)


async def main():
    async def cleanup():
        driver.quit()
        print(torexe.pid)
        torexe.kill()

    try:
        # https://mcmap.net/q/66889/-open-tor-browser-with-selenium
        torexe = subprocess.Popen(
            os.path.expandvars(
                r"%USERPROFILE%\Desktop\Tor Browser\Browser\TorBrowser\Tor\tor.exe"
            )
        )
        driver = Firefox(service=service, options=options)
        driver.get("https://check.torproject.org")
        driver.save_screenshot("screenshot.png")
    except Exception as e:
        print(e, type(e))
    finally:
        await cleanup()


if __name__ == "__main__":
    asyncio.run(main())
Chaffin answered 1/11, 2021 at 13:12 Comment(0)
S
0

Update selenium using:

pip install -U selenium

Then run your code, after starting TOR of course. This error was acknowledged and repaired.

Samons answered 26/3, 2016 at 10:10 Comment(3)
The first code is not a correct one, profile and binary should be swapped.Winton
Yes you are right, I am sorry I didnt take a closer look at it.Samons
you don't need to run with sudo on Linux!Loughlin
R
0

I solved my similar problem on 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")
Rewire answered 22/3, 2017 at 9:43 Comment(0)
E
0

As some of these methods do not work in the current Windows versions, returning a "tor failed to start" error would inform users that, in order to start the proxy, they will need tor already running before executing your script.

Everara answered 20/11, 2019 at 19:5 Comment(0)
C
0

This is working as of 05-12-2020. You need to be running tor browser before running this script. This will run Tor in Chrome. Will do that only in incognito mode. If you remove that option it will connect through your isp.

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()
Calamitous answered 5/12, 2020 at 5:47 Comment(0)
K
0
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium import webdriver

caps = DesiredCapabilities.FIREFOX
caps['proxy'] = {
    'proxyType': 'MANUAL',
    'socksProxy': '127.0.0.1:9050',
    'socksVersion': 5
}

driver = webdriver.Firefox(executable_path=r"C:\webdrivers\geckodriver.exe", capabilities=caps)

In my case this code is the only one that works.

Knowlton answered 8/9, 2021 at 17:49 Comment(1)
Please provide additional details in your answer. As it's currently written, it's hard to understand your solution.Fordham

© 2022 - 2024 — McMap. All rights reserved.