質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Chrome extension

Chrome拡張機能

Q&A

1回答

1352閲覧

サイト内のJSがどんなイベント等に反応したかを知りたい

amie8mie

総合スコア14

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Chrome extension

Chrome拡張機能

0グッド

0クリップ

投稿2019/08/02 06:41

編集2019/08/02 07:18

ごく簡単な自分用の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で自動で)再現できればいいのですが…/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutampp

2019/08/02 14:15 編集

うーん私も経験あるんですが結局分からなかったんですよねー。 HTML5 Form Validationを、使ってるんじゃないかなというとこまでは調べたんですが時間切れでした。 その時はとりあえずinput要素に対して.click()してからやりたい事やると、「なんか知らんが動いた」ですが、どうでしょう? 回答するのも烏滸がましいのでコメントで。
guest

回答1

0

イベントとか気にせずformをsubmit();してしまえば?

投稿2019/08/02 06:46

hentaiman

総合スコア6415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amie8mie

2019/08/02 23:12

なるほどと思い、formに関係ありそうなHTMLタグを追記させていただきました。 document.getElementById('login-form').submit() →action=のURLに何かしているっぽい様子がブラウザ左下のステータスに表示されるだけで、ページ変遷はされません document.getElementById('login_submit').click() →最初に試したdocument.querySelector('[aria-label="サインイン"]').click()と同じくログイン失敗します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問