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