【python】seleniumとfirefoxを使って、IP変更しながら実行

【今回の要件】
・Webページにアクセスするときにアクセス元IPを変更する
・javascriptで動いてるページのHTMLソースを取得する

【環境】
・windows 7
・python 3.7
・Firefox 75.0
・selenium 3.141.0

【アドオン】
Touch VPN
※Firefox addon

1.プロファイル準備

①プロファイル指定
管理しやすいように別のプロファイルを作成する。

(1) Firefox のアドレスバーに about:profiles と入力して Enter キーを押す。
(2) プロファイルマネージャーが開いたら、「Create a New Profile」を選択
(3) わかりやすい名前のプロファイル名を指定して作成。
(4) 作成後、表示されたルートディレクトリーのパスをメモしておく。


②新しいプロファイルで起動
(1) Firefox の実行ファイルのショートカットを作成。

Firefoxのショートカット

(2) ショートカットのプロパティを開き、[ショートカット]タブ – [リンク先] の末尾に「-p PROFILE_NAME」を追加(頭に半角スペースが1つ必要)。PROFILE_NAME は文字通り「プロファイルの名前」で、プロファイルの情報に表示される名前(例:”default”)。

IP変更できるアドオンを追加
今回使ったのは「Touch VPN
アクセスして、拡張機能を追加。

これで、新しく作ったプロファイルを指定して実行したら、touch VPNが入った状態のFirefoxブラウザが立ち上がる。

2.ドライバーのダウンロード

①Firefox用のwebdriverをダウンロードする。
https://github.com/mozilla/geckodriver/releases

自分の環境にあったやつでOK。
とりあえず自分は最新の「geckodriver-v0.26.0-win64.zip」をGET。

②ダウンロードしたら、解凍。
「geckodriver.exe」ができるので、そのファイルを今回コードを

書く場所に置いておく。

3.ライブラリーインストール

今回当たり前に使う「selenium」と
拡張機能をONするために使う「pyautogui」をインストールする

pip install selenium
pip install pyautogui

4.実行コード

# ライブラリの読み込み
import time
import pyautogui 
from selenium import webdriver
from selenium.webdriver.firefox.options import Options

# Selenium起動オプション
options = Options()
#options.add_argument('-headless') #ヘッドレスモードを有効にするときはここをコメントアウト #ただし、pyautoguiは使えない

#プロファイル設定(1.準備で作成したプロファイルを指定)
firefox_profile = webdriver.FirefoxProfile('D:/Users/●●●/AppData/Roaming/Mozilla/Firefox/Profiles/haab99oo.switch_user')

# firefoxドライバーの起動(2.ドライバーのダウンロードで設置したパスを指定)
DRIVER_PATH = "./geckodriver.exe"
driver = webdriver.Firefox(executable_path=DRIVER_PATH,firefox_profile=firefox_profile,firefox_options=options)
driver.set_window_size(800,900)
driver.set_window_position(0,0)

#拡張機能ON(自分のブラウザの拡張機能の位置を指定する:ピクセル定規とかつかうとすぐ)
time.sleep(2)
pyautogui.click(730, 60, 1, 1, 'left')
time.sleep(1)
# ポップアップ内クリック
pyautogui.click(560, 380, 1, 1, 'left')
time.sleep(3)
#フォーカス外す
pyautogui.click(100, 500, 1, 1, 'left') 

def main():
    # アクセス
    url = 'https://www.ugtop.com/spill.shtml'
    driver.get(url)
    driver.implicitly_wait(5)
          
    print(driver.page_source)
            
if __name__ == '__main__':
    main()

おすすめ

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください