我看到您在知道上提过这个问题:Python+Selenium处理Windows弹窗(非IE弹窗问题),不知道最后怎么解决的?
场景:
思路:
查找到这个Open窗口,然后在File Name里面填入文件路径,最后点击Open按钮结束操作。
#首先下载好spy++这个工具(微软自己出的用来定位windows句柄及其父子关系的)
#先把弹出框点出来,然后打开spy++,点击图中的1处,就会出现查找窗口,点击2处,把“瞄准
#镜”拖动到弹出窗口的边缘(不要拖到其他地方,比如按钮,编辑框等,不然会查找到其他句柄)
#记住这个最底层的class:#32770(可以称为祖爷爷)
import win32gui
hn=win32gui.FindWindow(None,'Open')
win32gui.ShowWindow(hn,win32con.SW_SHOWNORMAL)
#查找目标控件
#实际上最终的目标是要定位第二章图中的Edit这个输入控件,所以,同样的方法,查找到这个
#Edit控件,记住Class:Edit(可以称为曾...孙子)
#剩下的就是查找祖爷爷和曾...孙子之间存在哪些父和子
#在spy++中找到父子关系如3图所示
#下面就是写代码了
parent=win32gui.FindWindowEx(hn,None,'ComboBoxEx32',None)
Combobox_real=win32gui.FindWindowEx(parent,None,'ComboBox',None)
Edit_box=win32gui.FindWindowEx(Combobox_real,None,'Edit',None)
print hex(Edit_box)
win32gui.EnableWindow(Edit_box,True)
#剩下的就简单了,直接填入路径,最后点Open按钮
win32gui.SendMessage(Edit_box,win32con.WM_SETTEXT,None,'C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg')
open_button=win32gui.FindWindowEx(hn,None,'Button','&Open')
print hex(open_button)
(left,top,right,bottom)=win32gui.GetWindowRect(open_button)
print (left,top,right,bottom)
win32api.SetCursorPos((left+(right-left)/2,top+(bottom-top)/2))
time.sleep(0.5)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
time.sleep(0.05)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
有问题再找我