zoukankan      html  css  js  c++  java
  • selenium上传文件

    测试链接:http://www.sahitest.com/demo/php/fileUpload.htm

    1.第一种形式:

      input输入框上传文件:可以理解为普通的输入框输入,我们只要传入文件路径即可。

    #普通input框上传文件
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('http://sahitest.com/demo/php/fileUpload.htm')
    upload = driver.find_element_by_id('file')
    upload.send_keys(r'C:Usersxibo.zhuworkmyselfmyProjectdatapicture	est_picture.png')  # send_keys
    print(upload.get_attribute('value') ) # check value
    driver.quit()

    2.第二种形式

      非input型上传:

    大体上有以下几种解决方案:
     1.autoIT,借助外力,我们去调用其生成的au3或exe文件。
     2.Python pywin32库,识别对话框句柄,进而操作
     3.SendKeys库
     4.keybd_event,跟3类似,不过是模拟按键,ctrl+a,ctrl+c, ctrl+v… 

    2.win32gui

    1 首先安装pywin32库(命令:pip install pywin32)

    from selenium import webdriver
    import win32gui
    import win32con
    import time
    
    dr = webdriver.Chrome()
    dr.get('http://localhost/test/fileupload.html')
    upload = dr.find_element_by_id('file')
    upload.click()
    time.sleep(1)
    
    
    def upload_file(filepath,multiple=None):
    
        '''
        非input输入框文件上传
        :param filepath: 上传文件的路径,如果传多个文件,文件路径格式为 '"d:\baidu.py" "d:\upload.py" "d:\1.html"'  中间用空格隔开
        :param multiple: 是否传递多个文件,默认传一个文件
        :return:
        '''
        try:
            # win32gui
            dialog = win32gui.FindWindow('#32770', '文件上传')  # 对话框
            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
            if multiple==None:
                win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, filepath)  # 往输入框输入绝对地址
                win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 按button
            else:
                win32gui.SendMessage(Edit, win32con.WM_SETTEXT, 0, filepath)  # 往输入框输入绝对地址
                win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 按button
            return True
        except Exception as e:
            return False

    3.# 对于非 input 标签实现的上传功能,我们通过模拟键盘敲击的方式实现

    注意:1:文件路径过长的话,可能出现路径输入不全。 2:该方法不太稳定。

    # 对于非 input 标签实现的上传功能,我们通过模拟键盘敲击的方式实现
    
    # 触发文件上传的功能
    driver.find_element_by_css_selector("figure.icon").click()
    time.sleep(3)
    
    # 模拟键盘敲击,会不管不顾的敲击,只要代码运行到这里,就敲
    sh = win32com.client.Dispatch("WScript.shell")
    sh.Sendkeys("D:\UserslenovoPycharmProjectsscriptstudyseleniumStuday4ele.png
    ")
    
    # 注意:代码运行过程不要操作鼠标
    # 输入法要保持英文输入的状态

    具体见链接:https://www.jb51.net/article/92678.htm

  • 相关阅读:
    模式识别 之 BP算法
    仪器开发 之 DICOM 三维重建 HPP
    模式识别 之 BP算法 (二)
    病理分析 之 细胞分析
    脉搏血氧仪 之 算法原理
    模式识别 之 初学
    机器学习 之 模糊神经(失败总结)
    冲刺第二天
    冲刺第三天
    团队项目计划
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/14172153.html
Copyright © 2011-2022 走看看