FFFT

主にwebプロダクト開発に関連する話をつらつらと

pyautoguiで変数に持っている値をフォームに入力させる

自作でRPAを開発する際に、よく使われるpyautogui。
クロスプラットフォームで動作するGUIオートメーションのPythonモジュールです。
「ある箇所をダブルクリックする」「キーボードでEnterキーを押す」など人間がPCを触って行うGUI操作と近いことをプログラムで実現できます。

github.com

先日、APIから渡ってきたデータをあるソフトウェアのテキストフォームに入力したいというシーンがありました。
puautoguiはあくまでGUI操作のモジュールであり、例えば「こんにちは」と入力したい場合、愚直にGUI操作で行おうとすると下記のようになってしまう。

  1. かな全角入力に切り替える(自分の環境では「Command + Space」で切り替わるようにしているので「Command + Space」を押すプログラムを書く)
  2. キーボードの「k」を押す
  3. キーボードの「o」を押す
  4. キーボードの「n」を押す
    .....

上記のように、非常にえぐいプログラムを書くことになる。
「こんにちは」ならまだなんとかなりそうだが、「斎藤」など漢字変換が入るともはや再現は不可能でしょう。。。
そもそも、すでにある値をキーボード操作で入力させるための因数分解のような超コストがかかるプログラムを考える必要がありますが、非現実的です。むり。

そこで、クリップボードを利用して変数で持っている値をフォームに入力させます。

import pyautogui as gui
import pyperclip

def input_text(value):
    pyperclip.copy(value)
    gui.hotkey("ctrl", "v")

カーソルが対象のテキストフォームに当たっている状態で、上記の関数を実行すればOK。
GUI操作を自動化させてるPCで他の作業をすることはないと思いますが、クリップボードを使うので、RPAのプログラム実行中のPCで他の作業をすると予期せぬ値がフォームに入力されるリスクがあります。ご注意を。