おはよう君需要なし

求不得苦な日々

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を使用することができましたとさ。トホホ