键盘模拟手柄软件(win10键盘模拟手柄使用教程)

由于打印界面出来的保存窗口不属于web页面,所以无法用selenium进行操作。

键盘模拟手柄软件(win10键盘模拟手柄使用教程)

观察之后发现,保存窗口默认输入位置为File name,模拟按键位置为Save。如果在不更改保留路径的条件下,最简单的方式是通过模拟键盘的方式进行操作,主要是tab和enter两个按键完成,以及输入保存的文件名称。(目前还没有实现更改保存路径)

首先安装需要的三方包:

安装pyHook,官网……3.8版本没有对应的pyhook??

找了好久,终于找到一个共享的,测试后可以使用,链接

pip install pyHook-1.5.1-cp38-cp38-win_amd64.whl

然后安装PyUserInput

pip install PyUserInput

以下为使用的具体操作方法:

PyKeyboard:模拟键盘操作

PyMouse:模拟鼠标操作

操作过程中发现,pykeyboard的操作没办法在windows弹窗中呈现。于是测试了一下针对web的操作,是可以实现的,证明pykeyboard基于win10是可以进行操作的:

from selenium.webdriver.support import expected_conditions as ECfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitimport timefrom pykeyboard import PyKeyboarddef test(): driver.get(‘http://www.baidu.com/’) WebDriverWait(driver,30).until(EC.visibility_of_element_located((By.ID,’kw’))) k = PyKeyboard() k.tap_key(‘i’) time.sleep(10)if __name__ == ‘__main__’: driver = webdriver.Chrome() test() driver.quit()

所以问题应该是pykeyboard不能直接操作网页弹出的windows下载框。按照这样的思路,需要考虑先获取windows窗口的句柄权,再此基础上再测试一下是否成功。

windows的操作采用win32gui这个三方包。

import win32gui #查看当前windows中的句柄 time.sleep(1) para_hld = win32gui.FindWindow(None,’Save Print Output As’) print(para_hld)

能够成功识别到指定的窗口的句柄权。前面加了一个时间间隔,是因为如果没有间隔的情况下,容易出现获取不计时的问题。

8914604

接下来需要做的是指定的窗口调用到最前端,并激活该窗口,使用win32gui.SetForegroundWindow()。

该部分的整体实现代码如下(其中省略了selenium操作web打开print页面的部分,如果需要测试,自行模拟一下):

from pykeyboard import PyKeyboardimport win32gui #Save file keyboard def keyboard(self,str_key): k = PyKeyboard() #输入文件名称 k.type_string(str_key) #回车保存 k.tap_key(k.enter_key) #查看当前windows中的句柄 time.sleep(1) para_hld = win32gui.FindWindow(None,’Save Print Output As’) if para_hld == 0: print(‘未获取到保存窗口的句柄’) else: time.sleep(1) win32gui.SetForegroundWindow(para_hld) #模拟键盘操作,以身份证号码作为pdf的名称 self.keyboard(‘test’)

pykeyboard的部分使用介绍:

发表评论

登录后才能评论