― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2010年2月22日(月) 21:27 
はじめまして、風魔と申します。

自作のアプリからFireFoxで表示したWebサイトのテキストボックスに自動で
文字列を入力する実装を考えています。
 ※ 例えば、googleの検索キーワード蘭に文字列を入力するなどの操作を
   自作のアプリから行いたいと考えています。

そこで2点質問があるのですが、
1. そもそも他のアプリからFireFoxで表示しているテキストボックスに
  向かって、入力操作を行うことは可能なのでしょうか?
2. もし、可能である場合、どのようなライブラリが必要なのでしょうか?
  (また、APIリファレンスが掲載されているサイトも教えていただけると助かります。)

なお、自作アプリは以下の環境で作成しています。

OS                    :Windows XP
IDE                    :VS 2005
言語                   :VC++
操作対象のFireFoxのバージョン :2.0以降。

以上、宜しくお願い致します。


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2010年2月22日(月) 22:45 
オフライン

登録日時: 2007年1月14日(日) 14:24
記事: 138
お住まい: Osaka,Japan
【1への回答】
 どう考えても正解ではないので念のため、というかこんな仕組みなら、はっきり言って自分なら使いたくないけど。
 汎用性を優先する場合なら、あまりいい設計とは思えませんが、ぱっと思いつくのは自作のバイナリXPCOMコンポーネントを含む拡張を作ることでしょうか。その拡張経由でXUL要素に文字列を流し込むような作りになるかと。
1.風魔さんのアプリケーションとFirefoxを連動させる拡張のインターフェースはWindowsのCOMを採用
2.風魔さんが作成することになるFirefox拡張のバイナリコンポーネントとFirefox本体のインターフェースはXPCOMを採用
3.風魔さんが作成することになるFirefox拡張のJavaScript側で、バイナリコンポーネントから受け取ったデータをテキストエリアなりXUL要素なりに流し込む
4.Firefoxのパフォーマンス低下を防ぐために、風魔さんが作成することになるFirefox拡張はFirefox本体とは別スレッドで動作するようにする
 この方法の最大の欠点はバイナリを拡張に同梱しないといけないことと、ポーリングが必要になるかもしれないこと、外部からデータを流し込む仕組みなのでそこがセキュリティ・ホールになる可能性が非常に強いことでしょうか。特に後者ふたつが致命的かと。とくにセキュリティに関して言及するなら、トロイをしかけてフィッシングを併用すれば攻撃し放題、という状況が生まれる危険性が非常に強いかと思います。

 あと思いつく別の方法としてはDrag&Dropをエミュレートするとか。まだこちらの方がDOMで完結する分マシな気がします。
 どちらにせよ、Firefoxはセキュリティ上、外部アプリケーション向けのAPIを持っていないので (Webや拡張用のAPIはありますが)、かなりの試行錯誤は必要かと思います。しかも試行錯誤の結果、恐くて使えないものになりそうな予感がします。


【2への回答】
 mozilla developer centerを読みましょう。あとFirefox自体をハックする必要もでてくるかと思います。


※ Google限定であれば、GoogleはGetリクエストで機能するので、単にFirefoxにクエリーを含むURLを渡して起動してやればいいだけのような。


# もっとましなアイディアがあるような気がします。
# もしくはそんな危険なことはやめておけという、より適切なアドバイスがあるかもしれません。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2010年2月23日(火) 00:04 
mitsuguさん、返信ありがとうございます。

言葉足らずで申し訳ありません。

やりたいことは、下記サイトで提供しているような
自動操作を実現したいと考えています。

【watir】
http://watir.com/installation/

IEの場合は、IEコンポーネントを使用すればできたので
FireFoxでも簡単にできるものだと考えていました。


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2010年2月23日(火) 06:52 
オフライン

登録日時: 2007年1月14日(日) 14:24
記事: 138
お住まい: Osaka,Japan
 以下単なる1ユーザである私の類推も含みます。ご注意ください。

 私の IE や Windows 環境へのこれまでの古い経験からの理解が間違ってなければ、IE は OS と密接に結び付いており、アプリケーション自体が COM コンポーネント、もしくは COM コンポーネントの塊であり、Excel、Word、Access と同様に ActiveX オブジェクトとして外部からコントロールできる、と理解しています。この理解が古すぎるとか、間違っていたらどなたか突っ込んでください。

 そして先に述べたようにセキュリティ上の理由により Firefox は外部アプリケーションへの API を提供していません。またFirefoxをCOMコンポーネント化する、ということはマルチプラットフォームであることを捨てることになるので、十中八九 Mozilla にとってそのような選択肢はあり得ないでしょう(外部の人間による推測です)。
 つまりFirefox自体をActiveXオブジェクトとして扱う方法はないはずです。ですからどうしても先に述べたような危険でトリッキーな方法を採らざるを得ません。というか外部と通信する IE を含むブラウザを COM コンポーネントとして 自在にコントロールするという発想自体が私には危険だと思います。

 外部アプリケーションからの Gecko へのアクセスは、XPCOM を経由することで可能かもしれませんが(これも要確認)、Gecko とその上部レイヤの Firefox にアクセスすることはまったく異ることですので、やはりFirefoxをオブジェクトとして扱うようなことはできないかと思います。

 ニーズは Web アプリケーションのテスト自動化と理解して良いですか?もしそうなら XULRunner でテスト・スウィートをつくった方がいいのでは、と思います。

# watir は Firefox に拡張をインストールすることで、Firefox を watir のテスティング・フレームワークに組み込んでいるようです。
# 利用シーンが限定的だと言うことでそのような仕組にしているのでしょう。
# ちなみにバイナリが含まれていましたが、githubにもそのソースを見つけることができませんでした。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2010年2月23日(火) 09:25 
オフライン
Moderator

登録日時: 2007年5月03日(木) 01:11
記事: 92
お住まい: 東京
Firefox上で自動操作というと、Selenium IDEという物もありますね。
https://addons.mozilla.org/ja/firefox/addon/2079


既にmitsuguさんが書かれていますが、FirefoxはXPCOMという独自のコンポーネントモデルで開発されています。
ですので、通常のCOM経由・ActiveX経由では内部にアクセスする事ができません。

また、汎用的に使える外部アプリケーションからアクセスするための口としては、コマンドライン引数の受け取りモジュールくらいしか用意されていません。任意のスクリプトを実行させるようなことは、Firefox本体だけではできません。

どうしてもそれをやりたいという場合、使いたいインターフェースに応じて、以下のようにFirefoxの中と外を繋ぐXPCOMコンポーネントを開発して、さらにそれをアドオンとしてFirefoxにインストールする必要があります。

他のアプリケーション
     ↑
(Firefoxの外側)
--------------
(Firefoxの内側)
     ↓
任意のインターフェースで外部と通信するための独自XPCOMコンポーネント
     ↑
     ↓
Firefox内のJavaScriptエンジンなど


例えば、インターフェースとしてソケット通信を使った例でMozReplという物があります。
一部の強まった開発者の人はこれを使ってFirefoxにtelnet接続して、テキストエディタでファイルを保存したらFirefox上でリロードのコマンドを発行する、という風な事をしていたりするようです。

http://hyperstruct.net/content/mozrepl
http://la.ma.la/blog/diary_200609280045.htm

他の例として、Norton Internet SecurityをWindowsにインストールしている場合にFirefoxに勝手にインストールされるNorton用アドオンも、Firefoxの外にあるNortonの主要コンポーネントとFirefoxの内側との間で通信するための役目を担っているものと思われます。


XPCOMコンポーネントの作り方はこの辺が参考になるのではないでしょうか。

http://d.hatena.ne.jp/cou929_la/20100221/1266735791
http://firefox.geckodev.org/index.php?X ... C%E6%88%90


また、「Firefoxを外部から操作する」のではなく「Firefoxの描画エンジンを自作アプリに組み込んで使う」ということでもよければ、XULRunnerに同梱されているActiveXコントロールを使う方法もあるようです。

http://www.atmarkit.co.jp/fdotnet/dotne ... rctrl.html


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2010年2月24日(水) 00:30 
mitsuguさん、Piroさんありがとうございます。
また、返信が遅れて申し訳ありませんでした。

> ニーズは Web アプリケーションのテスト自動化と理解して良いですか?

はい、テストを自動で行いたいと考えていました。

アドオンを使わないことを考えていましたが、無理そうですね。
2人に意見を参考にアプリの仕様を検討したいと思います。

また、何かありましたら宜しくお願い致します。


通報する
ページトップ
  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 6 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[9人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean