Как запустить Tor Browser 9.5, который использует Firefox по умолчанию для 68.9.0esr, используя GeckoDriver и Selenium через Python

Я пытаюсь инициировать сеанс просмотра tor через Tor Browser 9.5, который использует Firefox v68.9.0esr по умолчанию, используя GeckoDriver и Selenium через Python на windows-10. Но я столкнулся с ошибкой:

tor_firefoxESR

Блок кода:

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:\Users\username\Desktop\Tor Browser\Browser\firefox.exe'
driver = webdriver.Firefox(firefox_profile= profile, options = firefox_options, executable_path=r'C:\WebDrivers\geckodriver.exe')
driver.get("https://www.tiktok.com/")

Где один и тот же блок кода работает через Firefox и Firefox Nightly с использованием соответствующих двоичных файлов.

Нужны ли мне дополнительные настройки? Кто-нибудь может мне помочь?


Снимок Firefox:

tor_firefox


Ночной снимок Firefox:

tor_firefoxNightly


person DebanjanB    schedule 30.06.2020    source источник


Ответы (2)


Мне удалось решить эту проблему путем обновления до версии 9.5.1 и внесения следующих изменений:

Обратите внимание, что, хотя код написан на C #, следует применить те же изменения в браузере Tor и в том, как он запускается.

FirefoxProfile profile = new FirefoxProfile(profilePath);
profile.SetPreference("network.proxy.type", 1);
profile.SetPreference("network.proxy.socks", "127.0.0.1");
profile.SetPreference("network.proxy.socks_port", 9153);
profile.SetPreference("network.proxy.socks_remote_dns", false);

FirefoxDriverService firefoxDriverService = FirefoxDriverService.CreateDefaultService(geckoDriverDirectory);
firefoxDriverService.FirefoxBinaryPath = torPath;
firefoxDriverService.BrowserCommunicationPort = 2828;
var firefoxOptions = new FirefoxOptions
{
    Profile = null,
    LogLevel = FirefoxDriverLogLevel.Trace
};
firefoxOptions.AddArguments("-profile", profilePath);
FirefoxDriver driver = new FirefoxDriver(firefoxDriverService, firefoxOptions);
driver.Navigate().GoToUrl("https://www.google.com");

Важные заметки:

Следующие конфигурации TOR необходимо изменить в about: config:

  • marionette.enabled: верно

  • marionette.port: задайте неиспользуемый порт и задайте для этого значения firefoxDriverService.BrowserCommunicationPort в своем коде. В моем примере было установлено значение 2828.

person numX    schedule 05.07.2020
comment
Я не думаю, что проблема здесь в марионетке. GeckoDriver работает только через марионетку. Более того, на моей тестовой машине порты не заняты. - person DebanjanB; 10.07.2020
comment
У меня их тоже не было, но они не работали до тех пор, пока я явно не установил эти конфигурации. Попробуйте :) - person numX; 10.07.2020
comment
Привет, можешь прислать мне код Python? Это только C #? Потому что я не могу найти модуль FirefoxDriverService в Python. Спасибо! - person Lowity; 30.07.2020
comment
Да, есть только код на C #, я, к сожалению, плохо знаю Python. Однако библиотека селена должна обеспечивать аналогичную функциональность, возможно, классы названы по-разному. - person numX; 01.08.2020

примечание:
я не уверен, действительно ли это однозначный ответ (поэтому я буду очень признателен за обратную связь)

решение:
Мне удалось отправить запрос на получение на страницу проверки (https://check.torproject.org/), и он показал мне неизвестный IP (кроме того, IP-адреса будут отличаться, если вы повторите запрос через некоторое время)

По сути, я настроил драйвер Chrome для запуска TOR. Вот код:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

tor_proxy = "127.0.0.1:9150"

chrome_options = Options()

chrome_options.add_argument("--test-type")
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('disable-infobars')
chrome_options.add_argument("--incognito")
chrome_options.add_argument('--proxy-server=socks5://%s' % tor_proxy)

driver = webdriver.Chrome(options=chrome_options)


driver.get('https://check.torproject.org/')

Поскольку драйвер не находится в режиме без заголовка, вы можете самостоятельно проверить полученную страницу. Он должен гласить:
Поздравляем. Этот браузер настроен на использование Tor. [Информация об IP]. Однако это не похоже на Tor Browser. Щелкните здесь, чтобы перейти на страницу загрузки

Убедитесь, что файл chromedriver.exe связан по пути, или укажите путь к файлу в качестве аргумента функции driver.Chrome ().

Изменить: убедитесь, что браузер TOR работает в фоновом режиме. Спасибо @Abhishek Rai за указание на это.

person HRK    schedule 04.12.2020
comment
Это работает. Я использую windows 7 64 .. - person Abhishek Rai; 04.12.2020
comment
У вас должен быть запущен Tor Browser ... заранее, чтобы это работало. - person Abhishek Rai; 04.12.2020
comment
Рад слышать, что это сработало, и да, TOR должен работать в фоновом режиме, спасибо за указание! Знаете ли вы, действительно ли весь трафик проходит через TOR в этой настройке через @AbhishekRai? ... или хотя бы как это правильно проверить? - person HRK; 06.12.2020
comment
Я просто установил открывающий URL как wtfismyip.com .. Нет другой причины, чтобы он отображал мой IP как немецкий, я, в Индии ... Итак, я предполагаю, что это работает. Через некоторое время он также меняет IP. Просто не говорится об использовании узла Tor Exit. - person Abhishek Rai; 06.12.2020