はじめに
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以上。
コメント