あなたが本当に調べていることが、他のアプリとのやり取りの仕方を独学するための良い言い訳であるなら、これは最善の方法ではないかもしれません. Web ブラウザーは厄介で、タイミングが予測できないなどです。つまり、非常に難しいタスクを引き受けたことになります。通常の方法 (サーバーと直接対話し、他のプログラムに触れることなく、テキストファイルを直接、など)。
ただし、他のアプリとやり取りしたい場合は、さまざまなアプローチがあり、対処する必要があるアプリの種類によって適切な方法が異なります。
一部のアプリは、外部から自動化されるように設計されています。Windows では、これはほとんどの場合、COM インターフェースを意味し、通常は IDispatch インターフェースを使用して、pywin32
の COM ラッパーを使用できます。ScriptingBridge
Mac では、またはappscript
;を使用する AppleEvent インターフェイスを意味します。他のプラットフォームでは、普遍的な標準はありません。IE (おそらく Chrome ではない) と Word の両方に、このようなインターフェイスがあります。
一部のアプリには非 GUI インターフェースがあります。これは、 で操作できるコマンド ラインであるpopen
か、 でロードできる DLL/SO/DYLIB ですctypes
。または、理想的には、他の誰かがすでに Python バインディングを作成しています。
一部のアプリには GUI しかなく、GUI の自動化を回避する方法はありません。これは、Windows で送信する WM_ メッセージを作成するpywin32
、Mac でアクセシビリティ API を使用するなどの低pywinauto
レベルで行うことができselenium
ます。特定のアプリを自動化するために構築されました。
したがって、これは、Chrome のセレンや Word の COM オートメーションから、すべての WM_ メッセージを自分で作成することまで、何でも行うことができます。これが学習演習を意図している場合、問題は、今日、これらのうちどれを学びたいかということです。
COMオートメーションから始めましょう。を使用するpywin32
と、ユーザーから GUI を制御したり、メニューやダイアログ ボックスをナビゲートする方法を理解したりする必要なく、アプリケーション独自のスクリプト インターフェイスに直接アクセスできます。これは、「Word マクロ」の記述の最新バージョンです。 Word 内ではなく外部スクリプトであり、VB で記述する必要はありませんが、見た目はかなり似ています。スクリプトの最後の部分は次のようになります。
word = win32com.client.dispatch('Word.Application')
word.Visible = True
doc = word.Documents.Add()
doc.Selection.TypeText(my_string)
doc.SaveAs(r'C:\TestFiles\TestDoc.doc')
Microsoft Word Scriptsを見ると、たくさんの例を見ることができます。ただし、VBScript で記述されていることに気付くかもしれません。チュートリアルを探してみると、それらはすべて VBScript (または古い VB) 用に書かれています。また、ほとんどのアプリのドキュメントは、VBScript (または VB、.NET、さらには低レベルの COM) 向けに書かれています。また、Python から COM オートメーションを使用するために私が知っているすべてのチュートリアル ( Quick Start to Client Side COM and Python など)、COM オートメーションについて既に知っていて、Python からそれを行う方法を知りたいだけの人向けに書かれています。Microsoft がすべての名前を変更し続けているという事実は、検索をさらに困難にしています。OLE オートメーション、ActiveX スクリプト、Windows Scripting House などをグーグルで検索することが、COM オートメーションについて学ぶことに何の関係があると思いますか? そのため、初心者に何をお勧めすればよいかわかりません。すべてのナンセンスを学べば、上記の例と同じくらい簡単だと約束できますが、その最初のハードルを乗り越える方法がわかりません。
とにかく、すべてのアプリケーションが自動化できるわけではありません。場合によっては、たとえそうであったとしても、GUI アクション (ユーザーが画面上でクリックするもの) を記述する方が、アプリのオブジェクト モデルの観点から考えるよりも簡単です。「3 番目の段落を選択する」を GUI 用語で説明するのは難しいですが、「ドキュメント全体を選択する」は簡単です。control-A を押すか、[編集] メニューから [すべて選択] に移動するだけです。GUI の自動化は、COM の自動化よりもはるかに困難です。なぜなら、Windows 自体がユーザー アクションを表すために送信するのと同じメッセージをアプリに送信する必要があるか (たとえば、「メニュー通知」を参照)、さらに悪いことに、「go (32 、4) 左上隅からピクセルをクリックし、マウスを 16 ピクセル下に移動し、もう一度クリックします」と言うと、「[ファイル] メニューを開いて、[新規] をクリックします」となります。
幸いなことに、pywinauto
両方の種類の GUI 自動化をまとめて、はるかに簡単にするようなツールがあります。swapy
そして、送信したいコマンドを理解するのに役立つツールがあります。Python に慣れていない場合は、 や のようなツールもAutoIt
あり、少なくともActions
使い始めたばかりのときは や を使用するよりも簡単です。このようにすると、スクリプトの最後の部分は次のようになります。swapy
pywinauto
word.Activate()
word.MenuSelect('File->New')
word.KeyStrokes(my_string)
word.MenuSelect('File->Save As')
word.Dialogs[-1].FindTextField('Filename').Select()
word.KeyStrokes(r'C:\TestFiles\TestDoc.doc')
word.Dialogs[-1].FindButton('OK').Click()
最後に、これらすべてのツールを使用しても、Web ブラウザーを自動化するのは非常に困難です。各 Web ページには、Windows コントロールではなく HTML である独自のメニューやボタンなどがあるためです。「マウスを 12 ピクセル動かす」というレベルまで行きたくない限り、これらを扱うのは非常に困難です。そこで、Windows GUIselenium
をスクリプト化するのと同じ方法で Web GUI をスクリプト化します。pywinauto