it-swarm.com.de

Öffnen Sie den Browser mit Selen

Ist es möglich, Selen mit dem TOR-Browser zu veranlassen? Hat jemand Code, den sie kopieren und einfügen könnten?

24
user1907403

Verwenden Sie nicht die TBB, sondern legen Sie in jedem verwendeten Browser die richtigen Proxy-Einstellungen fest. In FF zum Beispiel so:

#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

// Überprüfen Sie einfach die Portnummer Ihres Tor-Browsers und ändern Sie diese entsprechend im // 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

Ja, es ist möglich, dass Selen den TOR-Browser verwendet.

Ich konnte dies auf Ubuntu und Mac OS X tun.

Zwei Dinge müssen passieren:

  1. Stellen Sie den binären Pfad auf die von Tor verwendete Firefox-Binärdatei ein. Auf einem Mac ist dieser Pfad normalerweise /Applications/TorBrowser.app/Contents/MacOS/firefox. Auf meinem Ubuntu-Rechner ist es /usr/bin/tor-browser/Browser/firefox.

  2. Der Tor-Browser verwendet einen SOCKS-Host bei 127.0.0.1:9150, entweder über die Vidalia- oder Tor-Installation. Starte Tor einmal aus dem Finder und lass es offen, damit Vidalia läuft. Die mit Selenium gestarteten Instanzen verwenden den SOCKS-Host, den Vidalia ebenfalls startet.

Hier ist der Code, um diese beiden Dinge zu erreichen. Ich führe dies auf Mac OS X Yosemite aus:

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)

Auf einem Ubuntu-System konnte ich den Tor-Browser über Selenium ausführen. Diese Maschine hat einen Tor-Port an Port 9051 und einen http-Proxy, der einen Tor-Port an Port 8118 verwendet. Damit der Tor-Browser die Tor-Prüfseite bestehen kann, musste ich den http-Proxy auf "privoxy" setzen.

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()

Verwendung von Python 3.5.1 unter Windows 10

2
Will D.

Ich habe mir das angesehen, und wenn ich mich nicht irre, ist es aus Gründen des Nennwerts nicht möglich.

Der Grund dafür kann nicht sein, weil:

  • Tor Browser basiert auf dem Firefox-Code.
  • Tor Browser enthält spezielle Patches für den Firefox-Code, um zu verhindern, dass externe Anwendungen mit dem Tor Browser kommunizieren (einschließlich Blockieren der Components.Interfaces-Bibliothek). 
  • Der Selenium Firefox WebDriver kommuniziert mit dem Browser über Javascript-Bibliotheken, die, wie bereits erwähnt, von Tor Browser blockiert werden.

Dies ist vermutlich so, dass niemand außerhalb des Tor-Browsers, weder auf Ihrer Box noch über das Internet, über Ihr Surfen informiert ist.

Ihre Alternativen sind:

  • Verwenden Sie einen Tor-Proxy über Firefox anstelle des Tor-Browsers (siehe den Link in den Kommentaren der Frage).
  • Erstellen Sie den Firefox-Quellcode mit den Tor Browser-Patches neu, ausgenommen diejenigen, die die externe Kommunikation mit dem Tor Browser verhindern.

Ich schlage den ersteren vor.

0

Als neuere Alternative zu Selenium, das nur Firefox steuert, werfen Sie einen Blick auf Marionette . Um den Tor Browser zu verwenden, aktivieren Sie die Marionette beim Start mit

Browser/firefox -marionette

(innerhalb des Bündels). Dann können Sie sich per verbinden

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

und laden Sie beispielsweise eine neue Seite über

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

Für weitere Beispiele gibt es ein Tutorial .


Ältere Antwort

Das Tor-Projekt verfügt über einen Selen-Test für seinen Browser. Es funktioniert wie:

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)

Wie Sie sehen, verwendet dies die Umgebungsvariablen TBB_BIN und TBB_PROFILE für das Browser-Bundle und das Profil. Möglicherweise können Sie diese in Ihrem Code fest codieren.

0
serv-inc

Viele Antworten gehen in die richtige Richtung, aber genau das hat bei mir funktioniert:

Unter Ubuntu:

Sie müssen Tor mit dem Befehl apt oder einer anderen Methode installieren, nicht jedoch mit der binären Version.

Installationsanleitung:

https://linuxconfig.org/how-to-install-tor-browser-in-ubuntu-18-04-bionic-beaver-linux

In der Datei sample.py müssen Sie möglicherweise Folgendes tun:

  • setzen Sie das Profil des Firefox auf torrc, das sich meistens in /etc/tor/ befindet.
  • setzen Sie die Binärdatei auf die Firefox-Binärdatei von Tor, da Tor nur eine Reihe von auf Firefox aufgebauten Konfigurationen ist.

Sie benötigen den Gecko-Treiber, um Firefox mit Selenium zu automatisieren:

Bezahlen Sie die Aufmerksamkeit auf:

  • "network.proxy.socks_port" = 9150
  • In Torrc ControlPort 9050, CookieAuthentication 1
  • Öffnen Sie den TorBrowser
  • Sudo lsof -i -P -n | grep LISTEN Der LISTEN-Port des Tor-Netzwerks muss im Skript identisch sein
  • Führen Sie das Python-Skript aus, während TorBrowser geöffnet ist.

Vielen Dank an user2426679 https://stackoverflow.com/a/21836296/3816638 für die Einstellungen.

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

Mit 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

Um zu bestätigen, dass Sie Tor verwenden, verwenden Sie https://check.torproject.org/

0
rdsoze