pyautogui で特殊文字( : @ ^ )を自動入力したいとき 【Python】

programming Python

Python の pyautogui で特殊文字(コロン “:”、アットマーク “@”、ハットマーク “^”)の文字化けを修正する手順についてまとめておきます。pyautogui でのコロンの文字化けを修正する方法です。

以下の環境で動作確認をしています。
環境: Windows 10、Anaconda、Python 3.x、pyautogui をインストール済み。
(日本語版のパソコン、キーボードを想定しています。)

背景 ~ コロン “:” がアスタリスク “*” になる!

Python の pyautogui を使って、日ごろのパソコン作業の自動化を進めています。

pyautogui のデフォルトのままでも、標準的なアルファベット、数値等の自動入力は特に問題なく自動で動いています。
ところが、たとえば、pyautogui で、自動でブラウザを起動し、URL (“https://…”) をタイピングしようとすると、コロン “:” が、アスタリスク “*” に化けてしまいます。
他にも、アットマーク “@” がシングルクオーテーション ” ‘ ” に、ハット “^” がチルダ “~” に化けてしまいます。
3つの特殊文字(:, ^, @)については、(日本語キーボードでは)[shit]キーが押された状態となってしまい、うまく入力ができません。

文字列を自動入力する際、各方々が複数のサイトを探しまわらなければならないのも非効率な話です。そこで、関連する情報を一か所に集約し、公開しておくことにします。pyautogui のスクリプトを修正すると動きました。

手順

_pyautogui_win.py の場所の確認とバックアップ

① 以下のフォルダを開きます。(一例として)
C:\Users
② 「ユーザーの検索」となっている欄に、以下を入力し、検索を実行します。
_pyautogui_win.py
③ ファイルが見つかったら、ファイルを右クリック → 「ファイルの場所を開く」を選択します。
④ _pyautogui_win.py ファイルを右クリック → 「コピー」として、フォルダ内で右クリック → 「貼り付け」を選択し、ペーストします。(”_pyautogui_in – コピー.py” というファイル名でバックアップを取ります。)

スクリプトの修正

⑤ _pyautogui_win.py を右クリックし、「編集」を選択します。
⑥ スクリプトの中央あたりに def _keyDown(key): と定義された関数があるので、以下となるように修正(3行を追加)し、保存します。

修正前

    needsShift = pyautogui.isShiftCharacter(key)

修正後

    needsShift = pyautogui.isShiftCharacter(key)
    if key == '@': needsShift = False
    if key == '^': needsShift = False
    if key == ':': needsShift = False

→ これで完了です。

pyautogui でのキーボード入力のサンプルスクリプト

pyautogui でキーボード入力をするためのサンプルを挙げておきます。上記の特殊文字が正常に入力できるかどうか、動作確認ができます。
なお、スクリプトを実行すると、キーボードでの自動タイピングを行いますので、指定した画面座標 (x1, y1) = (10, 10) のあたり(画面左上から 10画素×10画素あたり)にメモ帳などを開いておいてください。うまく動いたら、スクリプトをアレンジしてみてください。

import pyautogui as pa1
x1 = 10 
y1 = 10
pa1.moveTo( x1, y1, 1 )
pa1.click()
str1 = ":@^ abcdefghijklmnopqrstu0123456789"
pa1.typewrite( str1, interval=0.25 )

まとめ

pyautogui でコロン、アットマーク、ハットの文字を入力する際の設定方法についてまとめました。
非USキーボードのいくつかの特殊文字では、[shift] キーが押された状態となってしまうため、”:” 等が “*” 等になってしまう、ということでした。
加えて、pyautogui を用いた文字入力のサンプルコードについてもまとめました。

pyautogui を使った自動化については、他にもスクリプトをまとめています。興味のある方は、関連リンクも参考にしてみてください。

関連リンク
・ 画面クリック、文字入力を自動化する 【Python & pyautogui】
・ キーコードとマウス座標を取得する 【Python】
・ 指定したエリアの画像を保存するソフトウェア 【Python】

外部リンク
・ https://github.com/asweigart/pyautogui/issues/46
※ 「キーボードのキーのいくつかについては [shift] キーが間違って押された状態となる。_pyautogui_win.py の指定箇所を修正した。そうしたところ、非USキーボードで生じる問題を解決することができた」とのことです。pyautogui では、非USキーボードは想定されていない(動作確認がされていない)といえそうです。

タイトルとURLをコピーしました