portable navegador about python selenium tor

python - navegador - tor browser beta



Abre el navegador tor con selenio (7)

¿Es posible hacer que el selenio use el navegador TOR? ¿Alguien tiene algún código que puedan copiar y pegar?


// solo verifica el número de puerto de tu navegador y lo modificas en el // código

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'', 9150) browser=webdriver.Firefox(profile) browser.get("http://yahoo.com") browser.save_screenshot("screenshot.png") browser.close()


Como una nueva alternativa a Selenium, que solo controla Firefox, echa un vistazo a Marionette . Para usar con el navegador Tor, habilite marioneta al inicio a través de

Browser/firefox -marionette

(dentro del paquete). Entonces, puedes conectarte a través de

from marionette import Marionette client = Marionette(''localhost'', port=2828); client.start_session()

y cargar una nueva página, por ejemplo, a través de

url=''http://mozilla.org'' client.navigate(url);

Para obtener más ejemplos, hay un tutorial .

Respuesta anterior

El proyecto Tor tiene una prueba de selenio para su navegador. Funciona como:

from selenium import webdriver ffbinary = webdriver.firefox.firefox_binary.FirefoxBinary(firefox_path=os.environ[''TBB_BIN'']) ffprofile = webdriver.firefox.firefox_profile.FirefoxProfile(profile_directory=os.environ[''TBB_PROFILE'']) self.driver = webdriver.Firefox(firefox_binary=ffbinary, firefox_profile=ffprofile) self.driver.implicitly_wait(30) self.base_url = "about:tor" self.verificationErrors = [] self.accept_next_alert = True self.driver.get("http://check.torproject.org/") self.assertEqual("Congratulations. This browser is configured to use Tor.", driver.find_element_by_css_selector("h1.on").text)

Como puede ver, usa las variables de entorno TBB_BIN y TBB_PROFILE para el paquete y el perfil del navegador. Es posible que pueda codificarlos en su código.


Investigué esto y, a menos que me equivoque, no es posible.

La razón por la que esto no se puede hacer es porque:

  • Tor Browser se basa en el código de Firefox.
  • El navegador Tor tiene parches específicos para el código de Firefox para evitar que las aplicaciones externas se comuniquen con el navegador Tor (incluido el bloqueo de la biblioteca Components.Interfaces).
  • El Selenium Firefox WebDriver se comunica con el navegador a través de bibliotecas de Javascript que, como se mencionó anteriormente, están bloqueadas por Tor Browser.

Es de suponer que nadie fuera del navegador Tor ya sea en su caja o en Internet conoce su navegación.

Sus alternativas son:

  • Utilice un proxy Tor a través de Firefox en lugar del navegador Tor (vea el enlace en los comentarios de la pregunta).
  • Reconstruye el código fuente de Firefox con los parches del navegador Tor, excluyendo los que impiden la comunicación externa con el navegador Tor.

Sugiero el primero.


No use TBB, simplemente configure los ajustes de proxy correctos en el navegador que esté usando. En FF por ejemplo, así:

#set some privacy settings ff_prof.set_preference( "places.history.enabled", False ) ff_prof.set_preference( "privacy.clearOnShutdown.offlineApps", True ) ff_prof.set_preference( "privacy.clearOnShutdown.passwords", True ) ff_prof.set_preference( "privacy.clearOnShutdown.siteSettings", True ) ff_prof.set_preference( "privacy.sanitize.sanitizeOnShutdown", True ) ff_prof.set_preference( "signon.rememberSignons", False ) ff_prof.set_preference( "network.cookie.lifetimePolicy", 2 ) ff_prof.set_preference( "network.dns.disablePrefetch", True ) ff_prof.set_preference( "network.http.sendRefererHeader", 0 ) #set socks proxy ff_prof.set_preference( "network.proxy.type", 1 ) ff_prof.set_preference( "network.proxy.socks_version", 5 ) ff_prof.set_preference( "network.proxy.socks", ''127.0.0.1'' ) ff_prof.set_preference( "network.proxy.socks_port", 9050 ) ff_prof.set_preference( "network.proxy.socks_remote_dns", True ) #if you''re really hardcore about your security #js can be used to reveal your true i.p. ff_prof.set_preference( "javascript.enabled", False ) #get a huge speed increase by not downloading images ff_prof.set_preference( "permissions.default.image", 2 ) ## # programmatically start tor (in windows environment) ## tor_path = "C://this//is//the//location//of//" #tor.exe torrc_path = "C://you//need//to//create//this//file//torrc" DETACHED_PROCESS = 0x00000008 #calling as a detached_process means the program will not die with your python program - you will need to manually kill it ## # somebody please let me know if there''s a way to make this a child process that automatically dies (in windows) ## tor_process = subprocess.Popen( ''"'' + tor_path+''tor.exe" --nt-service "-f" "'' + torrc_path + ''"'', creationflags=DETACHED_PROCESS ) #attach to tor controller ## imports ## # import stem.socket # import stem.connection # import stem.Signal ## tor_controller = stem.socket.ControlPort( port=9051 ) control_password = ''password'' #in your torrc, you need to store the hashed version of ''password'' which you can get with: subprocess.call( ''"'' + tor_path+''tor.exe" --hash-password %s'' %control_password ) stem.connection.authenticate( tor_controller, password=control_password ) #check that everything is good with your tor_process by checking bootstrap status tor_controller.send( ''GETINFO status/bootstrap-phase'' ) response = worker.tor_controller.recv() response = response.content() #I will leave handling of response status to you


Sí, es posible hacer que el selenio use el navegador TOR.

Pude hacerlo tanto en Ubuntu como en Mac OS X.

Dos cosas tienen que suceder:

  1. Establece la ruta binaria al binario de Firefox que usa Tor. En una Mac, esta ruta normalmente sería /Applications/TorBrowser.app/Contents/MacOS/firefox . En mi máquina Ubuntu es /usr/bin/tor-browser/Browser/firefox .

  2. El navegador Tor utiliza un host SOCKS en 127.0.0.1:9150 ya sea a través de la instalación de Vidalia o Tor. Lanza Tor una vez desde Finder y déjalo abierto para que Vidalia se ejecute. Las instancias iniciadas con selenio utilizarán el host SOCKS que también inicia Vidalia.

Aquí está el código para lograr esas dos cosas. Ejecuto esto en Mac OS X Yosemite:

import os from selenium.webdriver.firefox.firefox_binary import FirefoxBinary from selenium import webdriver # path to the firefox binary inside the Tor package binary = ''/Applications/TorBrowser.app/Contents/MacOS/firefox'' if os.path.exists(binary) is False: raise ValueError("The binary path to Tor firefox does not exist.") firefox_binary = FirefoxBinary(binary) browser = None def get_browser(binary=None): global browser # only one instance of a browser opens, remove global for multiple instances if not browser: browser = webdriver.Firefox(firefox_binary=binary) return browser if __name__ == "__main__": browser = get_browser(binary=firefox_binary) urls = ( (''tor browser check'', ''https://check.torproject.org/''), (''ip checker'', ''http://icanhazip.com'') ) for url_name, url in urls: print "getting", url_name, "at", url browser.get(url)

En un sistema Ubuntu, pude ejecutar el navegador Tor a través de selenio. Esta máquina tiene una ejecución en el puerto 9051 y el proxy http de privoxy que usa tor en el puerto 8118. Para que el navegador Tor pase la página de comprobación tor tuve que configurar el proxy http para privoxy.

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary from selenium.webdriver.common.proxy import Proxy, ProxyType from selenium import webdriver browser = None proxy_address = "127.0.0.1:8118" proxy = Proxy({ ''proxyType'': ProxyType.MANUAL, ''httpProxy'': proxy_address, }) tor = ''/usr/bin/tor-browser/Browser/firefox'' firefox_binary = FirefoxBinary(tor) urls = ( (''tor_browser_check'', ''https://check.torproject.org/''), (''icanhazip'', ''http://icanhazip.com''), ) keys, _ = zip(*urls) urls_map = dict(urls) def get_browser(binary=None, proxy=None): global browser if not browser: browser = webdriver.Firefox(firefox_binary=binary, proxy=proxy) return browser if __name__ == "__main__": browser = get_browser(binary=firefox_binary, proxy=proxy) for resource in keys: browser.get(urls_map.get(resource))


Usando ruby,

profile = Selenium::WebDriver::Firefox::Profile.new profile.proxy = Selenium::WebDriver::Proxy.new :socks => ''127.0.0.1:9050'' #port where TOR runs browser = Watir::Browser.new :firefox, :profile => profile

Para confirmar que estás usando Tor, utiliza https://check.torproject.org/


from selenium import webdriver from selenium.webdriver.firefox.firefox_profile import FirefoxProfile from selenium.webdriver.firefox.firefox_binary import FirefoxBinary #path to TOR binary binary = FirefoxBinary(r''.../Tor Browser/Browser/firefox.exe'') #path to TOR profile profile = FirefoxProfile(r''.../Tor Browser/Browser/TorBrowser/Data/Browser/profile.default'') driver = webdriver.Firefox(firefox_profile= profile, firefox_binary= binary) driver.get("http://icanhazip.com") driver.save_screenshot("screenshot.png") driver.quit()

Usando Python 3.5.1 en Windows 10