python+selenium win32gui實現文件上傳 enumerate()


upload = dr.find_element_by_id('exampleInputFile0') upload.click() time.sleep(1) # win32gui dialog = win32gui.FindWindow('#32770', u'打開') # 對話框 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 win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, 'D:\category.sql') # 往輸入框輸入絕對地址 win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 按button
----------------------------------

函數功能:該函數獲得一個窗口的句柄,該窗口的類名和窗口名與給定的字符串相匹配。這個函數查找子窗口,從排在給定的子窗口后面的下一個子窗口開始。在查找時不區分大小寫。

    函數原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);

    參數;

    hwndParent:要查找子窗口的父窗口句柄。

    如果hwnjParent為NULL,則函數以桌面窗口為父窗口,查找桌面窗口的所有子窗口。

    Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函數僅查找所有消息窗口。

    hwndChildAfter :子窗口句柄。查找從在Z序中的下一個子窗口開始。子窗口必須為hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter為NULL,查找從hwndParent的第一個子窗口開始。如果hwndParent 和 hwndChildAfter同時為NULL,則函數查找所有的頂層窗口及消息窗口。

    lpszClass:指向一個指定了類名的空結束字符串,或一個標識類名字符串的成員的指針。如果該參數為一個成員,則它必須為前次調用theGlobaIAddAtom函數產生的全局成員。該成員為16位,必須位於lpClassName的低16位,高位必須為0。

    lpszWindow:指向一個指定了窗口名(窗口標題)的空結束字符串。如果該參數為 NULL,則為所有窗口全匹配。返回值:如果函數成功,返回值為具有指定類名和窗口名的窗口句柄。如果函數失敗,返回值為NULL。

    若想獲得更多錯誤信息,請調用GetLastError函數。

Unity3d中SendMessage 用法簡單筆記

Message相關有3條指令:
SendMessage ("函數名",參數,SendMessageOptions) //GameObject自身的Script
BroadcastMessage ("函數名",參數,SendMessageOptions)  //自身和子Object的Script
SendMessageUpwards ("函數名",參數,SendMessageOptions)  //自身和父Object的Script
用於向某個GameObject發送一條信息,讓它完成特定功能。
其實本質是調用那個GameObject里面的Script里面的函數,可以跨語言的,例如Javascript可以調用C#的函數,我已實驗成功。
☆另外,如果GameObject本身有兩個腳本,例如“move1”和“move2”,兩個腳本內有同名函數例如“moveMe()”,會兩個函數都執行一次。

第三個參數使用:
SendMessageOptions.RequireReceiver //如果沒有找到相應函數,會報錯(默認是這個狀態)
SendMessageOptions.DontRequireReceiver //即使沒有找到相應函數,也不會報錯,自動忽略




enumerate()說明

    enumerate()是python的內置函數
    enumerate在字典上是枚舉、列舉的意思
    對於一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值
    enumerate多用於在for循環中得到計數

    例如對於一個seq,得到:

    (0, seq[0]), (1, seq[1]), (2, seq[2])
        1

    enumerate()返回的是一個enumerate對象,例如:
    這里寫圖片描述

enumerate()使用

    如果對一個列表,既要遍歷索引又要遍歷元素時,首先可以這樣寫:

list1 = ["這", "是", "一個", "測試"]
for i in range (len(list1)):
    print i ,list1[i]

    上述方法有些累贅,利用enumerate()會更加直接和優美:

list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1):
    print index, item
>>>
0 這
1 是
2 一個
3 測試

    enumerate還可以接收第二個參數,用於指定索引起始值,如:

list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1, 1):
    print index, item
>>>
1 這
2 是
3 一個
4 測試

補充

如果要統計文件的行數,可以這樣寫:

count = len(open(filepath, 'r').readlines())

這種方法簡單,但是可能比較慢,當文件比較大時甚至不能工作。

可以利用enumerate():

count = 0
for index, line in enumerate(open(filepath,'r')):
    count += 1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM