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");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值