1. 程式人生 > >python 模擬滑鼠點選自動下載檔案然後輸出檔名

python 模擬滑鼠點選自動下載檔案然後輸出檔名

import os
import time
import socket
import mailto,subprocess

downloadDir = "I:\\Gamedownloader\\"
exeDir= "j:\\POPO\\"

def download(xunleiPath):
	exePath= exeDir
	exePath = exePath + xunleiPath
	print exePath
	subprocess.Popen(exePath)

def click():
	import win32gui,win32api,win32con
	win = win32gui.FindWindow('XLUEFrameHostWnd',None)
	print win
	(left,top,right,bottom) = win32gui.GetWindowRect(win)
	print left
	win32api.SetCursorPos((left+(right-left)-55,top+(bottom-top)-25)) #游標定位
	# 滑鼠點選
	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0) 
	time.sleep(0.05)
	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)	
	
	
	
def downloadExe():
	I=os.listdir(exeDir) #os.path.isfile和os.path.isdir區分是檔案還是目錄
	for i in I:
		if 'tx3'==i[:3] and '_setup.exe'==i[7:]:
			xunleiPath = i
	return xunleiPath
		
def fileName():
	
	I=os.listdir(downloadDir)
	version=''
	for i in I:
		version=i[:10]
	print version
	print "version:%s" %version
	
def kill(exeName):
	os.system('taskkill /f /im %s' %exeName) #關閉檢查,exeName是程序名
	time.sleep(1)
	
	I=os.listdir(downloadDir)
	for targetFile in I:
		targetFile=os.path.join(downloadDir,targetFile)
		print targetFile
		print os.path.isfile(targetFile) #這裡需要注意,<span style="font-family: Arial, Helvetica, sans-serif;">targetFile一定要是整個路徑加檔名,isfile()才起作用,不然的話,會造成它無論是isfile還是isdir都是返回false</span>
		print targetFile.find('tx-')
		print targetFile[18:21]
		if os.path.isfile(targetFile) and targetFile[18:21]=='tx-': 
			os.remove(targetFile)	

if __name__ == "__main__":
	xunleiPath=downloadExe()
	download(xunleiPath)
	time.sleep(10)
	click()
	fileName()
	kill(xunleiPath)

如果出現ImportError: No module named win32api ,那是因為Python是沒有自帶訪問windows系統API的庫的,需要下載。庫的名稱叫pywin32,可以從網上直接下載。

連結地址可以下載:

http://sourceforge.net/projects/pywin32/files%2Fpywin32/  注意看他的文件,下載相應檔案。注意,一定要匹配你的python的32位或者64位。

獲取應用程式視窗控制代碼,可以用spy++.exe,這個程式就整合在vs2010或者2012等。具體怎麼操作,可以百度經驗找spy++使用方法。這裡我只能找到主視窗的控制代碼,但是找不到窗口裡面某個button的控制代碼,後續需要在研究。

win = win32gui.FindWindow('XLUEFrameHostWnd',None)
FindWindow()第一個引數是視窗類名,第二個是視窗標題,兩個填一個或者兩個都行,程式會返回視窗控制代碼。更詳細的資訊,可以搜尋。

subprocess.Popen(exePath)
 啟動程式的方法
os.system('taskkill /f /im %s' %exeName) #關閉檢查,exeName是程序名
os.path.isfile(targetFile) #這裡需要注意,<span style="font-family: Arial, Helvetica, sans-serif;">targetFile一定要是整個路徑加檔名,isfile()才起作用,不然的話,會造成它無論是isfile還是isdir都是返回false</span>