Ouvrir le navigateur de tor avec selenium
Est-il possible de faire le sélénium utiliser le navigateur TOR? Quelqu'un aurait-il le code qu'ils pouvaient copier-coller?
7 réponses
N'utilisez pas le TBB, définissez simplement les paramètres du proxy dans le navigateur que vous utilisez. En FF par exemple, comme ceci:
#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
/ / il suffit de vérifier le numéro de port de votre navigateur tor et de le modifier en conséquence dans le //code
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()
Oui, il est possible de faire le sélénium utiliser le navigateur TOR.
j'ai été en mesure de le faire sur les deux Ubuntu et Mac OS X.
Deux choses doivent se produire:
définir le chemin binaire vers le binaire firefox utilisé par Tor. Sur un Mac, ce chemin serait typiquement
/Applications/TorBrowser.app/Contents/MacOS/firefox
. Sur ma machine Ubuntu il est/usr/bin/tor-browser/Browser/firefox
.le navigateur Tor utilise un hôte SOCKS à 127.0.0.1: 9150 soit par L'installation de Vidalia ou Tor. Lancement Du Tor une fois dans le Finder et laissez-le ouvert pour que Vidalia puisse courir. Les instances lancées avec selenium utiliseront L'hôte SOCKS que Vidalia démarre aussi.
Voici le code à accomplir ces deux choses. Je l'exécute sur 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)
sur un système Ubuntu j'ai pu lancer le navigateur Tor via selenium. Cette machine dispose de Tor fonctionnant au port 9051 et de proxy http privoxy qui utilise tor au port 8118. Pour que le navigateur Tor pour passer la page de vérification tor que j'ai dû configurer le mandataire http à 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))
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()
utiliser Python 3.5.1 sur Windows 10
à l'Aide de 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
À confirmer que vous utilisez Tor, utilisez https://check.torproject.org/
j'ai regardé ça, et à moins que je ne me trompe, à première vue ce n'est pas possible.
La raison de ce qui ne peut pas être fait, c'est parce que:
- le navigateur Tor est basé sur le code Firefox.
- Tor Browser a des correctifs spécifiques au Code Firefox pour empêcher les applications externes de communiquer avec le navigateur Tor (y compris le blocage des composants.Bibliothèque d'Interfaces).
- le WebDriver de Selenium Firefox communique avec le navigateur par Les bibliothèques Javascript qui sont, comme indiqué ci-dessus, bloquées par le navigateur Tor.
c'est probablement si personne en dehors du navigateur Tor soit sur votre boîte ou sur internet ne sait à propos de votre navigation.
vos alternatives sont:
- utilisez un mandataire Tor via Firefox au lieu du navigateur Tor (voir le lien dans les commentaires de la question).
- recompilez le code source de Firefox avec les patches du navigateur Tor à l'exclusion de ceux qui empêcher la communication externe avec le navigateur Tor.
je suggère le premier.
comme nouvelle alternative au sélénium, qui ne contrôle que Firefox, regardez Marionnette. Pour utiliser avec le navigateur Tor, activez marionette au démarrage via
Browser/firefox -marionette
(à l'intérieur du paquet). Ensuite, vous pouvez vous connecter via
from marionette import Marionette
client = Marionette('localhost', port=2828);
client.start_session()
et charger une nouvelle page par exemple via
url='http://mozilla.org'
client.navigate(url);
Pour plus d'exemples, il y a un tutoriel.
réponse plus ancienne
le projet Tor a un test au sélénium pour son navigateur. Il fonctionne comme ceci:
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)
Comme vous le voyez, il utilise les variables d'environnement TBB_BIN
et TBB_PROFILE
pour le faisceau et le profil du navigateur. Vous pourriez être capable de les coder dans votre code.