zoukankan      html  css  js  c++  java
  • python selenium +autoit实现文件上传 --实践

    upload.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <form action="doAction2.php"  method="post" enctype="multipart/form-data">
    <!--<input type= "hidden" name="MAX_FILE_SIZE" value='10000000024' /> -->
    请选择您要上传的文件:
    <!--<input type='file' name='myFile' accept="image/jpeg,image/gif,image/png"/> -->
    <input type='file' name='myFile' />
    <br />
    <input type="submit" id="upload" "value="upload" />
    </form>
    
    
    </body>
    </html>

    doAction2.php

    <?php   
    header('content-type:text/html;charset=utf-8');  
    require_once 'upload2.class.php'; 
    //print_r($_FILES);
    $upload=new upload('myFile','imooc');  
    $dest=$upload->uploadFile();  
    echo $dest; 
    ?>

    upload2.class.php

    <?php   
    class upload{  
        protected $fileName;  
        protected $maxSize;  
        protected $allowMime;  
        protected $allowExt;  
        protected $uploadPath;  
        protected $imgFlag;  
        protected $fileInfo;  
        protected $error;  
        protected $ext;  
        /** 
         * @param string $fileName 
         * @param string $uploadPath 
         * @param string $imgFlag 
         * @param number $maxSize 
         * @param array $allowExt 
         * @param array $allowMime 
         */  
        public function __construct($fileName='myFile',$uploadPath='./uploads',$imgFlag=true,$maxSize=5242880,$allowExt=array('jpeg','jpg','png','gif'),$allowMime=array('image/jpeg','image/png','image/gif')){  
            $this->fileName=$fileName;  
            $this->maxSize=$maxSize;  
            $this->allowMime=$allowMime;  
            $this->allowExt=$allowExt;  
            $this->uploadPath=$uploadPath;  
            $this->imgFlag=$imgFlag;  
            $this->fileInfo=$_FILES[$this->fileName];  
        }  
        /** 
         * 检测上传文件是否出错 
         * @return boolean 
         */  
        protected function checkError(){  
            if(!is_null($this->fileInfo)){  
                if($this->fileInfo['error']>0){  
                    switch($this->fileInfo['error']){  
                        case 1:  
                            $this->error='超过了PHP配置文件中upload_max_filesize选项的值';  
                            break;  
                        case 2:  
                            $this->error='超过了表单中MAX_FILE_SIZE设置的值';  
                            break;  
                        case 3:  
                            $this->error='文件部分被上传';  
                            break;  
                        case 4:  
                            $this->error='没有选择上传文件';  
                            break;  
                        case 6:  
                            $this->error='没有找到临时目录';  
                            break;  
                        case 7:  
                            $this->error='文件不可写';  
                            break;  
                        case 8:  
                            $this->error='由于PHP的扩展程序中断文件上传';  
                            break;  
                              
                    }  
                    return false;  
                }else{  
                    return true;  
                }  
            }else{  
                $this->error='文件上传出错';  
                return false;  
            }  
        }  
        /** 
         * 检测上传文件的大小 
         * @return boolean 
         */  
        protected function checkSize(){  
            if($this->fileInfo['size']>$this->maxSize){  
                $this->error='上传文件过大';  
                return false;  
            }  
            return true;  
        }  
        /** 
         * 检测扩展名 
         * @return boolean 
         */  
        protected function checkExt(){  
            $this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION));  
            if(!in_array($this->ext,$this->allowExt)){  
                $this->error='不允许的扩展名';  
                return false;  
            }  
            return true;  
        }  
        /** 
         * 检测文件的类型 
         * @return boolean 
         */  
        protected function checkMime(){  
            if(!in_array($this->fileInfo['type'],$this->allowMime)){  
                $this->error='不允许的文件类型';  
                return false;  
            }  
            return true;  
        }  
        /** 
         * 检测是否是真实图片 
         * @return boolean 
         */  
        protected function checkTrueImg(){  
            if($this->imgFlag){  
                if(!@getimagesize($this->fileInfo['tmp_name'])){  
                    $this->error='不是真实图片';  
                    return false;  
                }  
                return true;  
            }  
        }  
        /** 
         * 检测是否通过HTTP POST方式上传上来的 
         * @return boolean 
         */  
        protected function checkHTTPPost(){  
            if(!is_uploaded_file($this->fileInfo['tmp_name'])){  
                $this->error='文件不是通过HTTP POST方式上传上来的';  
                return false;  
            }  
            return true;  
        }  
        /** 
         *显示错误  
         */  
        protected function showError(){  
            exit('<span style="color:red">'.$this->error.'</span>');  
        }  
        /** 
         * 检测目录不存在则创建 
         */  
        protected function checkUploadPath(){  
            if(!file_exists($this->uploadPath)){  
                mkdir($this->uploadPath,0777,true);  
            }  
        }  
        /** 
         * 产生唯一字符串 
         * @return string 
         */  
        protected function getUniName(){  
            return md5(uniqid(microtime(true),true));  
        }  
        /** 
         * 上传文件 
         * @return string 
         */  
        public function uploadFile(){  
            if($this->checkError()&&$this->checkSize()&&$this->checkExt()&&$this->checkMime()&&$this->checkTrueImg()&&$this->checkHTTPPost()){  
                $this->checkUploadPath();  
                $this->uniName=$this->getUniName();  
                $this->destination=$this->uploadPath.'/'.$this->uniName.'.'.$this->ext;  
                if(@move_uploaded_file($this->fileInfo['tmp_name'], $this->destination)){  
                    return  $this->destination;  
                }else{  
                    $this->error='文件移动失败';  
                    $this->showError();  
                }  
            }else{  
                $this->showError();  
            }  
        }  
    }  


    upload.py

    #coding=utf-8
    from selenium import webdriver
    import os,time
    
    driver=webdriver.Chrome()
    file_path =  'http://localhost/upload.html'
    driver.get(file_path)
    time.sleep(2)
    driver.find_element_by_name("myFile").click()
    
    os.system("uploadfile.exe")
    
    time.sleep(2)
    driver.find_element_by_id("upload").click()
    time.sleep(2)
    
    driver.quit()

    uploadfile.au3

    ;ControlFocus("title","text",ControlID) Edit1=Edit instance 1
    ControlFocus("Open","","Edit1")
    
    ;wait 10 seconds for the upload window to appear
    WinWait("[CLASS:#32770]","",10)
    
    ;set the File name text on the Edit field
    ControlSetText("Open","","Edit1",".1.jpg")
    
    Sleep(2000) ;
    
    ;Click on the open button
    ControlClick("Open","","Button1");
  • 相关阅读:
    条件分支if与else的用法小结
    Pandas的loc,iloc与ix的用法及区别
    决策树参数介绍
    列表,元组,字典三种序列之浅谈
    今日浅谈循环 for与while
    电脑重生
    学而201105期蘑菇班学员成绩单(高级)
    悬赏公告
    学而201005期蘑菇学员成绩单
    学而201011期蘑菇班学员成绩单
  • 原文地址:https://www.cnblogs.com/saryli/p/4332210.html
Copyright © 2011-2022 走看看