はじめに
初めまして。今回、初めて記事を投稿させていただきます。
Qiita初心者のからくりです。
仕事で暇な合間を見つけて個人開発をやっています。
今回はPythonでRPAツールを作成してみました。
開発したプログラムの紹介
画面操作した内容がCSVに記録され、実行時はCSVを読み込んで同じ操作が自動で行われます。
ダウンロードして実行することができます。
良ければ使ってみてください。
使い道
操作を記録して同じ操作を再現するため、条件によって操作が変化するような作業には向きません。
いつも入力する内容が同じだったり、ボタンクリックする単純な操作、操作手順が固定化されている場合にお勧めです。
機能について
今回開発したプログラム「RPAツール」には以下の機能があります。
1.画面操作の記録機能
画面操作をCSVに記録します。
2.画面操作の自動実行機能
CSVを読み込み、画面操作を自動で行います。
3.操作間隔の再現機能
記録した操作の間隔を再現することができます。
ブラウザ等の表示の読み込みに時間がかかる場合に有効です。
4.マウスポインタ移動の再現機能
記録したマウスポインタの移動を再現することができます。
お絵描き等の細かい動きを再現することができます。
5.対応操作
- マウスポインタ移動
- 左クリック
- 右クリック
- ダブルクリック
- ドラッグ
- スクロール
- キー入力
- テンキー入力
- 半角/全角の切替
- ショートカットキー(Ctrl + A, Ctrl + C, Ctrl + V, Ctrl + X, Ctrl + Y, Ctrl + Z, その他)
注意点
- 半角/全角の切替は実行時に記録前の状態に合わせる必要があります。
- スクロール量はPCやマウスで異なるため、スクロール量を調整する必要があります。
- ダブルクリックの判定はプログラムで制御しているため、条件に合わなければ正しく実行されない可能性があります。(1回目と2回目のクリック間隔が0.01秒以上0.3秒未満)
- 記録された位置に対して操作を行うため、記録時のディスプレイと画面サイズが異なる場合、フォルダ追加やソートで順番が変わる場合は、変更しないようにするか再度記録し直して下さい。
- OSの仕様により、ブラウザやエクスプローラの表示位置が毎回異なる可能性があるため、拡大表示して位置を統一化することをおすすめします。
- 操作が正しく行われない場合、CSVを編集して実行していただくことも可能です。
- 万が一、実行中に画面が固まる場合や落ちてしまう場合は、タスクが残っている可能性があるため、タスクマネージャーから「RPAツール.exe」を終了してください。
使用したライブラリ
開発して思ったこと
開発期間は約2週間程度です。
どのレベルまで操作を可能にするかによって開発工数もだいぶ伸びてしまうので妥協するか悩みました。
なんとか、ほとんどの操作を自動化できるレベルに持っていけたのではないかと思います。
いくつか躓いた点がありましたので共有したいと思います。
pynputでダブルクリックが検知できない。
pynputではダブルクリックがシングルクリック2回として判定されるため、条件を設定してダブルクリックを再現しました。
pynputで検知した全てのキーが文字列を返してくれるわけではない。
pynputのキー入力検知は、基本的に文字列を返してくれますが、一部の特殊キー、テンキー、ショートカットキーの入力はキーコードで返されたりするため、変換する必要がありました。
pynputでスクロール量が検知できない。
pynputではスクロール方向は検知できますが、どのくらいスクロールしたのかを数値化することはできないため、画面で設定できるようにしました。
半角/全角の入力が難しい
pyautoguiでは半角/全角キー押下することはできます。
ただし、全角文字は全角入力、半角文字は半角入力といった指定はできません。
試行錯誤してみましたが、結局、ユーザー側で記録前と実行前に半角/全角キーを統一するようにしてもらうことで対応しました。
GUIアプリは画面が固まる
GUIアプリの場合、処理の長いプログラムは画面が固まるため、非同期処理にする必要がありました。
表示位置が変わると正しく動作しない
記録された位置に対して操作が行われるため、PCやディスプレイの変更で表示位置が変わったり、ウインドウの表示位置が変わったり、ソートでファイルの位置が変わったりすると正しく操作が行われません。
対策として、PCやディスプレイが異なる度に記録するか、ウインドウサイズを拡大表示して統一するようにしてください。
条件による操作
同じ操作を再現するプログラムのため、ポップアップが出たりすると操作が正しく行われない可能性があります。
ポップアップが出たら閉じる等、条件指定できるようになればより自由度の高いツールにできそうです。
(pyautoguiで画像認識しクリックする操作もあります。)
まとめ
個人開発で作成したプログラム「RPAツール」を紹介させていただきました。
まだまだ課題は残りますが、良いアイディアが浮かべば改良していきたいと思います。
個人開発をし始めて歴が浅いため未熟ではありますが、今後開発したいものがまだまだありますのでアップしていきたいと思います。
また、ブログに個人開発で作成したプログラムや記事を載せていますので、よろしければ閲覧お願いいたします。
不具合や要望などありましたら、コメントもしくはブログのお問い合わせから連絡していただけると幸いです。