5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Seleniumで認証を通す

Last updated at Posted at 2019-03-15

誰でも思いつきそうなことだけど、ググると困っている人がたくさんいるようなので、メモを残す。

某ルーターのROMを焼いた後にファームウエアの不具合が発覚。
製造後にファームウエアの更新をする必要が出てきた。

残念ながら、便利なバックドアはないようだし、趣味的にubootからbootpで流し込む方法はSoCメーカーのSDKにあるのは知ってるんだけど、製造メーカーの仕様書になかったのでちょっと採用できないと言われた。
ブラウザからポチポチしてアップデートをやる以外の方法がない(というか認めてもらえない)。
なにせ量産物のため数が超多いので、パートのおばちゃんにブラウザをポチポチさせると、うん千万円かかってしまう。金額も驚異だが、なによりすごく作業時間がかかってしまう。その結果発生する、製品初動時の出荷要求に応えられない機会損失は大きい。

しょうがないので、Raspiを使って、自動化して人件費を節約すると共に、並列度を上げて作業時間の短縮を図る。

時間もないので、シンプルにchrome WebDriver/Seleniumという組み合わせで試し始めた。名前とできることは知っていたけど、自分でさわるのは初めてだ。ざっとドキュメントを見て勉強する。Pythonも十年ぶりくらい?

前提条件として、製品であるのでブラウザで管理画面を開くにも認証が必要だ。そして、個体ごとにIDとパスワードが異なる。
そして、残念なことにSeleniumは認証に対応していないようだ。
試してみたが、そもそもSeleniumではブラウザの出す認証画面の制御ができない。
SeleniumでgetするURLにIDパスワードを埋め込んでみたが、そのような方法にも対応できないようだ。
ちらっとググってみても、うまくいかないという報告はたくさん出てくるものの、うまくいった方法というのは見当たらなかった。IE Driverなら通るよとか、Firefox Driverの特定のバージョンなら通るという話も出てきたが、その環境をそろえる手間がしんどそう。何よりターゲットデバイスはRaspiだもの。IEとか動かないわ...

管理画面に入れなければ、ファームウエアの更新できない。
ダメじゃん...

ググった結果では、前にproxyを立てて代理認証をさせるような方法が成功例として出ていたが、ちょっとそれもダサい気がする。
requestsモジュールで認証後に引いてきたコンテンツをSeleniumに読ませてみたが、それで処理を引き継がせるのは、渡す必要のあるものが多くて結構しんどそうだった。
そもそも、どういう条件が必要なのかの仕様書もないので、パケットキャプチャしてのクローニングにも不安がある。

時間もない絶望感の中、明日はファームイメージを解析して、バックドアかセキュリティホールでも漁ってみようかなと考えていると、寝る前に布団の中である方法を思いついた。
翌日、さっそく試してみると、あっさりうまく動いてしまった。

なんのことはない、外的に得られる情報からIDとパスワードを特定し、認証情報を埋め込んだURLに自動遷移するJSを埋めたHTMLファイルをローカルに吐いて、Seleniumでそれを開き、認証後のページに遷移させるというそれだけ。
ハイテクのかけらもない超ダサい方法だとは思うが、シンプルな解決方法になった。

もう1つ思いついた方法があったのだけど、かなりトリッキーな方法で、この製品にしか適用できない手であるので、それを採用せずに済んでよかった。

その後、ネストしたiframeや、旧態依然とした入り組んだtableだらけの構成、nameもidも振られていないエレメントなどに苦戦したが、なんとか短時間での自動化に成功した。
パートのおばちゃんでも制御がわかるように、sense-hatを付けて状態やエラー表示を行い、ボタン操作は最終確認の一回だけに絞った。sense-hatはコスト面で反対されたが、強固に主張してデモまではOKの許可をもらう。動作を見たら、削るということはありえないw 現場には大好評で、操作ミスも解消している。なにより、なんだかよくわからない状態もない。
費用対効果を考えて、そんなとこケチるなよ...

Raspiは、Xは起動せずに、特定ユーザーで自動ログインし、シェルを指定せずにプログラムを自動起動させている。誰でも電源を入れるだけで使える。ログや必要なパラメーターは、VFATなパーティションに書き込まれているので、Windowsから普通に読み書きできる。

こうして、大幅なコスト圧縮と時間短縮を成し遂げたのであった。
自分の責任範疇の中のミスや、担当の本業でもないのに...
これで給料が上がったりボーナス出たりするわけじゃないので虚しいことだw
使った機材さえ、手元に残ることもない。
sense-hatの1つくらい置いていけよ...

製造後の後工程での自動化治具が必要な方、副業でオーダー受け付けております。 (宣伝かよw)
あ、転職先も募集してますw
今はクラウドとIoTが主戦場ですが、鯖から組み込みまでいろいろできます。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?