1. 程式人生 > >python+selenium win32gui實現檔案上傳 enumerate() Unity3d中SendMessage 用法簡單筆記

python+selenium win32gui實現檔案上傳 enumerate() Unity3d中SendMessage 用法簡單筆記

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

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 //即使沒有找到相應函式,也不會報錯,自動忽略