ホームページ  >  記事  >  バックエンド開発  >  Python自動操作GUIアーティファクト——PyAutoGUI

Python自動操作GUIアーティファクト——PyAutoGUI

PHPz
PHPz転載
2023-04-11 22:13:082013ブラウズ

Python自動操作GUIアーティファクト——PyAutoGUI

Python を使用してブラウザーでのページ操作を自動化する方法については以前に説明しましたが、どの方法を使用する場合でも、対応する操作はページ上の要素を配置することによって実行されます。

今日は、デスクトップ上の操作を自動化する方法について説明します。ブラウザーのページ オートメーションの操作と同様に、desktop automation の操作でも、デスクトップ上のマウスの位置を特定し、その位置に基づいて対応する操作を実行する必要があります。

GUI コントロール アーティファクト

今日の主役は pyautogui です。pyautogui は純粋な Python GUI 自動化ツールで、プログラムが一連のマウスとキーボードの操作を自動的に制御して自動テストを実現できるようにします。目標の。

このモジュールのインストールも通常と同じです:

  • pip3 install pyautogui

インストール後すぐに使用できます。

マウス操作

マウスの動き

最も基本的なデスクトップ操作はマウス操作であり、マウスの動きを制御できます:

# 移动鼠标
pyautogui.moveTo(200,400,duration=2)
pyautogui.moveRel(200,500,duration=2)

デスクトップ全体左上隅が座標軸の原点となり、すべての操作はこの原点を使用して操作位置を決定します。

コードの最初の行は、指定されたピクセル (200,400) の位置にマウスを移動し、コードの 2 行目は、現在のポイントに従ってマウスを右に 200 ピクセル、下に 400 ピクセル移動します。

両方のコード行には共通のパラメータ継続時間があり、このパラメータは移動時間を表す、つまり指定された時間内に移動操作が完了することを表し、単位は秒です。

これらの 2 行のコードを実行して、画面マウスの変化を観察してください。驚くべきことではないでしょうか?

マウスの位置も取得できます:

print(pyautogui.position())

これは理解するのが簡単で、現在の画面内のマウスの座標位置を取得することです。このコード行を実行することで、次のような情報が取得されます。

  • Point(x=400, y=900)

マウス クリック

通常、マウスには 2 つあります。左右にボタン アドバンストポイントマウス 中央にもボタンがあります。

私のマウスにはボタンが 2 つしかなく、真ん中にボタンがありません。残念ながら ~

Python自動操作GUIアーティファクト——PyAutoGUI

pyautogui にはこれら 3 つのボタン操作に対応する処理があります:

# 鼠标点击,默认左键
pyautogui.click(100,100)
# 单击左键
pyautogui.click(100,100,button='left')
# 单击右键
pyautogui.click(100,300,button='right')
# 单击中间
pyautogui.click(100,300,button='middle')

マウス クリック、ボタン パラメーターが指定されていない場合、デフォルトでは左ボタンをクリックします。最初の 2 つのパラメーターはクリック座標の位置です。

このコードを実行するとデスクトップに何が起こるか見てみましょう?

マウスにはクリック操作の他にダブルクリック操作もあります:

# 双击左键
pyautogui.doubleClick(10,10)
# 双击右键
pyautogui.rightClick(10,10)
# 双击中键
pyautogui.middleClick(10,10)

操作機能も非常にシンプルで、誰でも一目で理解できると思います。一目見ただけではわかりませんので、もう少し見てください。

フロントエンドに詳しい友人は、マウス操作には押したり放したりするプロセスが含まれており、画面操作にも対応するコントロールがあるとすぐに考えるかもしれません。

# 鼠标按下
pyautogui.mouseDown()
# 鼠标释放
pyautogui.mouseUp()

マウス ドラッグ

マウスを制御して指定した座標位置にドラッグし、操作時間を設定できます。

pyautogui.dragTo(100,300,duration=1)

この操作効果は前の動きと似ています。

これまでの移動経験に基づいて、次の方向にもマウスをドラッグします。

pyautogui.dragRel(100,300,duration=4)

マウス スクロール

デスクトップ操作では、マウスをスクロールする必要がある場合があります。

pyautogui.scroll(30000)

パラメータは整数で、上または下にスクロールする単位を示します。この単位はオペレーティング システムによって異なる場合があります。 。上にスクロールする場合は正の整数を渡し、下にスクロールする場合は負の整数を渡します。

画面処理

スクリーンショットの取得

まず、次のようなシナリオを想定してみましょう。今、画面上の赤い点を見つけたいのですが、どうしますか?通常のアプローチは、赤い点の色の値を取得し、それが見つかるまで画面上の点を 1 つずつ比較することです。

pyautogui は、操作シナリオのサポートを提供します。これら 3 つのことを完了するために 3 つの関数があります。

im = pyautogui.screenshot()
im.save('screenshot.png')
rgb = im.getpixel((100, 500))
print(rgb)
match = pyautogui.pixelMatchesColor(500,500,(12,120,400))
print(match)

1 つ目は、枕画像オブジェクトを返すことができるスクリーンショット関数を取得することです。2 つ目は、スクリーンショット内の指定された座標点の色を取得し、RGB カラー値を返すことです。3 つ目は、指定 座標点の色とターゲットの色を比較し、ブール値を返します。

要件を再度アップグレードしてみましょう:

画面上でエッジ ブラウザのアイコンを見つけたいのですが、どうしますか?

通常のアプローチは、まず Edge ブラウザのアイコンがどのようなものであるか (緑か青か、太いか細いか) を知ることです。次に、ターゲット アイコンと同じアイコンが見つかるまで画面上のアイコンを照合し、結果を取得します。

したがって、私たちのコードは次のとおりです:

# 图像识别(一个)
oneLocation = pyautogui.locateOnScreen('1.png')
print(oneLocation)
# 图像识别(多个)
allLocation = pyautogui.locateAllOnScreen('1.png')
print(list(allLocation))

デスクトップ上のアプリケーションのアイコンをインターセプトし、画像として保存し、上記のコード行を使用してそれを識別できます。識別は成功しました。次のような結果が返されます:

Box(left=20, top=89, width=33, height=34)
[Box(left=20, top=89, width=33, height=34)]

これは、デスクトップ上の画像の場所です。画像が見つからない場合は、None が返されます。

キーボード入力

キーボード機能

キーボード入力には、次の一般的に使用される機能があります:

  • keyDown():模拟按键按下
  • keyUP():模拟按键松开
  • press():模拟一次按键过程,即 keyDown 和 keyUP 的组合
  • typewrite():模拟键盘输出内容

举个例子,大家平时输入感叹号(!)是怎么操作键盘的?

按住 shift 按键,然后再按住 1 按键,就可以了。用 pyautogui 控制就是:

pyautogui.keyDown('shift')
pyautogui.press('1')
pyautogui.keyUp('shift')

运行上面的代码,如果你的鼠标是放在编辑框中,你会得到一个感叹号!

我们还可以直接输出内容:

pyautogui.typewrite('python', 1)

第一个参数是输出的内容,第二个参数是间隔时间,单位是秒。

运行上面代码,你的编辑器里面就会每隔1秒钟按顺序输出 python 的6个字母。

特殊符号

有时我们需要输入键盘的一些特殊的符号按键,比如 换行、方向键等,这些有相对应的键盘字符串表示:

pyautogui.typewrite(['p','y','t','h','o','n','enter'])

运行上面代码,编辑器里面就会输出 python 之后换行。

其他特殊按键对应的字符串请参考官方说明。

快捷键

如果我要复制一个内容,大部分情况下会使用快键键 ctrl + c,按照上面讲的,我们应该这么实现:

pyautogui.keyDown('ctrl')
pyautogui.keyDown('c')
pyautogui.keyUp('c')
pyautogui.keyUp('ctrl')

这样写起来很麻烦,而且需要掌控按键的按下和释放的顺序。

pyautogui 为我们提供了一个快捷的函数:

pyautogui.hotkey('ctrl','c')

实现的效果和上面的4行代码相同。

信息框

当你在模拟一个桌面操作的时候,如果有分支操作需要根据实际情况来判断,你是不是需要有一个地方可以让你选择走哪个分支?

pyautogui 贴心地考虑到了这种情况,你可以通过弹出一个选择框来中断当前的操作,选择操作分支。

way = pyautogui.confirm('领导,该走哪条路?', buttons=['农村路', '水路', '陆路'])
print(way)

这里就是我们 HTML 页面的 confirm 选择框,选择了选项之后,我们可以获取到选择的选项,然后基于这个选项做判断,进入相应的操作分支。

除了选择确认框之外,还有其他一些提示信息框:

# 警告框
alert = pyautogui.alert(text='警告!敌军来袭!', title='警告框')
print(alert)
# 密码框
password = pyautogui.password('请输入密码')
print(password)
# 普通输入框
input = pyautogui.prompt('请输入指令:')
print(input)

总结

pyautogui 的基本知识就给大家介绍到这里,这个 python 模块的功能十分强大,函数都非常简单,对 python 初学者比较友好。学了这些基本知识之后,你可以运用这些基本知识的组合,去实现一些有趣的桌面自动化操作,快去尝试一把吧!

知识在于分享,转发这篇文章,让更多的人看到~

以上がPython自動操作GUIアーティファクト——PyAutoGUIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。