selenium自动化-上传文件和下载文件


之前在项目中有遇到上传文件和下载文件操作,再此整理记录一下,便于以后查找

下载文件

  • 由于手动下载文件时可能会选择文件存储路径(和浏览器的下载设置有关),为了避免这种情况,可设置下载文件的默认存储地址,将文件自动下载到设置的目录
  • 以下是chrome浏览器的实现:
def download_file(url,loc):
'''
url:访问的url地址
loc:下载按钮元素
'''
    option = webdriver.ChromeOptions()
    # 获取当前工作路径
    cwd=os.getcwd()
    wpath = path.join(cwd,"download")  #当前工作路径下的download文件夹
    if not path.exists(wpath): 判断是否存在此目录,不存在则创建
        os.makedirs(wpath)
    profile = {'profile.default_content_settings.popups': 0, 'download.default_directory': wpath} #设置下载文件的默认路径
    option.add_experimental_option('prefs', profile)
    driver = webdriver.Chrome(options=option)
    driver.get(url)
    downFileEle=driver.find_element(*loc) #获取下载按钮元素
    downFileEle.click()  #进行点击下载
    driver.quit()

上传文件

  • 上传文件会涉及到打开windows选择文件,比较通用的方式是通过autoIT和pywin32实现
  • 对于上传标签是input的话,直接用send_keys(“文件路径”)更方便
  • 对于autoIt需要生成exe文件,然后调用执行,因此对于上传这个操作是否操作完成不太可控

input标签,send_keys上传文件

  • 找到上传按钮的input标签,然后send_keys(“文件”)

    file="d:\sc.exe"  #需要上传文件在本地存放的路径
    upload = driver.find_element(By.XPATH,'//input[@type="file"]') #定位上传控件
    upload.send_keys(file)  
    

autoIT

autoIT可以操作windows gui,用basic语法编写

  • 安装autoIT后在其编辑器中编写上传的代码

    ;等待窗口打开
    WinWait("CLASS:#32770]","",5)
    ;识别windows窗口
    ControlFocus("打开","","Edit1")
    ;想输入框中输入需要上传的地址
    ControlSetText("打开", "", "Edit1", "d:\sc.exe")
    Sleep(2000)
    ;点击[打开】按钮
    ControlClick("打开", "","Button1");
    
  • 在autoit的编辑器中tools->go运行查看是否编写的是否正确

  • 点击tools->complie在脚本同目录下会编译成exe文件,使用os.system()执行文件即可

 file="d:\sc.exe"  #上传操作编译后的exe文件
 upload = driver.find_element(*loc) #定位到上传按钮
 upload.click() # 打开文件选择框
 os.system(file)

win32

需要先通过pip install pywin32来安装pywin32模块,来操作windows gui,实现上传文件操作

  • 上传文件代码

    import win32gui
    import win32con
    upload = driver.find_element(*loc)  #定位上传按钮
    upload.click()   #打开上传文件的选择框
    time.sleep(1)
    dialog = win32gui.FindWindow('#32770', u'打开')  # 选择文件对话框
    ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
    ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
    Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)  # 依次找到窗口,输入框Edit对象的句柄
    button = win32gui.FindWindowEx(dialog, 0, 'Button', None)  # 确定按钮Button
    win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, file)  #输入框输入文件的绝对地址
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 按button
    
  • 通过winspy++找到窗口层级关系,如图所示
    在这里插入图片描述

  • winspy++下载后直接运行exe文件即可不需要安装
    选中按钮后,点击右下角的locate即可查看到层级关系
    操作方法

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值