[남용 금지] Tor에서 익명성을 확보하면서 Selenium으로 롤업.

About


파이톤으로 커튼을 칠 때 익명성을 확보하고 싶습니다.😎

주의

  • 여기에 커튼 자체를 상세하게 설명하지 않습니다.
    훌륭한 분들은 기사를 자세히 쓰실 테니 그쪽을 참고하세요.
  • 쓸것


    https://www.torproject.org/
    https://www.selenium.dev/ja/documentation/
    다른 사람에 대한 보도가 비교적 상세하기 때문에 상술한 내용은 상세하지 않다

  • Tor 익명화된 경로에 사용되는 서비스입니다.대리로 사용하다.

  • Selenium 코드를 사용하여 브라우저의 응용을 조작한다.
  • 작업 환경


    이번 작업 환경은 맥[1],python3이며, 이번 브라우저는 크롬을 사용합니다.
    컨디션
    version
    macOS
    12.3.1
    Python3
    3.9.12
    Chrome
    100.0.4896.127

    도구 클래스 설치


    Tor 설치


    Homebrew 설치.또 홈brew 자체 설치는 다른 사람의 보도에 맡길 예정이다.
    https://brew.sh
    터미널에서 실행
    brew install tor
    

    Python에 사용되는 패키지 설치


    https://pypi.org/project/selenium/
    https://pypi.org/project/webdriver-manager/

  • seleniumSelenium/WebDriver를 조작하는 데 사용되는 Python 봉인.

  • webdriver-manager WebDriver를 관리하는 파이썬 패키지입니다.사용 중인 브라우저 버전에 따라 웹 드라이브를 다운로드합니다.👍🏻
  • 터미널에서 실행
    pip3 install selenium webdriver-manager
    

    파이썬 스크립트


    시스템에서 ptyhon3이 설정되었습니다.다음 스크립트를 적당한 위치에 저장합니다.
    tor.sh
    #! /usr/bin/env python3
    # Tor経由でスクレイピング
    
    import os.path
    import subprocess
    from subprocess import PIPE
    from time import sleep
    from selenium import webdriver
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 設定
    PROXY = "socks5://localhost:9050"   # Torのデフォルトポート
    
    # Seleniumをあらゆる環境で起動させるChromeオプション
    options = Options()
    options.add_argument('--disable-gpu')
    options.add_argument('--disable-extensions')
    options.add_argument('--proxy-server=%s' % PROXY)
    options.add_argument('--start-maximized')
    
    # ダウンロードのデフォルト先を変更している
    # 不要であればコメントアウトしても問題ない
    DOWNLOAD_DIR = os.path.expanduser('~/Downloads')
    prefs = {
       "download.default_directory": DOWNLOAD_DIR
    }
    options.add_experimental_option("prefs", prefs)
    
    tor = None      # torプロセス変数
    driver = None   # web-driver変数
    
    try:
        # torの起動
        tor = subprocess.Popen(["tor"], shell=True, stdout=PIPE, stderr=PIPE)
    
        # ブラウザの起動。ここではChromeを起動している
        driver = webdriver.Chrome(ChromeDriverManager().install(),
                                chrome_options=options)
    
        # 待機用
        wait = WebDriverWait(driver=driver, timeout=30)
    
        # 起動画面をtorプロジェクトのトップページ
        driver.get('https://check.torproject.org')
    
        # 全て読み込むまで待つ
        wait.until(EC.presence_of_all_elements_located)
    
        # Torの確認
        # Tor経由のアクセスしているとTitleタグが congratulations となる
        if "congratulations" in driver.title.lower():
            print("torが有効です")
    
            # とりあえず DuckDuckGo を開く
            driver.get('https://duckduckgo.com')
    
            # TODO: ここでスクレイピングする
            # とりま、一旦1日開きっぱなし
            sleep(60*60*24)
        else:
            # もしTorがうまく動作していない場合はエラーで中断
            # Torの起動に失敗した場合、そもそもプロキシの設定でエラーとなるのでここまでこないはず
            raise Exception("torが有効ではありません")
    except Exception as e:
        print(e)
        print("エラーが発生しました。")
        if driver is not None:
            driver.close()
            driver.quit()
    finally:
        # torプロセスを終了させる
        if tor is not None:
            tor.kill()
    

    실행하다


    그대로 집행할 수 없기 때문에 tor.sh에 집행 권한을 부여한다
    터미널에서 실행
    chmod +x tor.sh
    

    실행


    터미널에서 실행
    ./tor.sh
    
    브라우저가 열리면 Tor의 검사 웹 사이트에 액세스할 수 있습니다.
    익명성이 확인되면 DuckDuckGo 이동합니다.

    과제.

  • Chrome의 기본 검색 엔진을 DuckDuckGo로 변경하려고 합니다.[2]
  • 사용자가 크롬을 종료할 때 Pythn을 통해 Pythn 프로세스를 감지하고 종료하기를 원합니다
  • 각주
    M1과 intel 모두 시도↩︎
    Starter Tor Brower로 사용하기 편하다↩︎

    좋은 웹페이지 즐겨찾기