Shintaro's Laboratory

SEの徒然日誌です。気ままに更新していきます。

ヘッドレスブラウザ単体ではプロキシのbasic認証自動化はできなかったという話

仕事でバタバタしていたこともあってしばらくブログをおさぼりしてました。。

 

ただ満足できるネタが見つかるまで出さないといつまでもブログが更新できそうにないので、今後は小ネタでも更新していくようにします。

 

ということで今回は、タイトルの通りヘッドレスブラウザについて書いていきます。

 

ヘッドレスブラウザとはChromeFirefox等のブラウザのドライバ(WebDriver)をバックグラウンドで呼び出し、プログラムからブラウザを操作する仕組みのことを言います。

 

pythonのRequestsなどスクレイピングをする他の技術と何が違うのかと思われた方もいらっしゃるかと思いますが、WebDriverを使うメリットはjavascipt起動後の動的なサイトの情報を簡単に取得可能であるという点です。動的サイトを利用した業務の自動化に役立つ技術となります。

 

WebDriverは実行ファイルをダウンロードし、任意のフォルダに配置するのみで使用することが可能です(WebDriverそのものの使い方は検索すればたくさん出てくるので、今回は省きます)。

※ブラウザそのものは存在する必要あり

 

本題のプロキシ環境下でWebDriverを利用する方法を解説します。プロキシ環境はubuntu(virtualbox上)にsquidを入れて構築しました。

 

pythonを例とすると、common.proxyライブラリを利用する場合は、下記のように記載します。

 

※proxyTypeがMANUALとは、自身でどのプロキシを選択するか指定するという意味となります。他にもSYSTEM(OSで設定されているプロキシ)やPAC(pacファイルに指定されたプロキシ)などがあります。

 

ここで重要なのは、requests等のようにプロキシにuser:pass@ip:portと記載しても自動認証されない(ポップアップが出てくる)という点になります。

 

 

各ブラウザごとのoptionsライブラリを利用する場合は下記のように記載します。多少文法が違うだけで、どのライブラリを使用しても同じような記載の仕方になります(つまりuser:pass@ip:portとは記載できない)。

 

 

chromeのoptionsを利用する場合は下記のようになります。

 

 

chrome.optionsを利用する際、昔の名残で--proxy-authを利用すれば可能という記述のあるサイトがいくつか見つかりますが現在はそのオプションは存在しない(空振りする)ので注意してください。

 

なお現状のオプションは下記に一覧があります。

https://peter.sh/experiments/chromium-command-line-switches/

 

現状は自身でプロキシ環境をもう1つ作成し自端末→自プロキシ→社内プロキシ等という順でアクセスするか、selenium-wire(MITMproxyを使っていそうなのでプロキシの2重化と根本的に同じと思われる)しかなさそうです。。