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

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

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

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

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

Q&A

解決済

2回答

1249閲覧

javascriptでChatworkの検索を自動化させたいが検索実行ができない。

neji-thon

総合スコア7

JavaScript

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

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

0グッド

0クリップ

投稿2021/01/05 03:05

編集2021/01/05 15:42

chatworkで検索文字を入力させて、検索実行したいのですが、検索実行するタグ?がHTML上に出現していないので、クリックできない状態です。

検索BOXに文字を入力

Javascript

1document.querySelector("#_headerSearch > div > div > input[type=text]").value = 'test';

上記にて、検索窓に文字を入力することはできますが、そこから検索実行ができず困っています。

どうも、手入力で検索窓に文字を入力すると、HTML上に<div class="fade"></div>が出現し、そのdivの中に以下の検索実行できるタグが出てくるようです。

HTML

1<div class="sc-fxMfqs eKhNyu"> 2 <span class="sc-eIvgmF ivIAwz" style="display: inline;"> 3 <span class="sc-bdVaJa vKQHu"> 4 <svg viewBox="0 0 10 10" width="16" height="16" class="sc-bkypNX kHhnYU sc-bwzfXH jhCIfQ" aria-hidden="true"> 5 <use fill-rule="evenodd" xlink:href="#icon_search"></use> 6</svg></span></span> 7 <span class="sc-jklikK koCLIz">"test"でメッセージを検索</span> 8</div>

上記、手動で出現させたタグに対しては、以下のコードで検索実行できることは確認しています。

Javascript

1document.querySelector("#_headerSearch > div.fade > div > div > div > span.sc-jklikK.koCLIz").click();

しかしながら、出現させる方法がわかりません。
動作的には「文字を入力する」事と「フォーカスされている事」の2つが重なった場合に出現しているようすです。

検索BOXのinputに対してmouseoverやonchangeなど?GoogleChromeのデベロッパーツール上でConsoleに出てくるものをかたっぱしから試しましたが、どれも上記の出現をさせることができませんでした。

お手数ですが、ご教示いただけますと幸いです。
よろしくお願いします。

dispatchEventについてヒントをいただき、試した事

Javascript

1var hoge = document.querySelector("#_headerSearch > div > div > input[type=text]")

Javascript

1hoge.dispatchEvent(new Event('blur')); 2hoge.dispatchEvent(new Event("input", {"bubbles": !0})); 3hoge.dispatchEvent(new KeyboardEvent("keyup",{key: "a" }));

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

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

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

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

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

plasticgrammer

2021/01/05 05:05

検索BOXのイベントリスナーを確認してみてください。 Chromeだと開発者ツールで対象要素選択後、Event Listenersタブにて確認できるかと思います。(どのイベントに検索ボタン表示処理が登録されているでしょうか)
neji-thon

2021/01/05 06:39

Event Listeners画面は初めてみたのですが、出現する、クリックしたい検索BOXで右クリックしてEvent Listenersのclickの中の一番下に、 div.sc-fxMfqs eKhNyuというものが出てきます。 それが関係するのでしょうか?
plasticgrammer

2021/01/05 07:08

検索BOXに値を設定する前に、検索BOXのクリックイベントを実行(dispatchEvent)すればいけそうな気がします。
neji-thon

2021/01/05 15:40 編集

ご教示ありがとうございます。 dispatchEventも初めて触る?のでいろいろ試して、以下のdispatchEventを実行後にテキストのvalueを入れ替えたりしてみましたが、 見た目上で検索実行ができる検索BOXが表示されず、検索実行はいまだできておりません。 イベント?はこのあたりを入れ替えてみたりしました。 change,focusout,input,blur 恐縮ですが、dispatchEventについてもう少しヒントをいただけますでしょうか。。 よろしくお願いします。
neji-thon

2021/01/06 16:00

ありがとうございます。 いただいた内容をもとにデベロッパーツールと改めてにらめっこしてましたが、ラッキーパンチは当たらないようです。 そもそものjavascriptの勉強が足りず恐縮です。 何をしたのか不明なのですが、検索BOXをいじってたらConsoleにEnterキーやら入力したイベントがリアルタイムに表示されるようになり、そこを追いかけていったら?該当のENTERしたい検索BOXのエレメント?の所まで行けまして、右クリックでプロパティのパスコピーというのをしてみたのですが、以下の内容でした。 srcElement.offsetParent.parentElement.nextElementSibling.firstChild.lastChild すいません。さっぱりわからないのですが、何かわかりますでしょうか?
plasticgrammer

2021/01/07 02:28

> srcElement.offsetParent.parentElement.nextElementSibling.firstChild.lastChild 発生したイベント要素から、選択(検索BOX)までの相対参照のためのコードになるかと思います。 今回の問題解決には役に立ちそうにないです。
plasticgrammer

2021/01/07 02:35

一旦、現状の確認と整理のため回答させていただきました。
neji-thon

2021/01/07 03:20

ありがとうございます!勉強不足ですいません。
guest

回答2

0

ベストアンサー

当方の環境ではこれで動作しました。
React がよくわからないので、無駄なことをしてるかもしれませんが……

js

1var target = document.querySelector("#_headerSearch > div > div > input[type=text]"); 2 3Object.getOwnPropertyDescriptor( HTMLInputElement.prototype, 'value' ).set.call( target, "hoge" ); 4target.dispatchEvent( new Event( 'change', { bubbles: true} ) ); 5target.dispatchEvent( new KeyboardEvent( "keydown", { keyCode: 13, bubbles: true } ) );

投稿2021/01/07 05:50

Lhankor_Mhy

総合スコア36960

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

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

neji-thon

2021/01/07 10:08

ありがとうございます! bublesの所で(意味を勉強しないとですが・・・)出したかったタグが出てきて、javascriptだけで検索実行できました!
guest

0

検索BOXのイベントハンドラから、「"test"でメッセージを検索」を表示させているものを見つけ、そのイベントハンドラを実行させるのが近道かと思います。

検索BOXのイベントハンドラのclickで、表示させているのであれば

js

1var hoge = document.querySelector("#_headerSearch > div > div > input[type=text]") 2var event = new MouseEvent("click"); 3hoge .dispatchEvent(event);

として表示させることはできないでしょうか。

投稿2021/01/07 02:34

plasticgrammer

総合スコア629

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

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

neji-thon

2021/01/07 03:51 編集

ありがとうございます。 出現させたい検索BOXを手動で出している状態でその検索BOXを右クリックして Event ListenersのAncestorsを外して(外さないと大量に項目があるので。。)、上にタグをたどっていくと、以下のパスの場所でclickのイベント?が唯一表示されました。(見方が正しいか不明で恐縮ですが) 以下を試しましたが、ダメでした。 var hoge = document.querySelector("#_headerSearch > div.fade > div > div > div") var event = new MouseEvent("click"); hoge.dispatchEvent(event); その後、元から見えている検索BOXにテキストを入れても隠れた方の検索BOXは出現してくれません。 何か少し進展した気がします。もう少し自分でもいろいろ試してみます。
plasticgrammer

2021/01/07 04:04

> var hoge = document.querySelector("#_headerSearch > div.fade > div > div > div") valueを設定するときの例とパスが違っていますが、これは検索BOXなのですよね。 検索BOXに間違いないのであれば、外したAncestorsのどれかのイベントでボタン表示させているのかもしれません。
Lhankor_Mhy

2021/01/07 04:10 編集

横から失礼します。 Chatwork 使っていますが、調べてみるとchangeイベントを拾っているようです。 検索実行は keydownを見てそうです。
neji-thon

2021/01/07 10:09

>Lhankor_Mhyさん 解決しました。 ありがとうございます。 >plasticgrammerさん いろいろご教示いただいて勉強になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問