おはよう君需要なし

求不得苦な日々

Chromeでproxy(認証あり)を使用する場合の注意点

Google Chromeがheadlessモードに対応し、デスクトップ環境のないサーバーマシンでも快適ブラウジング生活を送れるようになって久しいですが、皆様いかがお過ごしでしょうか。

どういうわけかGoogle Chrome先生はコマンドラインオプションで使用するproxyを指定できても認証情報(ユーザ名・パスワード)を使用したログインには対応していないようで、proxy環境下での使用にぐぬぬ!となります。

stone

stoneで認証情報をつけてリピートしてあげれば余裕でした。

Simple Repeater `stone'

↓このページが参考になると思います。

stoneを使ってプロキシ認証を自動化する

サービスとしてインストールする必要がなければ、stone.cfgファイルを作成して、

> stone -C C:\stone23xp\stone.cfg

コマンドでstoneを起動してやれば随時実行することができます。

chromeの起動オプションではhttpProxysslProxylocalhost:8080を指定すればオッケーです。

以上、快適なproxyライフを

Selenium Serverを使用しようとして proxyで躓いた話

昨今、Chromeがheadlessモードに対応するなどして、ブラウザの自動制御がひそかに激アツになっているのをご存知でしょうか。

まぁぼくもつい最近まで知らなかったので色々と試してみているんですが、使えん!!!となって1週間ぐらい悩んでしまったので状況をシェアしたいと思います。

プロキシ環境で使う場合には注意

というわけで、proxyで使う場合には注意が必要です。

本当に情けない話なんですが、proxyってあんまり使ったことなくて慣れてなかったのもあり、色々と手探りでやっていました。

環境変数http_proxyhttps_proxyを設定しておけばnodeは適当に通信してくれるのでnpm installコマンドなどはすべて問題なく使用でき、Seleniumでブラウザを立ち上げる場合でもブラウザのプロキシさえちゃんとしておけば問題ないだろうと思っていました。

しかし、実際にWebDriverIO(Seleniumのラッパーライブラリ)を使用してブラウザを制御してみようとすると、コンソールには謎のproxyのエラーが。むむ、こやつは何を通信しようとしているのだ…?となります。

原因:localhostへの通信

調べてみると、よくあるタイプのSeleniumラッパーライブラリは直接WebDriverを使用しているわけではなく、WebDriverを使用してくれるSelenium Serverに対して通信を行い、何らかのプロトコルで通信しているみたいでした。

今回はselenium-standaloneという、localhostSelenium Serverを立てて使用できるパッケージを使用していたため、proxy経由でlocalhostに通信を試みようとし、エラーが発生してしまったのだと考えられます。

解決策:no_proxyはちゃんと書きましょう

クソみたいな結論で本当に申し訳ないんですが、環境変数no_proxyは面倒くさくてもlocalhostぐらいは定義しておきましょう、という教訓でした。cmdで

> set no_proxy=localhost

この一文を追加するだけですんなりSelenium Serverを使用することができましたとさ。トホホ