31

Selenium で TOR ブラウザを使用することは可能ですか? 誰かがコピーして貼り付けることができるコードを持っていますか?

4

10 に答える 10

15

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
于 2014-02-17T18:09:37.100 に答える
12

はい、Selenium で TOR ブラウザーを使用することは可能です。

Ubuntu と Mac OS X の両方で実行できました。

次の 2 つのことが発生する必要があります。

  1. Tor が使用する Firefox バイナリへのバイナリ パスを設定します。Mac では、このパスは通常/Applications/TorBrowser.app/Contents/MacOS/firefox. 私のUbuntuマシンでは/usr/bin/tor-browser/Browser/firefox.

  2. Tor ブラウザは、Vidalia または Tor のインストールを通じて、127.0.0.1:9150 で SOCKS ホストを使用します。Finder から Tor を 1 回起動し、Vidalia が実行されるように開いたままにします。Selenium で起動されたインスタンスも、Vidalia が起動する SOCKS ホストを使用します。

これら 2 つのことを実現するコードを次に示します。これを 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 ブラウザーを実行できました。このマシンには、ポート 9051 で実行されている tor と、ポート 8118 で tor を使用する privoxy http プロキシがあります。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))
于 2015-04-27T20:47:07.773 に答える
1
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()

Windows 10 で Python 3.5.1 を使用する

于 2016-04-09T21:33:28.473 に答える
0

私はこれを調べましたが、私が間違っていない限り、額面通りにそれは不可能です.

これができない理由は次のとおりです。

  • Tor Browser は Firefox コードに基づいています。
  • Tor Browser には、外部アプリケーションが Tor Browser と通信するのを防ぐための Firefox コードへの特定のパッチがあります (Components.Interfaces ライブラリのブロックを含む)。
  • Selenium Firefox WebDriver は、前述のように Tor Browser によってブロックされている Javascript ライブラリを介してブラウザと通信します。

これはおそらく、Tor ブラウザの外にいる人は、あなたのボックスやインターネットを介して、あなたのブラウジングについて知ることはありません.

あなたの選択肢は次のとおりです。

  • Tor ブラウザの代わりに Firefox を介して Tor プロキシを使用します (質問のコメント内のリンクを参照してください)。
  • Tor Browser との外部通信を妨げるものを除いて、Tor Browser パッチを適用して Firefox のソース コードを再ビルドします。

私は前者を提案します。

于 2014-02-14T11:17:34.453 に答える
0

ルビーを使って、

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/ を使用します。

于 2014-01-27T10:08:57.940 に答える
0

Firefox のみを制御する Selenium の新しい代替手段として、Marionetteをご覧ください。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し、ブラウザー バンドルとプロファイルに使用します。これらをコードにハードコーディングできる場合があります。

于 2015-09-14T15:55:22.823 に答える