Est-il possible de faire utiliser Selenium à l'aide du navigateur TOR? Quelqu'un a-t-il un code à copier-coller?
N'utilisez pas le TBB, définissez simplement les paramètres de proxy appropriés 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 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 en sorte que Selenium utilise le navigateur TOR.
J'ai pu le faire à la fois sur Ubuntu et Mac OS X.
Deux choses doivent arriver:
Définissez le chemin binaire vers le binaire firefox que Tor utilise. Sur un Mac, ce chemin serait généralement /Applications/TorBrowser.app/Contents/MacOS/firefox
. Sur ma machine Ubuntu, il s'agit de /usr/bin/tor-browser/Browser/firefox
.
Le navigateur Tor utilise un hôte SOCKS à l'adresse 127.0.0.1:9150 via l'installation de Vidalia ou de Tor. Lancez Tor une fois à partir du Finder et laissez-le ouvert pour que Vidalia soit exécuté. Les instances lancées avec Selenium utiliseront également l’hôte SOCKS que Vidalia démarre.
Voici le code pour accomplir ces deux choses. Je lance ceci 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 __== "__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 exécuter le navigateur Tor via Selenium. Cette machine a été exécutée sur le port 9051 et par un proxy http privé qui utilise tor sur le port 8118. Pour que le navigateur Tor puisse passer la page de vérification de tor, je devais définir le proxy http sur 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 __== "__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()
Utilisation de Python 3.5.1 sur Windows 10
J'ai examiné la situation et, sauf erreur de ma part, impossible, à première vue.
La raison pour laquelle cela ne peut pas être fait est parce que:
C'est probablement pour que personne en dehors du navigateur Tor, que ce soit sur votre ordinateur ou sur Internet, ne connaisse votre navigation.
Vos alternatives sont:
Je suggère le premier.
Pour une alternative plus récente à Selenium, qui ne contrôle que Firefox, jetez un oeil à Marionette . Pour utiliser 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 tutorial .
Le projet Tor a un test au sélénium pour son navigateur. Cela fonctionne comme:
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, cela utilise les variables d'environnement TBB_BIN
et TBB_PROFILE
pour l'ensemble de navigateurs et le profil. Vous pourrez peut-être les coder en dur dans votre code.
Beaucoup de réponses vont dans la bonne direction, mais c’est exactement ce qui a fonctionné pour moi:
Sur Ubuntu:
Vous devez installer Tor en utilisant la commande apt ou une autre méthode, mais pas la version binaire.
Guide d'installation:
https://linuxconfig.org/how-to-install-tor-browser-in-ubuntu-18-04-bionic-beaver-linux
Dans le sample.py, vous devrez peut-être:
torrc
qui se trouve la plupart du temps dans /etc/tor/
.Vous avez également besoin du pilote geckodriver pour automatiser Firefox avec Selenium:
chmod +x geckodriver
export PATH=$PATH:/path-to-extracted-file/geckodriver
Faites attention aux:
Sudo lsof -i -P -n | grep LISTEN
le port LISTEN du réseau tor doit être identique dans le scriptMerci user2426679 https://stackoverflow.com/a/21836296/3816638 pour les paramètres.
from Selenium import webdriver
from Selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from Selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from Selenium.webdriver.common.proxy import Proxy, ProxyType
from Selenium.webdriver.firefox.options import Options
import subprocess
import os
profileTor = '/etc/tor/' # torrc
binary = os.path.expanduser("~/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/firefox")
firefox_binary = FirefoxBinary(binary)
firefox_profile = FirefoxProfile(profileTor)
#set some privacy settings
firefox_profile.set_preference( "places.history.enabled", False )
firefox_profile.set_preference( "privacy.clearOnShutdown.offlineApps", True )
firefox_profile.set_preference( "privacy.clearOnShutdown.passwords", True )
firefox_profile.set_preference( "privacy.clearOnShutdown.siteSettings", True )
firefox_profile.set_preference( "privacy.sanitize.sanitizeOnShutdown", True )
firefox_profile.set_preference( "signon.rememberSignons", False )
firefox_profile.set_preference( "network.cookie.lifetimePolicy", 2 )
firefox_profile.set_preference( "network.dns.disablePrefetch", True )
firefox_profile.set_preference( "network.http.sendRefererHeader", 0 )
#set socks proxy
firefox_profile.set_preference( "network.proxy.type", 1 )
firefox_profile.set_preference( "network.proxy.socks_version", 5 )
firefox_profile.set_preference( "network.proxy.socks", '127.0.0.1' )
firefox_profile.set_preference( "network.proxy.socks_port", 9150 )
firefox_profile.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.
firefox_profile.set_preference( "javascript.enabled", False )
#get a huge speed increase by not downloading images
firefox_profile.set_preference( "permissions.default.image", 2 )
options = Options()
options.set_headless(headless=False)
driver = webdriver.Firefox(firefox_profile=firefox_profile,firefox_options=options)
print(driver)
driver.get("https://check.torproject.org/")
driver.save_screenshot("screenshot.png")
À 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
Pour confirmer que vous utilisez Tor, utilisez https://check.torproject.org/