Search code examples
pythonseleniumtor

selenium python runing firefox with TOR (windows)


I am trying to run python selenium (firefox driver) with tor. I checked this link (Using Selenium WebDriver with Tor) but this is the java implementation. I am relatively new to selenium and I encounter problems in translate the java code to the Python API.

Someone encounter this issue before?


Solution

  • Here is the code that works for me in Python 2.7 (I last updated it on March 12, 2015). As an added bonus, it fills in the username and password field on agora and asks you to fill in captcha that you see then clicks the submit button. You need to create a default firefox profile that has it's proxy set to tor (127.0.0.1:9050) and fill the path to that profile name into the startbrowser function profiler variable:

    from selenium import webdriver 
    from selenium.webdriver.support.ui import Select, WebDriverWait
    from selenium.common.exceptions import NoSuchFrameException
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    username = 'agora username'
    password = 'agora password'
    def go_to_page(br):
        #page_num = page_num - 1
        #start_results = page_num * 100
        #start_results = str(start_results)
        url = 'http://agorahooawayyfoe.onion'
        print '[*] loading url: '+url
        br.get(url)
        #br.get_screenshot_as_file('agora.tiff')
        usernamed = br.find_element_by_name("username")
        usernamed.send_keys(username) # password
        passwordd = br.find_element_by_name("password") # enterCaptcha
        passwordd.send_keys(password)
        captchad = br.find_element_by_name("enterCaptcha")
        capt = raw_input('enter captcha you see on screen: ')
        captchad.send_keys(capt)
        br.implicitly_wait(3)
        br.find_element_by_name("submit").click()
    
    def start_browser():
        profiler = webdriver.FirefoxProfile('/Users/your username/Library/Application Support/Firefox/Profiles/vxh0qxtt.tor')
        br = webdriver.Firefox(firefox_profile=profiler)
        br.implicitly_wait(10)
        return br
    
    def main():
        br = start_browser()
        go_to_page(br)
    
    main()