C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: Chromeの拡張機能を外部からコントロールする方法


(過去ログ 173 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■99824 / inTopicNo.1)  Chromeの拡張機能を外部からコントロールする方法
  
□投稿者/ くま (198回)-(2022/06/12(Sun) 08:29:40)

分類:[VB.NET/VB2005 以降] 

・対象
Chrome(64bit最新版)
・環境
vb.net .NET Framework 4.8 Windowsフォーム
・OS
Windows10
Windows7

・状況
今現在Chromeの拡張機能を使用して閲覧制限をかけている社内サイトがあります。
そのサイトはファイルサーバの役目もしていて普段のファイルのやり取りに使用しています。
便利になったのは良いのですが今度は「自動でアップできるようにしたい」との要望がありまして。

Chrome自体はSelenium等で自動操作できる事は分かっているのですが拡張機能となるとどうなんでしょう?

案1.Selenium(ChromeDriver)でコントロール
Chrome自体はできますが拡張機能もできる?(開けるところまでは確認)

案2.WebSocketでコントロール
拡張機能自体デバックできるので、WebSocket通信でコントロールできないか調査したのですが
対象ウインドウが何のポートで開いているのか?(そもそも開いている?)か不明の為却下。

案3.UIAutomationまたはMSAAでの操作
Windows10では項目取得できて成功したのですがWindows7では項目の取得ができなくて断念。
(inspect.exeで確認しても取得できませんでした)

案4.画像認証によるコントロール
ウインドウハンドルは取得できるのでそこから画像を取得し解析して処理を行う
ただChromeの拡張機能は開き方が2種類あって
 a.表示されているサイトから開くとウインドウタイトルありで表示される
 b.Chromeのツールバーから開くとウインドタイトルなしで表示される
またWindows10とWindows7でWindows自体のサイズが違ったりしてパターンを揃えられない。
(Windows11とWindows8は未調査)

現状しょうがなく案4.で進めていますが他にこんな方法が考えられるよ等ございましたら
教えていただきたく思います。

個人的には案3.でWindows7も項目が取得できる状態が一番良いかとは思っています。
引用返信 編集キー/
■99866 / inTopicNo.2)  Re[1]: Chromeの拡張機能を外部からコントロールする方法
□投稿者/ radian (47回)-(2022/06/13(Mon) 17:26:53)
2022/06/13(Mon) 17:39:57 編集(投稿者)

No99824 (くま さん) に返信
> 案2.WebSocketでコントロール
> 拡張機能自体デバックできるので、WebSocket通信でコントロールできないか調査したのですが
> 対象ウインドウが何のポートで開いているのか?(そもそも開いている?)か不明の為却下。

やりたい事の詳細は良く分かりませんが、
通信さえ出来れば解決するということであれば、
Native Messagingでどうにかなりそうな。
https://itc-engineering-blog.netlify.app/blogs/h06vi6tnar9i
引用返信 編集キー/
■99869 / inTopicNo.3)  Re[2]: Chromeの拡張機能を外部からコントロールする方法
□投稿者/ くま (199回)-(2022/06/14(Tue) 00:38:10)
No99866 (radian さん) に返信
> 2022/06/13(Mon) 17:39:57 編集(投稿者)
> Native Messagingでどうにかなりそうな。
今回の場合だと、
・外部プログラム→chrome拡張→外部プログラム
が行いたく

Native Messagingだと
・chrome拡張→外部プログラム→chrome拡張
の流れです。

chrome拡張には手を入れないで外部から操作したいという内容です。


引用返信 編集キー/
■99870 / inTopicNo.4)  Re[3]: Chromeの拡張機能を外部からコントロールする方法
□投稿者/ Azulean (1242回)-(2022/06/14(Tue) 06:53:26)
No99869 (くま さん) に返信
> 今回の場合だと、
> ・外部プログラム→chrome拡張→外部プログラム
> が行いたく
(略)
> chrome拡張には手を入れないで外部から操作したいという内容です。


Chrome 拡張が既知(ソースを知っている)で、右端の「外部プログラム」が Native Messaging によるコンソールアプリならば、自分でそのコンソールアプリ立ち上げて、JSON を標準入力で入力すればエミュレートできる気もしますが…。
引用返信 編集キー/
■99871 / inTopicNo.5)  Re[4]: Chromeの拡張機能を外部からコントロールする方法
□投稿者/ くま (200回)-(2022/06/14(Tue) 08:16:51)
2022/06/14(Tue) 08:42:09 編集(投稿者)
2022/06/14(Tue) 08:36:57 編集(投稿者)

No99870 (Azulean さん) に返信
> Native Messaging によるコンソールアプリならば、自分でそのコンソールアプリ立ち上げて、JSON を標準入力で入力すればエミュレートできる気もしますが…。

それって「Chrome拡張自体に特別な設定をしないでも外部操作からChrome拡張にアクセスするコンソールを立ち上げる事ができる」という意味ですか?
あとJSONで返せたとして「Chrome拡張側にそのような機能が備わっていない場合でも操作できる」のですか?

Chrome拡張側の動きをもう少し書いておくと
1.Chrome拡張を開くと「ユーザ」「パスワード」「確認ボタン」があって
「ユーザ」「パスワード」に入力後「確認ボタン」を押す。
2.ページが切り替わってメニューが表示されるので
その中の「自動実行ボタン」を押す。

実際にはもうちょっと複雑なのですが、
この動作を外部プログラムからの操作で行いたいという内容です

※Chrome拡張を開いたら無条件でNative Messagingを使ってプログラムを実行する事は仕様上NGとなっています。
引用返信 編集キー/
■99872 / inTopicNo.6)  Re[5]: Chromeの拡張機能を外部からコントロールする方法
□投稿者/ radian (48回)-(2022/06/14(Tue) 09:11:16)
> chrome拡張には手を入れないで外部から操作したいという内容です。

> ※Chrome拡張を開いたら無条件でNative Messagingを使ってプログラムを実行する事は仕様上NGとなっています。

そういう諸々制約があるなら、最初に書いておいて下さい。
拡張機能に手を入れられるかどうかも、書いてないと赤の他人には判らないので。
提案しても、後出しであれもダメこれもダメと言われても嫌なんで、自分は撤収します。
引用返信 編集キー/
■99873 / inTopicNo.7)  Re[6]: Chromeの拡張機能を外部からコントロールする方法
□投稿者/ くま (201回)-(2022/06/14(Tue) 09:47:21)
2022/06/14(Tue) 09:56:38 編集(投稿者)
2022/06/14(Tue) 09:49:12 編集(投稿者)

No99872 (radian さん) に返信
> そういう諸々制約があるなら、最初に書いておいて下さい。

大変失礼しました。提案されるまで「無条件でNative Messagingを使ってプログラムを実行」という手段に気が付きませんでした。
今回仕様の問題でNGなので追加させていただいた次第です。

一応自前のChrome拡張なのですが一切手を加えないで操作すると考えていただければ幸いです。

あと本来ならもう少し詳しい動きを記載したいのですが、セキュリティに関連するChrome拡張の為どうしてもすべて書き出す事ができません。ご了承下さい。
引用返信 編集キー/
■99874 / inTopicNo.8)  Re[5]: Chromeの拡張機能を外部からコントロールする方法
□投稿者/ Azulean (1243回)-(2022/06/14(Tue) 21:49:44)
2022/06/14(Tue) 22:01:06 編集(投稿者)

No99871 (くま さん) に返信
> それって「Chrome拡張自体に特別な設定をしないでも外部操作からChrome拡張にアクセスするコンソールを立ち上げる事ができる」という意味ですか?
> あとJSONで返せたとして「Chrome拡張側にそのような機能が備わっていない場合でも操作できる」のですか?

「外部プログラム→chrome拡張→外部プログラム」と記載されていましたよね。
左辺・右辺の「外部プログラム」はいずれもクライアントのプログラムであると仮定すると、右辺は Native Messaging のコンソールアプリケーションしかあり得ないので、先のコメントをしました。

この反応からすると、さらに左辺の外部プログラムで操作した結果を、画面上に反映したいという隠れた要望があるのですかね…?
(「アップロードを自動化したい」だけならその必要性はないので、追加要件に聞こえてしまう)

> Chrome拡張側の動きをもう少し書いておくと
> 1.Chrome拡張を開くと「ユーザ」「パスワード」「確認ボタン」があって
> 「ユーザ」「パスワード」に入力後「確認ボタン」を押す。
> 2.ページが切り替わってメニューが表示されるので
> その中の「自動実行ボタン」を押す。

この内容を素直に読むと、右辺は「外部プログラム」ではなく、「Web サイト」や「Web サービス」になりそうです。
少なくとも左辺の「外部プログラム」と意味は異なるように思えます。

それとも切り替わるページ自体が Chrome 拡張が提供する何かで、その操作結果を Native Messaging で飛ばしているのだろうか…?


このあたりは私のコメントを招いた要因と言うことで流してもらえれば。
この辺の事実関係は質問の主題とは関係ありませんので、議論しても仕方ないため。


> 実際にはもうちょっと複雑なのですが、
> この動作を外部プログラムからの操作で行いたいという内容です
>
> ※Chrome拡張を開いたら無条件でNative Messagingを使ってプログラムを実行する事は仕様上NGとなっています。

そもそも、Chrome 拡張はユーザー操作の改善・拡張であって、外部からプログラム制御するための仕組みではないので、「存在しないことを求めているのでは?」という印象です。
あったとしても、正道ではなく、変な方法しかないんじゃないかなぁ…。

(Selenium は Web サイトのテストが主用途でしょうし、Chrome 拡張を操作するシナリオは少ないんじゃないかなぁ)
引用返信 編集キー/
■99877 / inTopicNo.9)  Re[6]: Chromeの拡張機能を外部からコントロールする方法
□投稿者/ くま (202回)-(2022/06/15(Wed) 00:17:36)
No99874 (Azulean さん) に返信
> 2022/06/14(Tue) 22:01:06 編集(投稿者)
重ね重ねの説明ありがとうございます

> 左辺・右辺の「外部プログラム」はいずれもクライアントのプログラムであると仮定すると、右辺は Native Messaging のコンソールアプリケーションしかあり得ないので、先のコメントをしました。
なるほどそういう意味ですね。

私も「Native Messaging」をChrome拡張自身を先に開いておいて外部から命令を「Native Messaging」で定期的に取得という方法は提示していただくまで考えも及びませんでした。そのため不快な思いをされた方には深く謝罪したいと思います。

> そもそも、Chrome 拡張はユーザー操作の改善・拡張であって、外部からプログラム制御するための仕組みではないので、「存在しないことを求めているのでは?」という印象です。
> あったとしても、正道ではなく、変な方法しかないんじゃないかなぁ…。

無茶な質問だとは重々理解したおります。その中で考えたくれた方、回答していただいた方々に感謝を申し上げます。

ここからは駄文なので、読まなくても構いません。
ご指摘の通り正直私も今回の案件は無理だと思っている部分もあります。
というのも鍵の役割をしているChrome拡張を外部から操作したら意味がないですから。
この仕組みの導入自体紆余曲折がありまして、結果やっと導入になったのですが今度は便利だからって自動化の話に...
変に知識がある上司なのでこの様な話になっております。
ただ試行錯誤した結果無理ならば説得もできますが、私自身が知らない方法で操作する存在があり指摘されると問題になりますので
質問させていただいた次第です。

私自身はもう少し試してみますが質問としては解決済みとさせていただきます。
ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -