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:
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
.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