日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

有個(gè)朋友最近問(wèn)我有沒(méi)有推薦 GUI 桌面應(yīng)用自動(dòng)化的技術(shù),我只能回答他:

不好意思,這個(gè)真有,他是pyautogui。

主要有三大特征:

◆ 純純的 Python, 源碼一覽無(wú)余;

◆ 跨平臺(tái),linux, windows, mac 他都能上;

◆ 操作簡(jiǎn)單,會(huì)代碼就能上手。

Gui桌面應(yīng)用測(cè)試,沒(méi)有比這更簡(jiǎn)單上手的工具了

 

一、WeB自動(dòng)化文件上傳,不要太簡(jiǎn)單

熟悉web自動(dòng)化測(cè)試的大佬應(yīng)該都懂,當(dāng)采用js調(diào)用原生控件進(jìn)行文件上傳的時(shí)候,最常用的是使用 pywin32 等系統(tǒng)交互庫(kù)。

Gui桌面應(yīng)用測(cè)試,沒(méi)有比這更簡(jiǎn)單上手的工具了

 

當(dāng)看到pywin32那丑陋的api封裝只能爆粗口。

就為了輸入一個(gè)文件地址,需要整這么多莫名其妙的代碼(看不懂沒(méi)關(guān)系,只需要看代碼行數(shù)就夠了):

Gui桌面應(yīng)用測(cè)試,沒(méi)有比這更簡(jiǎn)單上手的工具了

 

我們來(lái)看看使用 pyautogui 多么簡(jiǎn)單:

#輸入文件名
pyautogui.write(r'd:demo.txt')
# 回車
pyautogui.press('enter', presses=2)

二、跨平臺(tái)的使用和安裝

上面的代碼在mac ,linux和windows上是通用的,只是在mac和linux下需要安裝額外的依賴。

windows安裝不需要其他依賴,直接使用了python自帶的ctypes模塊:

pip install pyautogui

mac安裝需要PyObjC模塊:

pip3 install pyobjc-core
pip3 install pyobjc
pip3 install pyautogui

linux需要依賴python3-Xlib或者python-xlib(python2):

pip3 install python3-xlib
pip3 install pyautogui

linux如果沒(méi)有安裝相關(guān)python庫(kù)可能會(huì)報(bào)錯(cuò)。

Debian系發(fā)行版(其他發(fā)行版自行了解)你可能需要輸入:

sudo apt-get install scrot
sudo apt-get install python3-tk
sudo apt-get install python3-dev

三、基于坐標(biāo)和圖像的設(shè)計(jì)哲學(xué)

pyautogui并不需要去解析各平臺(tái)的控件結(jié)構(gòu),他的元素定位都是基于坐標(biāo)的。

所以不論你是通過(guò)手工截圖測(cè)量,還是通過(guò)自動(dòng)化工具獲取,只要你能拿到坐標(biāo),你就能進(jìn)行元素操作。


鼠標(biāo)操作

1、獲取坐標(biāo)

import pyautogui as ui
# 獲取屏幕大小
size = ui.size()
# 獲取現(xiàn)在鼠標(biāo)位置
p = ui.position()
# 坐標(biāo)是否超出屏幕范圍
if_on = ui.onScreen(*p)

2、鼠標(biāo)移動(dòng)

ui.moveTo(x/2, y/2, duration=2, tween=easeInCirc)

參數(shù)說(shuō)明:

◆ x, y 坐標(biāo)

◆ duration 持續(xù)秒數(shù),默認(rèn)是瞬間完成

◆ tween 特效,一般沒(méi)什么用

3、鼠標(biāo)拖拽, 移動(dòng)到指定的坐標(biāo)

ui.dragTo(500, 500)

4、百發(fā)百中的射箭游戲

import random
import time
import pyautogui as ui

x, y = ui.position()
target = (800, 800)

for i in range(10):
 rand_x = random.randint(0, x)
 rand_y = random.randint(0, y)
 # 隨機(jī)生成位置
 print(rand_x, rand_y)
 ui.moveTo(rand_x, rand_y)
 # 移動(dòng)到目標(biāo)位置
 ui.dragTo(target, duration=0.2)
 time.sleep(1)

效果:

Gui桌面應(yīng)用測(cè)試,沒(méi)有比這更簡(jiǎn)單上手的工具了

 

5、相對(duì)移動(dòng)

ui.move(-500, duration=1)
ui.move(yOffset=-400, duration=1)
ui.move(500, duration=1)
ui.move(yOffset=400, duration=1)

相對(duì)移動(dòng)的小游戲:

start = 20
add_point = 10
duration = 0.5
for i in range(10):
 if i % 2 == 0:
 ui.drag(start, duration=duration)
 ui.drag(yOffset=start, duration=duration)
 else:
 ui.drag(-start, duration=duration)
 ui.drag(yOffset=-start, duration=duration)
 start += add_point

效果:

Gui桌面應(yīng)用測(cè)試,沒(méi)有比這更簡(jiǎn)單上手的工具了

 


6、點(diǎn)擊

ui.click(x=None,
 y=None,
 clicks=1, # 點(diǎn)擊次數(shù)
 interval=0.0, # 間隔時(shí)間
 button='right', # 右鍵
 duration=0.0) # 持續(xù)時(shí)間

通過(guò)click進(jìn)一步封裝了leftClick,rightClick,middleClick,doubleClicktripleClick

7、scroll

窗口滾動(dòng),但是封裝的滾動(dòng)感覺比較雞肋,他是以鼠標(biāo)點(diǎn)擊次數(shù)為單位的,所以不知道會(huì)滾動(dòng)到什么位置。

pyautogui.scroll(10) # 向上滾動(dòng) 10 個(gè) clicks
>>> pyautogui.scroll(-10) # # 向下滾動(dòng) 10 個(gè) clicks
>>> pyautogui.scroll(10, x=100, y=100) # 移動(dòng)到位置再滾動(dòng)

使用drag和dragTo會(huì)更加方便一點(diǎn),還是以坐標(biāo)為依據(jù),通過(guò)操作鼠標(biāo)中鍵來(lái)實(shí)現(xiàn)窗口滾動(dòng)。

比如這個(gè)例子是scroll和drag的對(duì)比:

x, y = ui.size()
ui.scroll(-100)
time.sleep(1)
ui.scroll(100)
time.sleep(1)
ui.dragTo(y=y, button='middle') # 滾動(dòng)到窗口底部

效果:

Gui桌面應(yīng)用測(cè)試,沒(méi)有比這更簡(jiǎn)單上手的工具了

 

鍵盤操作

1、輸入框輸入

# 輸入yuz, 每個(gè)字母時(shí)間間隔 0.2 s
pyautogui.write("yuz",interval=0.2)

注意:pyautogui 并不支持輸入框自動(dòng)聚焦,所有輸入之前先要點(diǎn)擊輸入框位置。

2、按下鍵盤 press

press('enter', presses=1, interval=0.0)

相當(dāng)于鼠標(biāo)操作的 click, 可以輸入鍵盤上的按鍵, 比如 shift 鍵,enter 鍵。

所有的按鍵可以查看源碼當(dāng)中的 KEYBOARD_KEYS 或者 KEY_NAMES。

參數(shù):

◆ presses, 操作按鍵次數(shù)

◆ interval, 每次按鍵的間隔時(shí)間

所有按鍵列表:

Gui桌面應(yīng)用測(cè)試,沒(méi)有比這更簡(jiǎn)單上手的工具了

 

3、熱鍵 hotkey

ui.hotkey('ctrl', 'shift', 'esc')

4、keyUp, keyDown

這是press的分解動(dòng)作,相當(dāng)于鼠標(biāo)的mouseUp和mouseDown。

上面熱鍵的操作方式可以分解成:

ui.keyDown('ctrl') # 按下 ctrl
ui.keyDown('shift') # 按下 shift
ui.keyDown('esc') # 按下 esc
ui.keyUp('esc') # 釋放 ctrl
ui.keyUp('shift') # 釋放 shift
ui.keyUp('ctrl') # 釋放 esc

圖像識(shí)別

坐標(biāo)定位這種方式為通用性打下了基礎(chǔ),讓pyautogui可以輕松做到跨平臺(tái)。

但是實(shí)際操作過(guò)程中很難清除的知道某個(gè)要操作的控件的確切位置,因?yàn)槊看未蜷_相同的頁(yè)面都有可能是變動(dòng)的。

pyautogui 給出的解決方案非常簡(jiǎn)單粗暴,使用圖像識(shí)別,返回在屏幕中的坐標(biāo)位置,在通過(guò)坐標(biāo)進(jìn)行處理。

1、locateCenterOnScreen

返回被識(shí)別圖像的中心坐標(biāo)。

參數(shù)說(shuō)明:

◆ 必傳參數(shù),圖片路徑;

◆ confidence, 識(shí)別精度,需要安裝 opencv 才能使用;

◆ grayscale, 灰度級(jí)別,能夠提升識(shí)別速度

locateCenterOnScreen('img/seven.png', confidence=0.7, grayscale=True)

現(xiàn)階段圖像識(shí)別的結(jié)果并不理想,基于圖像識(shí)別的使用還存在以下問(wèn)題:

◆ 識(shí)別不到指定元素;

◆ 識(shí)別精度不夠;

◆ 查找速度比較慢

◆ 需要用到重型的opencv庫(kù), 或許可以嘗試換用其他庫(kù)。

◆ 需要提前準(zhǔn)備被識(shí)別的圖片,如果操作元素多,手動(dòng)處理素材會(huì)懷疑人生。

所以u(píng)iautogui適合的場(chǎng)景是跨平臺(tái)的少量原生控件交互,如果要對(duì)原生應(yīng)用控件大量操作,還是換用其他工具比較合適。

基于圖像識(shí)別的具體例子:

import time
import pyautogui as ui

time.sleep(3)

seven = ui.locateCenterOnScreen('img/seven.png', confidence=0.7, grayscale=True)
mult = ui.locateCenterOnScreen('img/multipy.png', confidence=0.7, grayscale=True)
two = ui.locateCenterOnScreen('img/two.png', confidence=0.7, grayscale=True)
equal = ui.locateCenterOnScreen('img/equal.png', confidence=0.7, grayscale=True)

ui.click(*seven)
ui.click(*mult)
ui.click(*two)
ui.click(*equal)

效果:

Gui桌面應(yīng)用測(cè)試,沒(méi)有比這更簡(jiǎn)單上手的工具了

 

4、后期可以期待的

pyautogui現(xiàn)階段最欠缺的是無(wú)法獲取窗口。

但是可以通過(guò)PyGetWindow等工具進(jìn)行集成。

你可以通過(guò)官網(wǎng)roadmap和常見問(wèn)答查看今后的發(fā)展路徑。

本文由檸檬班雨澤老師原創(chuàng),轉(zhuǎn)載需注明出處!

分享到:
標(biāo)簽:桌面 Gui
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定