Откройте браузер tor с помощью Selenium

Можно ли заставить селен использовать браузер TOR? Есть ли у кого-нибудь код, который можно скопировать и вставить?


person user1907403    schedule 09.03.2013    source источник
comment
Кажется возможным, см. bolbolkod.wordpress.com/ 07.02.2013 / селен-с-torfirefox-mac   -  person Mihai8    schedule 10.03.2013
comment
Я тоже это видел, но у меня были проблемы с тем, чтобы заставить его работать. Похоже, это была комбинация проблем - Yahoo.com отказывался от прокси-подключений (whatismyipaddress.com нет). Кроме того, порт в меню настроек vidalia отличается от порта в браузере tor. Я скопировал номер порта браузера tor, и он заработал. Извините, если это очевидно - абсолютный новичок!   -  person user1907403    schedule 10.03.2013
comment
Я также думаю, что вам нужно заранее открыть браузер tor - или, по крайней мере, просто vidalia, чтобы у вас было соединение с прокси   -  person user1907403    schedule 10.03.2013
comment
Нет необходимости заставлять его работать ни с Vidalia, ни с браузером Tor: этот код просто работает с вашим обычным Firefox после того, как вы установили и запустили командную строку, как описано. Вероятно, это было причиной, по которой вам понадобился другой номер порта при попытке использовать этот код с Vidalia, поскольку в командной строке Tor используется другой порт.   -  person ali    schedule 08.05.2013


Ответы (9)


Не используйте TBB, просто установите правильные настройки прокси в любом браузере, который вы используете. В FF например так:

#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
person user2426679    schedule 17.02.2014
comment
Тогда какой смысл в Tor? Тогда вы могли бы использовать любой из более быстрых анонимных прокси. Важно использовать весь TBB. - person polkovnikov.ph; 09.04.2017
comment
Спасибо за отрицательный голос! Вы правы в том, что TBB дает дополнительные преимущества безопасности; жаль, что вы пропустили мой комментарий ниже о способе достижения этой цели: stackoverflow.com/questions/15316304/ - person user2426679; 11.05.2017

Да, можно заставить селен использовать браузер TOR.

Я смог сделать это как в Ubuntu, так и в Mac OS X.

Должны произойти две вещи:

  1. Установите двоичный путь к двоичному файлу firefox, который использует Tor. На Mac этот путь обычно /Applications/TorBrowser.app/Contents/MacOS/firefox. На моей машине с Ubuntu это /usr/bin/tor-browser/Browser/firefox.

  2. Браузер Tor использует хост SOCKS по адресу 127.0.0.1:9150 либо через Vidalia, либо через установку Tor. Запустите Tor один раз из Finder и оставьте его открытым, чтобы Vidalia заработала. Экземпляры, запущенные с использованием селена, также будут использовать хост SOCKS, который запускает Vidalia.

Вот код для выполнения этих двух задач. Я запускаю это в 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)

В системе Ubuntu мне удалось запустить браузер Tor через селен. На этой машине есть tor, работающий на порту 9051, и прокси-сервер Privoxy http, который использует tor на порту 8118. Для того, чтобы браузер Tor прошел страницу проверки tor, мне пришлось установить прокси-сервер 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))
person dmmfll    schedule 27.04.2015
comment
Если вы получаете сообщение об ошибке «Прокси-сервер отказывается подключаться», вероятно, вы не запустили приложение TorBrowser из средства поиска, чтобы запустить хост SOCKS на порту 9150. - person dmmfll; 27.04.2015
comment
Или у вас нет Tor и Privoxy на локальной машине. - person dmmfll; 28.04.2015
comment
Значит надо вручную установить tor и privoxy, и тогда скрипт заработает? - person serv-inc; 14.09.2015
comment
да. Демон Tor запущен. Privoxy запущен. Настройка примерно в строке 1314 файла / etc / privoxy / config как таковая forward-socks5t / 127.0.0.1:9050 . при условии, что этот интерфейс и порт установлены на демоне tor. - person dmmfll; 14.09.2015
comment
Предостережение: знайте, что это никоим образом не является анонимным по стандартам tor-проекта. Я просто использую его для изменения номера IP. По совпадению, в тот момент, когда вы набрали комментарий, мне просто интересно, почему у меня не горит желтый свет на https://check.torproject.org/, и это произошло из-за того, что я забыл раскомментировать строку в конфигурации Privoxy, о которой я упоминал выше. - person dmmfll; 14.09.2015
comment
@Dmfll после открытия Tor у меня есть варианты: я хочу установить прямое соединение с Tor. и это интернет-соединение подвергается цензуре или прокси. Есть идеи, как пройти это программно? Я не получаю приглашения, когда открываю Tor вручную. ОС Эль Капитан. - person RyGuy; 06.08.2016
comment
На Mac у меня не работает: selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH Я указываю firefox_binary на пакет в Tor Browser.app, которого явно нет в моей папке сценариев. Также используйте Venv, если это может помочь. Кто-нибудь смог запустить его на Mac? - person user305883; 17.10.2018
comment
@ user305883 У меня была такая же проблема. Запуск brew install geckodriver решил эту проблему для меня. - person user760900; 29.06.2020
comment
Это не работает, если у меня предварительно открыт Tor. Я должен его закрыть, а затем щелкнуть connect при запуске программы. Есть ли способ программно получить новую личность? - person user760900; 29.06.2020
comment
@ user760900 не совсем помню о том, что я разработал. Но не хочу использовать варево. - person user305883; 29.06.2020

// просто проверьте номер порта вашего браузера tor и измените его соответственно в // коде

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()
person Chirag Shetty    schedule 05.04.2015
comment
Я понимаю, что этому сообщению 5 лет, но я хотел бы отметить, что приведенный выше код открывает страницу yahoo.com в Mozilla Firefox, а не в браузере Tor. Как открыть страницу в Tor? Спасибо - person Daniel; 23.10.2020

Чтобы открыть браузер tor с помощью Selenium управляемый GeckoDriver вам необходимо:

  • Загрузите и установите браузер TOR

  • Загрузите последнюю версию GeckoDriver v0.26.0 и поместите ее в свою систему.

  • Установите последнюю версию браузера Mozilla Firefox v77.0.1.

  • Вы можете использовать следующий блок кода, чтобы открыть браузер с включенным TOR:

    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
    import os
    
    torexe = os.popen(r'C:\Users\username\Desktop\Tor Browser\Browser\TorBrowser\Tor\tor.exe')
    profile = FirefoxProfile(r'C:\Users\username\Desktop\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default')
    profile.set_preference('network.proxy.type', 1)
    profile.set_preference('network.proxy.socks', '127.0.0.1')
    profile.set_preference('network.proxy.socks_port', 9050)
    profile.set_preference("network.proxy.socks_remote_dns", False)
    profile.update_preferences()
    firefox_options = webdriver.FirefoxOptions()
    firefox_options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'
    driver = webdriver.Firefox(firefox_profile= profile, options = firefox_options, executable_path=r'C:\WebDrivers\geckodriver.exe')
    driver.get("http://check.torproject.org")
    
  • Снимок браузера:

torFirefox_torproject


Альтернатива использованию Firefox Nightly

В качестве альтернативы вы также можете загрузить, установить и использовать последнюю версию браузера Firefox Nightly v79.0a1.

  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
    import os
    
    torexe = os.popen(r'C:\Users\username\Desktop\Tor Browser\Browser\TorBrowser\Tor\tor.exe')
    profile = FirefoxProfile(r'C:\Users\username\Desktop\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default')
    profile.set_preference('network.proxy.type', 1)
    profile.set_preference('network.proxy.socks', '127.0.0.1')
    profile.set_preference('network.proxy.socks_port', 9050)
    profile.set_preference("network.proxy.socks_remote_dns", False)
    profile.update_preferences()
    firefox_options = webdriver.FirefoxOptions()
    firefox_options.binary_location = r'C:\Program Files\Firefox Nightly\firefox.exe'
    driver = webdriver.Firefox(firefox_profile= profile, options = firefox_options, executable_path=r'C:\WebDrivers\geckodriver.exe')
    driver.get("http://check.torproject.org")
    
  • Снимок браузера:

torNightly_torproject


Альтернатива с использованием Chrome

В качестве альтернативы вы также можете загрузить, установить и использовать последнюю версию браузера Chrome v84.

  • Блок кода:

    from selenium import webdriver
    import os
    
    torexe = os.popen(r'C:\Users\username\Desktop\Tor Browser\Browser\TorBrowser\Tor\tor.exe')
    PROXY = "socks5://localhost:9050" # IP:PORT or HOST:PORT
    options = webdriver.ChromeOptions()
    options.add_argument('--proxy-server=%s' % PROXY)
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get("http://check.torproject.org")
    
  • Снимок браузера:

torChrome_torproject


использованная литература

Вы можете найти пару соответствующих подробных обсуждений в:

person DebanjanB    schedule 01.07.2020
comment
Он открывает браузер Tor, но при попытке открыть веб-страницу я получаю пустую страницу с прокси-сервером, который отказывает в соединении. Я изменил номер порта и прокси-серверы, а сообщение осталось тем же. Вы можете здесь помочь? Спасибо - person Daniel; 23.10.2020
comment
Я заставил его работать. Виновником был profile.set_preference ('network.proxy.socks_port', 9050). Даже если я изменю порт, этого не произойдет, но удаление строки полностью решит проблему. - person Daniel; 23.10.2020

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

Использование Python 3.5.1 в Windows 10

person Will D.    schedule 09.04.2016

Многие ответы указывают на правильное направление, но именно это сработало для меня:

В Ubuntu:

Вам необходимо установить Tor с помощью команды apt или другим способом, но не бинарной версией.

Инструкция по установке:

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

Внутри sample.py вам может понадобиться:

  • установите профиль Firefox на torrc, который чаще всего находится в /etc/tor/.
  • установите двоичный файл Firefox в двоичный файл Tor, поскольку Tor - это всего лишь набор конфигураций, созданных поверх Firefox.

Вам также понадобится geckodriver для автоматизации firefox с помощью селена:

Обратите внимание на:

  • "network.proxy.socks_port" = 9150
  • Внутри torrc ControlPort 9050, CookieAuthentication 1
  • Откройте TorBrowser
  • sudo lsof -i -P -n | grep LISTEN порт LISTEN сети tor должен быть таким же в скрипте
  • Запустите скрипт python при открытом TorBrowser

Спасибо user2426679 https://stackoverflow.com/a/21836296/3816638 за настройки.

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")
person user3816638    schedule 29.11.2018

Используя рубин,

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

Чтобы подтвердить, что вы используете Tor, используйте https://check.torproject.org/.

person rdsoze    schedule 27.01.2014

Я изучил это, и, если я не ошибаюсь, на первый взгляд это невозможно.

Причина, по которой это невозможно сделать, заключается в следующем:

  • Браузер Tor основан на коде Firefox.
  • В браузере Tor есть специальные исправления для кода Firefox, предотвращающие взаимодействие внешних приложений с браузером Tor (включая блокировку библиотеки Components.Interfaces).
  • Selenium Firefox WebDriver взаимодействует с браузером через библиотеки Javascript, которые, как уже упоминалось, заблокированы браузером Tor.

Предположительно, это означает, что никто за пределами браузера Tor ни на вашем компьютере, ни через Интернет не узнает о вашем просмотре.

Ваши альтернативы:

  • Используйте прокси Tor через Firefox вместо браузера Tor (см. Ссылку в комментариях к вопросу).
  • Перестройте исходный код Firefox с помощью патчей для браузера Tor, за исключением тех, которые препятствуют внешнему обмену данными с браузером Tor.

Я предлагаю первое.

person Willem van Ketwich    schedule 14.02.2014
comment
Если вы действительно хотите использовать TBB, это можно сделать (1) сначала запустив пакет. (2) После того, как вы увидите, что Aurora загрузилась, вы можете (3) запустить селен, используя профиль FF и исполняемый файл, найденный в TBB. Это будет прикреплено к текущей Vidalia, и вы сможете (4) закрыть исходное открывшееся окно Aurora. - person user2426679; 22.02.2014

В качестве более новой альтернативы Selenium, который контролирует только Firefox, обратите внимание на Марионетка. Для использования с браузером Tor включите марионетку при запуске через

Browser/firefox -marionette

(внутри связки). Затем вы можете подключиться через

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

и загрузите новую страницу, например, через

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

Дополнительные примеры см. В руководстве.


Старый ответ

У проекта Tor есть тест на селен для своего браузера. Это работает так:

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)

Как видите, здесь используются переменные среды TBB_BIN и TBB_PROFILE для пакета и профиля браузера. Возможно, вы сможете жестко запрограммировать их в своем коде.

person serv-inc    schedule 14.09.2015
comment
каким должно быть значение TBB_BIN и TBB_PROFILE, если я их не настраиваю? - person Shoham; 06.08.2016
comment
@Shoham: марионетка действительно проста в использовании, вы уверены, что хотите попробовать селен? (Если это так, это зависит от вашей ОС, и если вы установили его с помощью прямой загрузки или диспетчера пакетов. Для Linux это должно быть похоже на tor-browser_en-US/Browser для TBB_BIN и TBB_BIN + TorBrowser/Data/Browser/profile.default/ для TBB_PROFILE`) - person serv-inc; 08.08.2016