pythonを使って自動化するときに非常に強力なツールとなるpyautogui。
以前pyautoguiの使い方についてご紹介しましたが、
この内容だけでも1記事にできるなと判断したので、
pyautoguiを起動させて中止できなくなった場合の復帰方法についてご紹介しようと思います。
pyautoguiは、マウスとキーボードをソフト上で制御するものです。
つまり、マウスとキーボードの制御が人間ではなくパソコン側にあります。
途中で中断したいときにパソコン側にマウスとキーボードの制御があると、
中断させることは困難になりますね。
少し使ってみるとわかりますが、
クリックの間隔は0.1秒以下なんという驚異的なスピードで連打することも可能です。
その操作をマウス操作で中断しようとしたら、
原理的には0.1秒以内に中止ボタンまで移動させてクリックする必要があります。
人間には無理ですね…
ちなみに1秒waitを入れているのがこの動画ですが、
この間隔の1/10のタイミングでマウスカーソルが制御されるイメージです。
そんな暴走モードのpyautoguiを止めてあげる方法について解説します。
pyautoguiでPCが制御不能になった時の復帰方法が理解できる。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
本ブログはアフィリエイトを用いた広告を掲載しています。
いきなり本題。pyautoguiを止める方法
さて、いきなりですが、もうpyautoguiを止める方法をお伝えします。
以前pyautoguiの紹介をした際にお伝えしましたが、
Ctrlキー+Altキー+Deleteキー
この3つのボタンを同時押しします。
以前pyautoguiの紹介をした記事はこちら↓↓↓
すると、このような画面になります。
この画面が出た段階で、
実はもうpython側でpyautoguiがこれ以上実行できなくなり、
エラーが出て止まります。
実際に試すとどうなるのか?
さて、実際にこの方法で無理やり中断した場合、
どのようなエラーとして止まるのでしょうか?
実際にこの方法を試すとこのようになります。↓↓
エラー内容を確認してみると、
fail-safeが発動したよ。というエラー内容です。
fail-safeの発動するトリガーについても記述があり、
マウスが画面の端に移動したときとのこと。
まさかとおもい、(0,0)に移動させたら同じエラーが出るのか確認してみました。
予想通りですね。
しっかりと同じエラーが出ました。
つまり、(0,0)の位置に何かクリックしたいものがあったとしても、
(1,1)など、完全に端をクリックさせるとfail-safeのトリガーを、
発動させない必要があるようですね。
ただ、このfail-safeを回避する方法もしっかりと記述されています。
それが、failsafeのプロパティをFalseに変更することでトリガーがかからないようです。
やってみましょう。
トリガー解除の方法ですが、
pyautogui.FAILSAFE = False
この一行を実際にpyautogui.clickなどする前に入れることで、
ここまで出ていたエラーが解除されます。
実際やってみると、エラーは出ず。
しっかりと画面の左上の端をクリックしてくれました。
ただしここで問題が発生します。
それが、冒頭でご紹介したCtrlキー+Altキー+Deleteキーで止まってくれなくなります。
つまり冒頭の対策方法が使えなくなります。
極端な話ですが、
無限ループでpyautogui.click(0,0)のみをwhileでもforでもいいですが、
ウェイト無しで実行した場合、再起動が必要になります。
再起動をするのはいいのですが、
それまでに編集していた何かのファイルが保存していなかった場合…
そのまま保存されずに消去されてしまいます…
ちょっとさすがに支障が出ますよね。
エラーの内容の中で、
このFAILSAFEをfalseにするのはオススメできませんよ。
という文言があるので、よい子はマネしないように。
そもそも(0,0)の位置や(100,0)など本当に端っこを
クリックしないといけないシチュエーションってほとんどないと思うんですよね。
右下のところで一括ウィンドウを最小化するというのはありますが、
それでも別に完全に端でなくても、1pxくらい左にずれていたって機能しますからね。
今回のまとめ
今回はpyautoguiに制御を取られて、
マウス・キーボードが使えなくなった場合の復帰方法でした。
fail-safe機能が入っているのはありがたいですね。
間違ってもfail-safe機能をfalseにするのはやめておいたほうがいいです。
デメリットはあってもメリットがほとんどありません。
デフォルトでは何も指定しなくてもfail-safeは機能しますから、
わざわざfalseにする人はいないような気もしますが…
途中で判明したことですが、標準状態では、端っこに指定はできないということも、
重要な内容でしたね。
何気なく使っていますが、しっかりと安全対策が取られていたということで、
安心してまた使っていけますね。
コメント