【python】mac下pyautogui实现文件上传

目录

1、上传文件使用包及对比
2、pyautogui安装(mac)及常用语法
3、mac下文件上传实践
4、遇到的问题

1、上传文件使用包及对比

常见的python支持的文件上传功能有win32gui,pyautogui,pywinauto 库,其中他们的对比如下表:
image.png

遇到跨平台时,使用pyautogui来实现;无平台限制均可选择;其他个性化如截图或者PC应用对应选择支持的库。

2、pyautogui安装及常用语法

2.1 pyautogui安装

2.1.1下载pyautogui离线包

(https://files.pythonhosted.org/packages/f0/76/7a0ec1013bc3559b7438f6773cba05ffaec600b8989be2d621a144e39b50/PyAutoGUI-0.9.53.tar.gz)

2.1.2依赖包安装顺序

①pyobjc-core
②pyobjc-framework-Quartz
③pyautogui

结合anaconda环境来安装离线包(https://www.jianshu.com/p/34760f355113?v=1667898666160 )

xxx@xxx-MacBook-Pro PyAutoGUI-0.9.33 % cd /Users/xxx/Downloads/PyAutoGUI-0.9.33/
xxx@xxx-MacBook-Pro PyAutoGUI-0.9.33 % python setup.py install

2.2 pyautogui常用语法

'''鼠标操作'''
pyautogui.scroll(-10) #它只接受一个整数,值为正则往上滚,值为负则往下滚
pyautogui.click(100,100)  #点击具体坐标
------------'''鼠标操作坐标获取'''----------------------
import time, os
import pyautogui as pag
try:
    while True:
        #print('Press Ctrl-C to end')
        x, y = pag.position() #返回鼠标的坐标
        print('Position : (%s, %s)' % (x, y)) # 打印坐标
        time.sleep(1) #每个1s中打印一次 , 并执行清屏
        os.system('cls') #执行系统清屏指令
 
except KeyboardInterrupt:
    print('end')
--------------------------------------------------------
pyautogui.click(button='right')  #右击
pyautogui.doubleClick()  #双击
pyautogui.moveTo(100,200,2) #移动,持续2s完成
pyautogui.dragTo(300, 400, 2, button='left') #拖拽
##################################################################
'''键盘操作'''
pyautogui.press('enter') # 按下并松开(轻敲)回车键
pyautogui.keyDown('shift') # 按下`shift`键
pyautogui.keyUp('shift') # 松开`shift`键
pyautogui.hotkey('ctrl', 'v')   #ctrl+v
pyautogui.typewrite('Hello world!', interval=0.2) # 每次输入间隔0.2秒,输入Hello world!

#################################################################
'''其他'''
screenWidth, screenHeight = pyautogui.size() # 屏幕尺寸
mouseX, mouseY = pyautogui.position() # 返回当前鼠标位置,注意坐标系统中左上方是(0, 0)
pyautogui.PAUSE = 1.5 # 每个函数执行后停顿1.5秒
pyautogui.screenshot('my_screenshot.png')

3、mac下文件上传实践

3.1 页面元素及实现方式

image.png
image.png

需要满足的点:
-WEB后台
-UI自动化需要在mac、win上支持
-前端通过button标签调起系统输入框,无法使用sendkeys()输入路径
最终选择pyautogui来实现

3.2 代码

    def uploadgui(self, filename):
 '''通过相对路径拼接文件完整路径'''
        parentDirectory="cases/Project/data"
        pra_path = os.path.abspath(os.curdir)
        filePath = os.path.join(pra_path, parentDirectory,filename)
        print(filePath)
        try:         
            pyautogui.press('shift') 
            pyautogui.typewrite(filePath,interval=0.2)
            time.sleep(2)
            pyautogui.press('enter')
            time.sleep(2)
            pyautogui.press('enter')
            time.sleep(5)
        except Exception as e:

            logging.log(e)
            e.args = ('上传文件操作异常',)
            raise  e
        else:
            return filePath

4、遇到的问题

4.1 mac传入的文件路径缺失

错误路径(缺失开头):
image.png

正确路径:finder内输入应该能指定到文件


image.png

原因:因为中文输入法导致,需要切换成英文

pyautogui.press('shift') 

4.2 mac传入的文件路径找不到

原因:typewrite()本身不支持中文,路径改为英文即可

你可能感兴趣的:(【python】mac下pyautogui实现文件上传)