Selenium Serverを使用しようとして proxyで躓いた話
昨今、Chromeがheadlessモードに対応するなどして、ブラウザの自動制御がひそかに激アツになっているのをご存知でしょうか。
まぁぼくもつい最近まで知らなかったので色々と試してみているんですが、使えん!!!となって1週間ぐらい悩んでしまったので状況をシェアしたいと思います。
プロキシ環境で使う場合には注意
というわけで、proxyで使う場合には注意が必要です。
本当に情けない話なんですが、proxyってあんまり使ったことなくて慣れてなかったのもあり、色々と手探りでやっていました。
環境変数でhttp_proxy
やhttps_proxy
を設定しておけばnodeは適当に通信してくれるのでnpm install
コマンドなどはすべて問題なく使用でき、Seleniumでブラウザを立ち上げる場合でもブラウザのプロキシさえちゃんとしておけば問題ないだろうと思っていました。
しかし、実際にWebDriverIO(Seleniumのラッパーライブラリ)を使用してブラウザを制御してみようとすると、コンソールには謎のproxyのエラーが。むむ、こやつは何を通信しようとしているのだ…?となります。
原因:localhostへの通信
調べてみると、よくあるタイプのSeleniumラッパーライブラリは直接WebDriverを使用しているわけではなく、WebDriverを使用してくれるSelenium Serverに対して通信を行い、何らかのプロトコルで通信しているみたいでした。
今回はselenium-standaloneという、localhostにSelenium Serverを立てて使用できるパッケージを使用していたため、proxy経由でlocalhostに通信を試みようとし、エラーが発生してしまったのだと考えられます。
解決策:no_proxyはちゃんと書きましょう
クソみたいな結論で本当に申し訳ないんですが、環境変数no_proxy
は面倒くさくてもlocalhostぐらいは定義しておきましょう、という教訓でした。cmdで
> set no_proxy=localhost
この一文を追加するだけですんなりSelenium Serverを使用することができましたとさ。トホホ