ごく簡単な自分用のChrome拡張を作っています(Webページを開く際に自作のJSファイルも追加で読み込ませるというだけのものです)。
仕事でSynology DiskStation Managerというサービスを使っているのですが(管理しているのは自分ではありません)
ブラウザで開くたびに毎回手動で「ログイン」ボタンを押さなければならないのが面倒なので、JavaScriptで自動ログインをしたいと考えました。
最初に試したこと
まずは
JavaScript
1document.querySelector('[aria-label="サインイン"]').click()
を試してみましたが
(ユーザー名とパスワードはブラウザに記憶されているものが最初から<input>内に入っているにも関わらず)
ユーザー名もしくはパスワードが間違っていると言われてしまい、うまくログインできません。
わかったこと
実際にはかなりHTMLが入り組んでいるのですが、簡単に書くと
HTML
1<div id="sds-login"> 2 <div> 3 <div> 4 <div> 5 <iframe id="login_iframe" name="login_iframe" style="display_none"> 6 </iframe> 7 <form id="login-form" method="POST" action="http://(略):(ポート番号)/(略)/login.cgi?enable_syno_token=yes" target="login_iframe"> 8 <div id="login_inner_pannel"> 9 <div> 10 <div> 11 <div> 12 <input id="login_username"> 13 </div> 14 <div> 15 <input id="login_passwd"> 16 </div> 17 <span> 18 <em> 19 <button aria-label="サインイン">サインイン</input> 20 </em> 21 </span> 22 </div> 23 </div> 24 </div> 25 <input type="hidden"><!-- 中身は空 --> 26 <input type="hidden"><!-- 中身は「yes」 --> 27 <input type="hidden"><!-- 中身は空 --> 28 <input type="submit" id="login_submit"> 29 </form> 30 </div> 31 </div> 32 </div> 33</div>
といった感じで
- <div id="sds-login">内のどこかをクリックする(clickかmouseupかそれとも別の何かを見ているのかはわかりません)
- キーボードのタブキーを押すなどして<input id="login_passwd">などにフォーカスする
のどちらかに反応し、どういうわけか
- ユーザー名・パスワードを表す2つの**<input>内の文字表示が大きくなる**
(Chromeのデベロッパーツールで見たところ、HTML属性もCSSもヘッダーも変わっているように見えないのでどうやって文字を大きくしているのかわかりません)
- <input id="login_passwd"> に aria-invalid="false" という属性が付与される
ことがわかりました(少なくとも https://difff.jp/dev/obokata_copypaste.html でhtmlを比較した限りは変化はこれだけ)
どうやらこの状態にしたうえで「サインイン」ボタンを押すことで初めてログインができるという仕組みになっているように思います。
次に試したこと
単純に
JavaScript
1document.getElementById('sds-login').click() 2document.getElementById('login_username').click() 3document.getElementById('login_username').focus() 4document.getElementById('login_passwd').click() 5document.getElementById('login_passwd').focus() 6
などを試してみたのですが
これだけだとただ単にフォーカスが移ったりするだけで<input>内の文字は小さいままで、ログインもやはり失敗してしまいます。
その他
何かしらのイベントを起こして何らかの関数なりを呼べばいいのだとは思いますが
Chromeのデベロッパーツール(あまり見方には慣れていません)から「Performance」の欄を見てみても、
何やら圧縮されたjs(複数ファイルあります)の中の何かが動いているということがわかるだけでした。
試しにjsファイルの中を「addEventListener」などで検索してもよくわからず…
HTML側にonclickなどの属性が設定されているわけでもありません。
こちらとしては、画面をクリックしたときの何に反応して何がどう動いた(ことでログインできるようになった)のかを突き止め、それを(JavaScriptで自動で)再現できればいいのですが…/