Webdriver is a browser-based operation, when the page upload file is used by the Flash control Swffileupload call, the system is called the bottom of the file selection pop-up box
In this case, Webdriver temporarily does not support actions other than the page
Many methods have been tried before, such as Send_keys ("path"), but none of them can be solved
Although Webdriver cannot operate on the underlying, Python extensions are possible
By simulating mouse, keyboard operation, you can solve this problem, but this method is more stupid, and not ideal, if there is a good way, please leave a message to me, thank you!
Workaround:
1. Extend Python Package
To operate on the underlying, you need to import Win32api,win32con
Download the two modules directly and install them
2, in Python to achieve mouse positioning, click, keyboard input operation
PS: In the file selection pop-up box to locate, click, in my operating system, there is no click, but in the colleague's computer can operate, so I took the analog keyboard input file name, to ensure that the file can be uploaded correctly
The role of time is important to play a buffering role, if the loading speed is slow, without adding time, it may cause this method to fail
① Analog Keyboard input (note the location of the file)
ImportWin32conImportWin32API fromcTYPESImport*Import TimedefMouse_click (x, y):#set Mouse initial sitWindll.user32.SetCursorPos (x, y) win32api.mouse_event (Win32con. Mouseeventf_rightdown, 0, 0, 0, 0)#left mouse button clickTime.sleep (1) win32api.keybd_event (65,0,0,0)#A keying code is aWin32api.keybd_event (65, 0,win32con. keyeventf_keyup,0) win32api.keybd_event (65,0,0,0)#A keying code is aWin32api.keybd_event (65, 0,win32con. keyeventf_keyup,0) win32api.keybd_event (110,0,0,0)#. The keying code isWin32api.keybd_event (110, 0,win32con. keyeventf_keyup,0) win32api.keybd_event (74,0,0,0)#J Keying code is 106Win32api.keybd_event (74, 0,win32con. keyeventf_keyup,0) win32api.keybd_event (80,0,0,0)#p keying code isWin32api.keybd_event (80, 0,win32con. keyeventf_keyup,0) win32api.keybd_event (71,0,0,0)#g keying code is 103Win32api.keybd_event (71, 0,win32con. keyeventf_keyup,0) Time.sleep (1) win32api.mouse_event (Win32con. Mouseeventf_rightup, 0, 0, 0, 0)#left mouse button releaseTime.sleep (1) win32api.keybd_event (13,0,0,0)#Enter keying codeWin32api.keybd_event (13, 0,win32con. keyeventf_keyup,0) win32api.keybd_event (13,0,0,0)#Enter keying codeWin32api.keybd_event (13, 0,win32con. keyeventf_keyup,0) Time.sleep (1)
② analog mouse Positioning selection file
def mouse_double_click (x, y): Windll.user32.SetCursorPos (x, y) win32api.mouse_event (Win32con. mouseeventf_leftdown,0,0,0,0) win32api.mouse_event (Win32con. Mouseeventf_leftup, 0, 0, 0, 0) # left mouse button released Win32api.mouse_event (Win32con. mouseeventf_leftdown,0,0,0,0) win32api.mouse_event (Win32con. Mouseeventf_leftup, 0, 0, 0, 0) # left mouse button release
In fact, the two methods are similar, the second method is actually double-click effect
---restore content ends---
Python + Selenium webdriver using Python to simulate mouse, keyboard operation, to solve swffileupload call system Bottom Popup cannot locate the problem