質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

8536閲覧

[Python] SeleniumのChromeで認証プロキシが自動で認証されない

kurosuke___

総合スコア217

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2019/08/11 14:18

編集2019/08/11 16:22

SeleniumのChromeDriverで認証が必要なプロキシを自動認証させたいのですが、chromeが起動すると手動認証のポップアップが出てきてしまい、入力すれば正常につながりますが、キャンセルすると認証されません。

これを自動で認証を通してほしいのですが、解決策はありますでしょうか。
できるだけ拡張機能でプロキシを設定したユーザープロファイルを使う方法は避けたいです。

やったこと

selenium.webdriver.ChromeOptions()のインスタンスのadd_argumentメソッドを使い、

  • --proxy-server=http://サーバーIP:ポート
  • --proxy-auth=ユーザーID:パスワード

を登録しました。
このインスタンスをselenium.webdriver.Chrome()に渡してChromeを起動しています。

コード

Python

1 def _create_options(self, proxy_settings=None) -> webdriver.ChromeOptions: 2 options = self.config["browser"]["chrome"]["options"] 3 chrome_options = webdriver.ChromeOptions() 4 5 for conf in options: 6 chrome_options.add_argument(conf) 7 8 chrome_options.add_argument(f"--proxy-server=http://{proxy_settings['proxy_host']}:{proxy_settings['proxy_port']}") 9 chrome_options.add_argument(f"--proxy-auth={proxy_settings['proxy_username']}:{proxy_settings['proxy_password']}") 10 return chrome_options

バージョン情報

  • Python: 3.7.4
  • selenium: 3.141.0
  • chromedriver-binary: 76.0.3809.25.0

宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/08/11 15:39

プロキシ設定しているコードを載せてください。(もちろんユーザー名、パスは適当なもので良いです)
kurosuke___

2019/08/11 16:20

def _create_options(self, proxy_settings=None) -> webdriver.ChromeOptions: options = self.config["browser"]["chrome"]["options"] chrome_options = webdriver.ChromeOptions() for conf in options: chrome_options.add_argument(conf) chrome_options.add_argument(f"--proxy-server=http://{proxy_settings['proxy_host']}:{proxy_settings['proxy_port']}") chrome_options.add_argument(f"--proxy-auth={proxy_settings['proxy_username']}:{proxy_settings['proxy_password']}") return chrome_options
kurosuke___

2019/08/11 16:21

みにくいので追記します
meg_

2019/08/12 05:22 編集

「--proxy-auth」が効かないとの情報がありますね。非公式ですがオプション一覧(下記サイト内のリンク)にいないですね。 下記サイトは参考になりませんか? http://naruoga.hatenablog.com/entry/2018/02/04/225909 ※私自身はプロキシ経由での通信しかできない環境にてブラウザに固定でプロキシ設定しているため、pythonでの設定はしておりません
kurosuke___

2019/08/12 10:03

見てみますね、ありがとうございます。
guest

回答1

0

自己解決

他コミュニティがマルチポスト禁止のため解決済みにします。

投稿2019/08/12 13:33

kurosuke___

総合スコア217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mini1988

2019/09/24 07:21

はじめまして。本件同じ悩みを持っているのですが、解決方法をご披露願えないでしょうか?もしくは解決策を示した他のサイトを教えていただけないでしょうか?厚かましいお願いで恐縮ですが、何卒回答いただけますようお願い致します。
kurosuke___

2019/10/22 23:42

散々調べ尽くした結果、Seleniumは機能として認証プロキシを自動で通すというのは持っていないそうです。 私が最終的に決断した手法は以下のURLにて言及されているものです。 https://stackoverflow.com/questions/55582136/how-to-set-proxy-with-authentication-in-selenium-chromedriver-python ChromeExtensionのAPIで、リクエストするたびに発火するイベントがあるので、そのイベントで認証します。 具体的にはPythonプログラム内で認証したいプロキシの ・ホスト ・ポート ・ユーザーネーム ・パスワード を受け取り、ChromeExtensionとして機能させるための文字列に埋め込みんだあとファイルにしてZip圧縮します。 そのZipファイルのパスを保存しておき、ChromeDriverのadd_extensionメソッドに引き渡します。 そうすればリクエストのたびに認証プロキシを自動で通る拡張機能を読み込んだ状態で開始できます。 拡張機能自体のコードは数十行なのでPythonプログラム内でハードコードできる範疇です。
kurosuke___

2019/10/22 23:46

ただし、拡張機能はヘッドレスモードのChromeでは機能しないので、ヘッドレスモードでの運用が必要な場合はこの手法は使えません。
mini1988

2019/10/25 08:32

ご回答いただき、ありがとうございました。早速、試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問