web-dev-qa-db-fra.com

Ouvrir le navigateur avec sélénium

Est-il possible de faire utiliser Selenium à l'aide du navigateur TOR? Quelqu'un a-t-il un code à copier-coller?

24
user1907403

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
11
user2426679

// 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()
5
Chirag Shetty

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:

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

  2. 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))
5
DMfll
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

2
Will D.

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:

  • Le navigateur Tor est basé sur le code Firefox.
  • Le navigateur Tor utilise des correctifs spécifiques au code Firefox pour empêcher les applications externes de communiquer avec le navigateur Tor (notamment en bloquant la bibliothèque Components.Interfaces). 
  • Le Selenium Firefox WebDriver communique avec le navigateur par le biais de bibliothèques Javascript bloquées, comme mentionné ci-dessus, par le navigateur Tor.

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:

  • Utilisez un proxy Tor via Firefox au lieu du navigateur Tor (voir le lien dans les commentaires de la question).
  • Reconstruisez le code source de Firefox avec les correctifs du navigateur Tor, en excluant ceux qui empêchent la communication externe avec le navigateur Tor.

Je suggère le premier.

0
Willem van Ketwich

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 .


Réponse plus ancienne

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.

0
serv-inc

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:

  • définissez le profil de Firefox sur torrc qui se trouve la plupart du temps dans /etc/tor/.
  • définissez le binaire sur le binaire Firefox de Tor, puisque Tor n'est qu'une série de configurations construites au sommet de Firefox.

Vous avez également besoin du pilote geckodriver pour automatiser Firefox avec Selenium:

Faites attention aux:

  • "network.proxy.socks_port" = 9150
  • À l'intérieur de torrc ControlPort 9050, CookieAuthentication 1
  • Ouvrez TorBrowser
  • Sudo lsof -i -P -n | grep LISTEN le port LISTEN du réseau tor doit être identique dans le script
  • Exécutez le script python alors que TorBrowser est ouvert

Merci 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")
0
user3816638

À 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/

0
rdsoze