【selenium】自動化ツールがプロキシ認証で止まってしまうのを突破する方法【firefox】

Python

はじめに

seleniumを使用してWeb操作を自動化するとき、会社内のネットワークに接続しているとプロキシ認証ダイアログが出現して、自動化ツールが止まってしまうことがあると思います。

私もこのプロキシ認証ダイアログをどうにかできないかと、すごく悩まされました。
(ネットに全然情報が無かったです。)

このページでは、私が悩みに悩んで、ようやく解決策を見つけ出したので(ネット情報が無かったから私が発見したということで)、seleniumでfirefoxを操作するときに自動化ツールが止まらない方法を紹介します。

ただし、このページはプライベートで書いていますので、プロキシ環境を再現できません。
スクショが取れない部分は手書きの絵であること、ご承知おきください。

手順

どんな方法かを簡単に説明すると、
「firefoxのプロファイルにプロキシのパスワードを記憶させて、そのプロファイルをPythonで読み込む」
だけです。

selenium用のfirefoxプロファイルを作成する。

まずは、firefoxのプロファイルを作成します。
プロファイルは、ユーザー毎に設定を記憶させることができる機能です。

firefoxを開き、検索バーに「about:profiles」と入力し、Enter。
プロファイルについてというページが開きます。

「新しいプロファイルを作成」をクリック。

「次へ」をクリック。

プロファイル名に任意の名前を入力。今回はseleniumとしていますがなんでも大丈夫です。
保存先を確認して「完了」をクリック。

すると、プロファイルについてのページに、先ほど作成したプロファイルが表示されます。
次に、「プロファイルを別のプロセスで起動」をクリック。

新しい画面でfirefoxが起動します。
このときの初期設定は、全てスキップで大丈夫です。

プロファイルにプロキシのパスワードを保存する。

初期設定が完了したら、右上のメニューから設定を開きます。

ネットワーク設定の「接続設定…(E)」をクリック。
(ネットワーク設定は一番下にあります。)

自分の環境に合わせてプロキシ設定を行ってください。(基本的には「システムのプロキシー設定を利用する」で大丈夫だと思います。)

「パスワードを保存してある場合は認証を確認しない」にチェック。

ここまで完了したら、一旦このプロファイルで開いているfirefoxを閉じます。
そして、もう一度開きます。(先ほどの手順の「プロファイルを別のプロセスで起動」をクリック。)
すると、プロキシ認証ダイアログが出現すると思います。

このプロキシ認証ダイアログはキャンセルを連打して閉じます。
ここではプロキシを入力しないでください。
また、優先ブラウザ設定が出たら、「次からこのメッセージを表示しない」にチェックして「後で」をクリック。

次に、検索窓に何か入力して検索してみます。(なんでもいいです。ここでは「a」と検索してます。)

すると、当然つながりません。
が、先ほどとは別のプロキシ認証が出現します。
ここでユーザー名とパスワードを入力してログインをクリック。

次に、「パスワードを保存しますか?」と訊かれるので、「保存する」をクリック。

すると、先ほど検索した結果が表示されます。(プロキシ接続できているという証拠。)
これでプロキシのユーザー名とパスワードが保存されました。
確認のために、もう一度、閉じて開いてみてください。プロキシ認証ダイアログは出現しないと思います。

Pythonでプロファイルを読み込む

次に、プログラム側で、先ほど作成したプロファイルを読み込みます。
プロファイルが保存されているパスは「プロファイルについて」のページで確認することができます。

ルートディレクトリー は、ブックマーク、パスワードや設定情報のような ユーザープロファイルのデータ が格納されています。ローカルディレクトリー は、ディスクキャッシュやその他の一時的なデータが格納されています。

プロファイルマネージャーを使用して、Firefox のプロファイルを作成または削除する

らしいです。ルートディレクトリのパスをメモります。

以下のようにPythonを書きます。
your_profiles_pathには、先ほどメモしたプロファイルのパスを記述してください。

from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

# Firefox Profileのパス
profile_path = r'your_profiles_path'

# Firefox Profileをロード
profile = FirefoxProfile(profile_path)

# Firefoxのオプションを設定
options = Options()
# ProfileをOptionsに設定
options.profile = profile

service = Service(r'your_driver_path')

# Firefoxを起動
driver = webdriver.Firefox(service=service, options=options)
Python

以上。

コメント

タイトルとURLをコピーしました