Можно ли заставить селен использовать браузер TOR? Есть ли у кого-нибудь код, который можно скопировать и вставить?
Откройте браузер tor с помощью Selenium
Ответы (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
Да, можно заставить селен использовать браузер TOR.
Я смог сделать это как в Ubuntu, так и в Mac OS X.
Должны произойти две вещи:
Установите двоичный путь к двоичному файлу firefox, который использует Tor. На Mac этот путь обычно
/Applications/TorBrowser.app/Contents/MacOS/firefox
. На моей машине с Ubuntu это/usr/bin/tor-browser/Browser/firefox
.Браузер 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))
forward-socks5t / 127.0.0.1:9050 .
при условии, что этот интерфейс и порт установлены на демоне tor.
- person dmmfll; 14.09.2015
https://check.torproject.org/
, и это произошло из-за того, что я забыл раскомментировать строку в конфигурации Privoxy, о которой я упоминал выше.
- person dmmfll; 14.09.2015
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH
Я указываю firefox_binary на пакет в Tor Browser.app, которого явно нет в моей папке сценариев. Также используйте Venv, если это может помочь. Кто-нибудь смог запустить его на Mac?
- person user305883; 17.10.2018
brew install geckodriver
решил эту проблему для меня.
- person user760900; 29.06.2020
connect
при запуске программы. Есть ли способ программно получить новую личность?
- person user760900; 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()
Чтобы открыть браузер 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")
Снимок браузера:
Альтернатива использованию 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")
Снимок браузера:
Альтернатива с использованием 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")
Снимок браузера:
использованная литература
Вы можете найти пару соответствующих подробных обсуждений в:
- Как подключиться к браузеру Tor с помощью Python
- Как использовать Tor с браузером Chrome через Selenium < / а>
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
Многие ответы указывают на правильное направление, но именно это сработало для меня:
В 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 с помощью селена:
- https://github.com/mozilla/geckodriver/releases (работает с 0.21.0)
- Извлекать
chmod +x geckodriver
export PATH=$PATH:/path-to-extracted-file/geckodriver
Обратите внимание на:
- "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")
Используя рубин,
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/.
Я изучил это, и, если я не ошибаюсь, на первый взгляд это невозможно.
Причина, по которой это невозможно сделать, заключается в следующем:
- Браузер Tor основан на коде Firefox.
- В браузере Tor есть специальные исправления для кода Firefox, предотвращающие взаимодействие внешних приложений с браузером Tor (включая блокировку библиотеки Components.Interfaces).
- Selenium Firefox WebDriver взаимодействует с браузером через библиотеки Javascript, которые, как уже упоминалось, заблокированы браузером Tor.
Предположительно, это означает, что никто за пределами браузера Tor ни на вашем компьютере, ни через Интернет не узнает о вашем просмотре.
Ваши альтернативы:
- Используйте прокси Tor через Firefox вместо браузера Tor (см. Ссылку в комментариях к вопросу).
- Перестройте исходный код Firefox с помощью патчей для браузера Tor, за исключением тех, которые препятствуют внешнему обмену данными с браузером Tor.
Я предлагаю первое.
В качестве более новой альтернативы 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
для пакета и профиля браузера. Возможно, вы сможете жестко запрограммировать их в своем коде.
tor-browser_en-US/Browser
для TBB_BIN и TBB_BIN + TorBrowser/Data/Browser/profile.default/
для TBB_PROFILE`)
- person serv-inc; 08.08.2016