def playback(binary_image, scale, tx, ty, sleep_duration_per_chord=0.02): m = PyMouse() for row_idx, row_data in enumerate(binary_image): y = int((scale * row_idx) + ty) chords = extract_chords(row_data) for c0, c1 in chords: x0 = int((scale * c0) + tx) x1 = int((scale * c1) + tx) m.move(x0, y) m.drag(x1, y) sleep(sleep_duration_per_chord * len(chords))
class Player: def __init__(self): self.mouse = PyMouse() def click(self, pos): self.mouse.click(*pos) def shoot(self, target, power, table_offset, cue_ball): adj_target = np.add(target, table_offset) self.mouse.press(*adj_target) adj_cue = np.add(cue_ball.get_pos(), table_offset) self.mouse.drag(*adj_cue) self.mouse.release(*adj_cue)
def drag(p1, p2, t = 0.05): m = PyMouse() m.press(p1.x, p1.y, 1) x = p1.x y = p1.y step = 5 while distance(Point(x, y), p2) >= 1 : x += (p2.x - x)/step y += (p2.y - y)/step step -= 1 m.drag(x, y) # time.sleep(0.01) m.release(p2.x, p2.y, 1) time.sleep(t)
class Bot(object): """Mouse and Keyboard robot class. Abbreviation table: - m: stands for mouse - k: stands for keyboard - dl: stands for delay - n: how many times you want to tap the key - i: usually for the ith function key, F1 ~ F12 Almost every method have an option keyword ``dl`` (dl stands for delay), there is ``dl`` seconds delay applied at begin. By default it is ``None``, means no delay applied. Keyboard Key Name Table (Case Insensitive):: # Main Keyboard Keys "ctrl": self.k.control_key, "l_ctrl": self.k.control_l_key, "r_ctrl": self.k.control_r_key, "alt": self.k.alt_key, "l_alt": self.k.alt_l_key, "r_alt": self.k.alt_r_key, "shift": self.k.shift_key, "l_shift": self.k.shift_l_key, "r_shift": self.k.shift_r_key, "tab": self.k.tab_key, "space": self.k.space, "enter": self.k.enter_key, "back": self.k.backspace_key, "backspace": self.k.backspace_key, # Side Keyboard Keys "home": self.k.home_key, "end": self.k.end_key, "page_up": self.k.page_up_key, "pageup": self.k.page_up_key, "page_down": self.k.page_down_key, "page_down": self.k.page_down_key, "insert": self.k.insert_key, "ins": self.k.insert_key, "delete": self.k.delete_key, "del": self.k.delete_key, "up": self.k.up_key, "down": self.k.down_key, "left": self.k.left_key, "right": self.k.right_key, # Function Keys "f1": F1 """ def __init__(self): self.m = PyMouse() self.k = PyKeyboard() self.dl = 0 self._key_mapper = { # Main Keyboard Keys "ctrl": self.k.control_key, "l_ctrl": self.k.control_l_key, "r_ctrl": self.k.control_r_key, "alt": self.k.alt_key, "l_alt": self.k.alt_l_key, "r_alt": self.k.alt_r_key, "shift": self.k.shift_key, "l_shift": self.k.shift_l_key, "r_shift": self.k.shift_r_key, "tab": self.k.tab_key, "space": self.k.space, "enter": self.k.enter_key, "back": self.k.backspace_key, "backspace": self.k.backspace_key, # Side Keyboard Keys "home": self.k.home_key, "end": self.k.end_key, "page_up": self.k.page_up_key, "pageup": self.k.page_up_key, "page_down": self.k.page_down_key, "page_down": self.k.page_down_key, "insert": self.k.insert_key, "ins": self.k.insert_key, "delete": self.k.delete_key, "del": self.k.delete_key, "up": self.k.up_key, "down": self.k.down_key, "left": self.k.left_key, "right": self.k.right_key, # f1 - f12 is the function key } for i in range(1, 1 + 12): self._key_mapper["f%s" % i] = self.k.function_keys[i] def _parse_key(self, name): name = str(name) if name in string.printable: return name elif name.lower() in self._key_mapper: return self._key_mapper[name.lower()] else: raise ValueError("%r is not a valid key name, use one of %s." % (name, list(self._key_mapper))) def delay(self, dl=0): """Delay for ``dl`` seconds. """ if dl is None: time.sleep(self.dl) elif dl < 0: sys.stderr.write( "delay cannot less than zero, this takes no effects.\n") else: time.sleep(dl) #--- Meta --- def get_screen_size(self): """Return screen's width and height in pixel. **中文文档** 返回屏幕的像素尺寸。 """ width, height = self.m.screen_size() return width, height def get_position(self): """Return the current coordinate of mouse. **中文文档** 返回鼠标所处的位置坐标。 """ x_axis, y_axis = self.m.position() return x_axis, y_axis #--- Mouse Macro --- def left_click(self, x, y, n=1, pre_dl=None, post_dl=None): """Left click at ``(x, y)`` on screen for ``n`` times. at begin. **中文文档** 在屏幕的 ``(x, y)`` 坐标处左键单击 ``n`` 次。 """ self.delay(pre_dl) self.m.click(x, y, 1, n) self.delay(post_dl) def right_click(self, x, y, n=1, pre_dl=None, post_dl=None): """Right click at ``(x, y)`` on screen for ``n`` times. at begin. **中文文档** 在屏幕的 ``(x, y)`` 坐标处右键单击 ``n`` 次。 """ self.delay(pre_dl) self.m.click(x, y, 2, n) self.delay(post_dl) def middle_click(self, x, y, n=1, pre_dl=None, post_dl=None): """Middle click at ``(x, y)`` on screen for ``n`` times. at begin. **中文文档** 在屏幕的 ``(x, y)`` 坐标处中键单击 ``n`` 次。 """ self.delay(pre_dl) self.m.click(x, y, 3, n) self.delay(post_dl) def scroll_up(self, n, pre_dl=None, post_dl=None): """Scroll up ``n`` times. **中文文档** 鼠标滚轮向上滚动n次。 """ self.delay(pre_dl) self.m.scroll(vertical=n) self.delay(post_dl) def scroll_down(self, n, pre_dl=None, post_dl=None): """Scroll down ``n`` times. **中文文档** 鼠标滚轮向下滚动n次。 """ self.delay(pre_dl) self.m.scroll(vertical=-n) self.delay(post_dl) def scroll_right(self, n, pre_dl=None, post_dl=None): """Scroll right ``n`` times. **中文文档** 鼠标滚轮向右滚动n次(如果可能的话)。 """ self.delay(pre_dl) self.m.scroll(horizontal=n) self.delay(post_dl) def scroll_left(self, n, pre_dl=None, post_dl=None): """Scroll left ``n`` times. **中文文档** 鼠标滚轮向左滚动n次(如果可能的话)。 """ self.delay(pre_dl) self.m.scroll(horizontal=-n) self.delay(post_dl) def move_to(self, x, y, pre_dl=None, post_dl=None): """Move mouse to (x, y) **中文文档** 移动鼠标到 (x, y) 的坐标处。 """ self.delay(pre_dl) self.m.move(x, y) self.delay(post_dl) def drag_and_release(self, start_x, start_y, end_x, end_y, pre_dl=None, post_dl=None): """Drag something from (start_x, start_y) to (end_x, endy) **中文文档** 从start的坐标处鼠标左键单击拖曳到end的坐标处 start, end是tuple. 格式是(x, y) """ self.delay(pre_dl) self.m.press(start_x, start_y, 1) self.m.drag(end_x, end_y) self.m.release(end_x, end_y, 1) self.delay(post_dl) #--- Keyboard Single Key --- def tap_key(self, key_name, n=1, interval=0, pre_dl=None, post_dl=None): """Tap a key on keyboard for ``n`` times, with ``interval`` seconds of interval. Key is declared by it's name Example:: bot.tap_key("a") bot.tap_key(1) bot.tap_key("up") bot.tap_key("space") bot.tap_key("enter") bot.tap_key("tab") **中文文档** 以 ``interval`` 中定义的频率按下某个按键 ``n`` 次。接受按键名作为输入。 """ key = self._parse_key(key_name) self.delay(pre_dl) self.k.tap_key(key, n, interval) self.delay(post_dl) def enter(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press enter key n times. **中文文档** 按回车键/换行键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.enter_key, n, interval) self.delay(post_dl) def backspace(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press backspace key n times. **中文文档** 按退格键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.backspace_key, n, interval) self.delay(post_dl) def space(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press white space key n times. **中文文档** 按空格键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.space, n) self.delay(post_dl) def fn(self, i, n=1, interval=0, pre_dl=None, post_dl=None): """Press Fn key n times. **中文文档** 按 Fn 功能键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.function_keys[i], n, interval) self.delay(post_dl) def tab(self, n=1, interval=0, pre_dl=None, post_dl=None): """Tap ``tab`` key for ``n`` times, with ``interval`` seconds of interval. **中文文档** 以 ``interval`` 中定义的频率按下某个tab键 ``n`` 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.tab_key, n, interval) self.delay(post_dl) def up(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press up key n times. **中文文档** 按上方向键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.up_key, n, interval) self.delay(post_dl) def down(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press down key n times. **中文文档** 按下方向键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.down_key, n, interval) self.delay(post_dl) def left(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press left key n times **中文文档** 按左方向键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.left_key, n, interval) self.delay(post_dl) def right(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press right key n times. **中文文档** 按右方向键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.right_key, n, interval) self.delay(post_dl) def delete(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres delete key n times. **中文文档** 按 delete 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.delete_key, n, interval) self.delay(post_dl) def insert(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres insert key n times. **中文文档** 按 insert 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.insert_key, n, interval) self.delay(post_dl) def home(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres home key n times. **中文文档** 按 home 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.home_key, n, interval) self.delay(post_dl) def end(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press end key n times. **中文文档** 按 end 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.end_key, n, interval) self.delay(post_dl) def page_up(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres page_up key n times. **中文文档** 按 page_up 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.page_up_key, n, interval) self.delay(post_dl) def page_down(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres page_down key n times. **中文文档** 按 page_down 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.page_down, n, interval) self.delay(post_dl) #--- Keyboard Combination --- def press_and_tap(self, press_key, tap_key, n=1, interval=0, pre_dl=None, post_dl=None): """Press combination of two keys, like Ctrl + C, Alt + F4. The second key could be tapped for multiple time. Examples:: bot.press_and_tap("ctrl", "c") bot.press_and_tap("shift", "1") **中文文档** 按下两个键的组合键。 """ press_key = self._parse_key(press_key) tap_key = self._parse_key(tap_key) self.delay(pre_dl) self.k.press_key(press_key) self.k.tap_key(tap_key, n, interval) self.k.release_key(press_key) self.delay(post_dl) def press_two_and_tap(self, press_key1, press_key2, tap_key, n=1, interval=0, pre_dl=None, post_dl=None): """Press combination of three keys, like Ctrl + Shift + C, The tap key could be tapped for multiple time. Examples:: bot.press_and_tap("ctrl", "shift", "c") **中文文档** 按下三个键的组合键。 """ press_key1 = self._parse_key(press_key1) press_key2 = self._parse_key(press_key2) tap_key = self._parse_key(tap_key) self.delay(pre_dl) self.k.press_key(press_key1) self.k.press_key(press_key2) self.k.tap_key(tap_key, n, interval) self.k.release_key(press_key1) self.k.release_key(press_key2) self.delay(post_dl) def ctrl_c(self, pre_dl=None, post_dl=None): """Press Ctrl + C, usually for copy. **中文文档** 按下 Ctrl + C 组合键, 通常用于复制。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("c") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_v(self, pre_dl=None, post_dl=None): """Press Ctrl + V, usually for paste. **中文文档** 按下 Ctrl + V 组合键, 通常用于粘贴。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("v") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_x(self, pre_dl=None, post_dl=None): """Press Ctrl + X, usually for cut. **中文文档** 按下 Ctrl + X 组合键, 通常用于剪切。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("x") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_z(self, pre_dl=None, post_dl=None): """Press Ctrl + Z, usually for undo. **中文文档** 按下 Ctrl + Z 组合键, 通常用于撤销上一次动作。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("z") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_y(self, pre_dl=None, post_dl=None): """Press Ctrl + Y, usually for redo. **中文文档** 按下 Ctrl + Y 组合键, 通常用于重复上一次动作。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("y") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_a(self, pre_dl=None, post_dl=None): """Press Ctrl + A, usually for select all. **中文文档** 按下 Ctrl + A 组合键, 通常用于选择全部。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("a") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_f(self, pre_dl=None, post_dl=None): """Press Ctrl + F, usually for search. **中文文档** 按下 Ctrl + F 组合键, 通常用于搜索。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("f") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_fn(self, i, pre_dl=None, post_dl=None): """Press Ctrl + Fn1 ~ 12 once. **中文文档** 按下 Ctrl + Fn1 ~ 12 组合键。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key(self.k.function_keys[i]) self.k.release_key(self.k.control_key) self.delay(post_dl) def alt_fn(self, i, pre_dl=None, post_dl=None): """Press Alt + Fn1 ~ 12 once. **中文文档** 按下 Alt + Fn1 ~ 12 组合键。 """ self.delay(pre_dl) self.k.press_key(self.k.alt_key) self.k.tap_key(self.k.function_keys[i]) self.k.release_key(self.k.alt_key) self.delay(post_dl) def shift_fn(self, i, pre_dl=None, post_dl=None): """Press Shift + Fn1 ~ 12 once. **中文文档** 按下 Shift + Fn1 ~ 12 组合键。 """ self.delay(pre_dl) self.k.press_key(self.k.shift_key) self.k.tap_key(self.k.function_keys[i]) self.k.release_key(self.k.shift_key) self.delay(post_dl) def alt_tab(self, n=1, pre_dl=None, post_dl=None): """Press Alt + Tab once, usually for switching between windows. Tab can be tapped for n times, default once. **中文文档** 按下 Alt + Tab 组合键, 其中Tab键按 n 次, 通常用于切换窗口。 """ self.delay(pre_dl) self.k.press_key(self.k.alt_key) self.k.tap_key(self.k.tab_key, n=n, interval=0.1) self.k.release_key(self.k.alt_key) self.delay(post_dl) #--- Other --- def type_string(self, text, interval=0, pre_dl=None, post_dl=None): """Enter strings. **中文文档** 从键盘输入字符串, interval是字符间输入时间间隔, 单位是秒。 """ self.delay(pre_dl) self.k.type_string(text, interval) self.delay(post_dl) def copy_text_to_clipboard(self, text): """Copy text to clipboard. **中文文档** 拷贝字符串到剪贴板。 """ pyperclip.copy(text)
#登录失败,需要模拟拖动滑块验证 print 'login fail' time.sleep(random.randint(7, 15)) driver.find_element_by_xpath( '/html/body/div[1]/div/div/div/div[2]/form/div[2]/span[1]/input' ).click() time.sleep(random.randint(2, 5)) #driver.find_element_by_xpath('/html/body/div[1]/div/div/div/div[2]/form/div[2]/span[1]/input').send_keys('Nosecret521') driver.find_element_by_xpath( '/html/body/div[1]/div/div/div/div[2]/form/div[2]/span[1]/input' ).send_keys('Nosecret521') time.sleep(random.randint(2, 5)) #place of huakuaier m.move(494, 296) time.sleep(random.randint(2, 5)) m.drag(710, 296) time.sleep(random.randint(7, 15)) m.release(710, 296, 1) time.sleep(random.randint(7, 15)) driver.find_element_by_xpath( '/html/body/div[1]/div/div/div/div[2]/form/div[2]/span[1]/input' ).send_keys(Keys.RETURN) time.sleep(random.randint(7, 15)) cookies = [ item["name"] + "=" + item["value"] for item in driver.get_cookies() ] cookiestr = ';'.join(item for item in cookies) #f=file("/root/weixin.11tn.com/mp/almmck.txt","w+") f = file("/data/tbk/requests/almmck.txt", "w+") f.writelines(cookiestr) #print currurl
from pymouse import PyMouse import time m = PyMouse() m.move(943, 200) time.sleep(0.5) m.drag(557, 17) time.sleep(1) m.move(1243, 203) time.sleep(0.5) m.drag(1674, 367)
class Bot(): def __init__(self): self.mouse = PyMouse() self.keyboard = PyKeyboard() def Delay(self, n): time.sleep(n) """ ====== Mouse Macro ====== """ def Left_click(self, x, y, n = 1, dl = 0): """在屏幕某点左键点击若干次 """ self.Delay(dl) self.mouse.click(x, y, 1, n) def Right_click(self, x, y, n = 1, dl = 0): """在屏幕某点右键点击若干次 """ self.Delay(dl) self.mouse.click(x, y, 2, n) def Double_click(self, x, y, dl = 0): """在屏幕的某点双击 """ self.Delay(dl) self.mouse.click(x, y, 1, n = 2) def Scroll_up(self, n, dl = 0): """鼠标滚轮向上n次 """ self.Delay(dl) self.mouse.scroll(vertical = n) def Scroll_down(self, n, dl = 0): """鼠标滚轮向下n次 """ self.Delay(dl) self.mouse.scroll(vertical = -n) def Move_to(self, x, y, dl = 0): """鼠标移动到x, y的坐标处 """ self.Delay(dl) self.mouse.move(x, y) def Drag_and_release(self, start, end, dl = 0): """从start的坐标处鼠标左键单击拖曳到end的坐标处 start, end是tuple. 格式是(x, y) """ self.Delay(dl) self.mouse.press(start[0], start[1], 1) self.mouse.drag(end[0], end[1]) self.Delay(0.1) self.mouse.release(end[0], end[1], 1) def Screen_size(self): width, height = self.mouse.screen_size() return width, height def WhereXY(self): x_axis, y_axis = self.mouse.position() return x_axis, y_axis """ ====== Keyboard Macro ====== """ """COMBINATION组合键""" """Ctrl系列""" def Ctrl_c(self, dl = 0): """Ctrl + c 复制 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("c") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_x(self, dl = 0): """Ctrl + x 剪切 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("x") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_v(self, dl = 0): """Ctrl + v 粘贴 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("v") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_z(self, dl = 0): """Ctrl + z 撤销上一次操作 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("z") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_y(self, dl = 0): """Ctrl + y 重复上一次操作 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("y") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_a(self, dl = 0): """Ctrl + a 全选 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("a") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_Fn(self, n, dl = 0): """Ctrl + Fn1~12 组合键 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key(self.keyboard.function_keys[n]) self.keyboard.release_key(self.keyboard.control_key) """Alt系列""" def Alt_Tab(self, dl = 0): """Alt + Tab 组合键 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.alt_key) self.keyboard.tap_key(self.keyboard.tab_key) self.keyboard.release_key(self.keyboard.alt_key) def Alt_Fn(self, n, dl = 0): """Alt + Fn1~12 组合键 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.alt_key) self.keyboard.tap_key(self.keyboard.function_keys[n]) self.keyboard.release_key(self.keyboard.alt_key) """SINGLE KEY单个键盘键""" def Up(self, n = 1, dl = 0): """上方向键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.up_key, n) def Down(self, n = 1, dl = 0): """下方向键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.down_key, n) def Left(self, n = 1, dl = 0): """左方向键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.left_key, n) def Right(self, n = 1, dl = 0): """右方向键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.right_key, n) def Enter(self, n = 1, dl = 0): """回车键/换行键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.enter_key, n) def Delete(self, n = 1, dl = 0): """删除键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.delete_key, n) def Back(self, n = 1, dl = 0): """退格键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.backspace_key, n) def Space(self, n = 1, dl = 0): """空格键n次 """ self.Delay(dl) self.keyboard.tap_key(" ", n) def Fn(self, n, dl = 0): """功能键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.function_keys[n]) def Char(self, char, n = 1, dl = 0): """输入任意单字符n次,只要能在键盘上打出来的字符都可以 """ if len(char) == 1: self.Delay(dl) self.keyboard.tap_key(char) else: raise Exception("""method "Char()" can only take one character.""") def Type_string(self, text, interval = 0, dl = 0): """键盘输入字符串,interval是字符间输入时间间隔,单位"秒" """ self.Delay(dl) self.keyboard.type_string(text, interval)
def run(self): global running last_time = datetime.datetime.now() m=PyMouse() measure = str(datetime.datetime.now() - last_time).split(":", 1)[1].split(":", 1)[1] data = None X,Y,CX,CY,LX,LY,dirX,dirY=0,0,0,0,0,0,0,0 CXX,CYY,LXX,LYY=0,0,0,0 max_steps=120 click_lock=0 accelX=0 accelY=0 XX = range(0) YY = range(0) screen_dim = m.screen_size() print "Screen Xdim = " + str(screen_dim[0]) print "Screen Ydim = " + str(screen_dim[1]) while running: if not reciever.empty(): data=reciever.get_nowait() print "data = " + str(data) reciever.task_done() current_pos = m.position() last_time = datetime.datetime.now() if (len(XX)>2 or len(YY)>2) and float(measure)>0.2: print "timout..." print "measure = " + str(measure) print "len XX = " + str(len(XX)) if len(XX)>0:XX.pop(0) if len(YY)>0:YY.pop(0) if re.match("ROW", str(data)) is not None: CY = int(data.split("COL",1)[0].split("ROW",1)[1]) CX = int(data.split("ROW",1)[1].split("COL",1)[1]) data=None if CY is not None and CX is not None and float(measure)<0.125: print "\n" if (CX-LX)>0 and CX!=LX:XX.append(1) elif (CX-LX)<0 and CX!=LX:XX.append(-1) elif CX!=LX:XX.append(0) if (CY-LY)>0 and CY!=LY:YY.append(1) elif (CY-LY)<0 and CY!=LY:YY.append(-1) elif CY!=LY:YY.append(0) dirX=sum(XX)+(self.divider(1,LX)) dirY=sum(YY)+(self.divider(1,LY)) if float(measure)<0.025:accelX,accelY=4,3 elif float(measure)>0.025 and float(measure)<0.05:accelX,accelY=3,2 elif float(measure)>0.05 and float(measure)<0.075:accelX,accelY=2,1.25 elif float(measure)>0.075 and float(measure)<0.1:accelX,accelX=1,0.75 else:accelX,accelY=0.75,0.5 targetX=current_pos[0]+(dirX*accelX) targetY=current_pos[1]+(dirY*accelY) if (current_pos[0]>0 and current_pos[0]<screen_dim[0]) and (current_pos[1]>0 and current_pos[1]<screen_dim[1]): if (targetX<screen_dim[0]) and (targetX>0) and (targetY<screen_dim[1]) and (targetY>0): if click_lock==1:m.drag((targetX),targetY) else:m.move((targetX),targetY) elif (current_pos[0]<=0) or (current_pos[1]<=0): if dirX>0: m.move((1+dirX),current_pos[1]) elif dirY>0: m.move(current_pos[0],(dirY+1)) elif current_pos[0]>=screen_dim[0]: if dirX<0: m.move(((screen_dim[0]-2)+dirX),(current_pos[1]-2)) if len(XX)>=5 or len(YY)>=5: if len(XX)>0:XX.pop(0) if len(YY)>0:YY.pop(0) last_time = datetime.datetime.now() LX,LY=CX,CY CX,CY=None,None if re.match("LCLK", str(data)) is not None: data=None click_lock=0 print "LEFT CLICK" + str(current_pos) m.click(current_pos[0],current_pos[1],1) #m.release(current_pos[0],current_pos[0]) #m.release(current_pos[0],current_pos[0]) #m.move(current_pos[0],current_pos[1]) print "LEFT CLICK" + str(current_pos) if re.match("LPRS", str(data)) is not None: data=None click_lock=1 print "LEFT PRESS" + str(current_pos) m.press(current_pos[0],current_pos[1]) #m.move(current_pos[0],current_pos[1]) print "LEFT PRESS" + str(current_pos) if re.match("LREL", str(data)) is not None: data=None click_lock=0 print "LEFT RELEASE" + str(current_pos) #m.release(current_pos[0],current_pos[0]) m.release(current_pos[0],current_pos[0]) #m.move(current_pos[0],current_pos[1]) print "LEFT RELEASE" + str(current_pos) if re.match("RCLK", str(data)) is not None: data=None click_lock=0 print "RIGHT CLICK" + str(current_pos) m.click(current_pos[0],current_pos[1],2) #m.release(current_pos[0],current_pos[1]) #m.release(current_pos[0],current_pos[1]) #m.move(current_pos[0],current_pos[1]) print "RIGHT CLICK" + str(current_pos) if re.match("RPRS", str(data)) is not None: data=None click_lock=1 print "RIGHT PRESS" + str(current_pos) m.press(current_pos[0],current_pos[1]) #m.move(current_pos[0],current_pos[1]) print "RIGHT PRESS" + str(current_pos) if re.match("RREL", str(data)) is not None: data=None click_lock=0 print "RIGHT RELEASE" + str(current_pos) m.release(current_pos[0],current_pos[1]) #m.release(current_pos[0],current_pos[1]) #m.move(current_pos[0],current_pos[1]) print "RIGHT RELEASE" + str(current_pos) time.sleep(0.0001) measure = str(datetime.datetime.now() - last_time).split(":", 1)[1].split(":", 1)[1]
# click value click=data[1] # if it is 7 mouse down else if it is 4 it is mouse up # get the coordinates xcor,ycor,dec_x_binary,dec_y_binary=data[4],data[6],data[3],data[5] screen_xcor,screen_ycor=transform_board_screen(xcor,ycor,dec_x_binary,dec_y_binary) #print "%d, %d"%(xcor_dec,ycor_dec) #print "%d, %d"%(screen_xcor,screen_ycor) # check if it is valid event if xcor!=0 and ycor!=0 and debug==False: # move mouse if click==7: # mean mouse down event if mouse_down_event: # drag event # draw a line from previous coordinates m.drag(screen_xcor, screen_ycor) else: # first button press event m.click(screen_xcor, screen_ycor, 1) mouse_down_event=True else: # mouse up event # set event type in mouse_down_event # first button press and drag mouse_down_event=False except usb.core.USBError as e: data = None if e.args == ('Operation timed out',): continue finally: # release the device
class Bot(object): """Mouse and Keyboard robot class. Abbreviation table: - m: stands for mouse - k: stands for keyboard - dl: stands for delay - n: how many times you want to tap the key - i: usually for the ith function key, F1 ~ F12 Almost every method have an option keyword ``dl`` (dl stands for delay), there is ``dl`` seconds delay applied at begin. By default it is ``None``, means no delay applied. Keyboard Key Name Table (Case Insensitive):: # Main Keyboard Keys "ctrl": self.k.control_key, "l_ctrl": self.k.control_l_key, "r_ctrl": self.k.control_r_key, "alt": self.k.alt_key, "l_alt": self.k.alt_l_key, "r_alt": self.k.alt_r_key, "shift": self.k.shift_key, "l_shift": self.k.shift_l_key, "r_shift": self.k.shift_r_key, "tab": self.k.tab_key, "space": self.k.space_key, "enter": self.k.enter_key, "back": self.k.backspace_key, "backspace": self.k.backspace_key, # Side Keyboard Keys "home": self.k.home_key, "end": self.k.end_key, "page_up": self.k.page_up_key, "pageup": self.k.page_up_key, "page_down": self.k.page_down_key, "page_down": self.k.page_down_key, "insert": self.k.insert_key, "ins": self.k.insert_key, "delete": self.k.delete_key, "del": self.k.delete_key, "up": self.k.up_key, "down": self.k.down_key, "left": self.k.left_key, "right": self.k.right_key, # Function Keys "f1": F1 """ def __init__(self): self.m = PyMouse() self.k = PyKeyboard() self.dl = 0 self._key_mapper = { # Main Keyboard Keys "ctrl": self.k.control_key, "l_ctrl": self.k.control_l_key, "r_ctrl": self.k.control_r_key, "alt": self.k.alt_key, "l_alt": self.k.alt_l_key, "r_alt": self.k.alt_r_key, "shift": self.k.shift_key, "l_shift": self.k.shift_l_key, "r_shift": self.k.shift_r_key, "tab": self.k.tab_key, "space": self.k.space_key, "enter": self.k.enter_key, "back": self.k.backspace_key, "backspace": self.k.backspace_key, # Side Keyboard Keys "home": self.k.home_key, "end": self.k.end_key, "page_up": self.k.page_up_key, "pageup": self.k.page_up_key, "page_down": self.k.page_down_key, "page_down": self.k.page_down_key, "insert": self.k.insert_key, "ins": self.k.insert_key, "delete": self.k.delete_key, "del": self.k.delete_key, "up": self.k.up_key, "down": self.k.down_key, "left": self.k.left_key, "right": self.k.right_key, # f1 - f12 is the function key } for i in range(1, 1+12): self._key_mapper["f%s" % i] = self.k.function_keys[i] def _parse_key(self, name): name = str(name) if name in string.printable: return name elif name.lower() in self._key_mapper: return self._key_mapper[name.lower()] else: raise ValueError( "%r is not a valid key name, use one of %s." % (name, list(self._key_mapper))) def delay(self, dl=0): """Delay for ``dl`` seconds. """ if dl is None: time.sleep(self.dl) elif dl < 0: sys.stderr.write( "delay cannot less than zero, this takes no effects.\n") else: time.sleep(dl) #--- Meta --- def get_screen_size(self): """Return screen's width and height in pixel. **中文文档** 返回屏幕的像素尺寸。 """ width, height = self.m.screen_size() return width, height def get_position(self): """Return the current coordinate of mouse. **中文文档** 返回鼠标所处的位置坐标。 """ x_axis, y_axis = self.m.position() return x_axis, y_axis #--- Mouse Macro --- def left_click(self, x, y, n=1, pre_dl=None, post_dl=None): """Left click at ``(x, y)`` on screen for ``n`` times. at begin. **中文文档** 在屏幕的 ``(x, y)`` 坐标处左键单击 ``n`` 次。 """ self.delay(pre_dl) self.m.click(x, y, 1, n) self.delay(post_dl) def right_click(self, x, y, n=1, pre_dl=None, post_dl=None): """Right click at ``(x, y)`` on screen for ``n`` times. at begin. **中文文档** 在屏幕的 ``(x, y)`` 坐标处右键单击 ``n`` 次。 """ self.delay(pre_dl) self.m.click(x, y, 2, n) self.delay(post_dl) def middle_click(self, x, y, n=1, pre_dl=None, post_dl=None): """Middle click at ``(x, y)`` on screen for ``n`` times. at begin. **中文文档** 在屏幕的 ``(x, y)`` 坐标处中键单击 ``n`` 次。 """ self.delay(pre_dl) self.m.click(x, y, 3, n) self.delay(post_dl) def scroll_up(self, n, pre_dl=None, post_dl=None): """Scroll up ``n`` times. **中文文档** 鼠标滚轮向上滚动n次。 """ self.delay(pre_dl) self.m.scroll(vertical=n) self.delay(post_dl) def scroll_down(self, n, pre_dl=None, post_dl=None): """Scroll down ``n`` times. **中文文档** 鼠标滚轮向下滚动n次。 """ self.delay(pre_dl) self.m.scroll(vertical=-n) self.delay(post_dl) def scroll_right(self, n, pre_dl=None, post_dl=None): """Scroll right ``n`` times. **中文文档** 鼠标滚轮向右滚动n次(如果可能的话)。 """ self.delay(pre_dl) self.m.scroll(horizontal=n) self.delay(post_dl) def scroll_left(self, n, pre_dl=None, post_dl=None): """Scroll left ``n`` times. **中文文档** 鼠标滚轮向左滚动n次(如果可能的话)。 """ self.delay(pre_dl) self.m.scroll(horizontal=-n) self.delay(post_dl) def move_to(self, x, y, pre_dl=None, post_dl=None): """Move mouse to (x, y) **中文文档** 移动鼠标到 (x, y) 的坐标处。 """ self.delay(pre_dl) self.m.move(x, y) self.delay(post_dl) def drag_and_release(self, start_x, start_y, end_x, end_y, pre_dl=None, post_dl=None): """Drag something from (start_x, start_y) to (end_x, endy) **中文文档** 从start的坐标处鼠标左键单击拖曳到end的坐标处 start, end是tuple. 格式是(x, y) """ self.delay(pre_dl) self.m.press(start_x, start_y, 1) self.m.drag(end_x, end_y) self.m.release(end_x, end_y, 1) self.delay(post_dl) #--- Keyboard Single Key --- def tap_key(self, key_name, n=1, interval=0, pre_dl=None, post_dl=None): """Tap a key on keyboard for ``n`` times, with ``interval`` seconds of interval. Key is declared by it's name Example:: bot.tap_key("a") bot.tap_key(1) bot.tap_key("up") bot.tap_key("space") bot.tap_key("enter") bot.tap_key("tab") **中文文档** 以 ``interval`` 中定义的频率按下某个按键 ``n`` 次。接受按键名作为输入。 """ key = self._parse_key(key_name) self.delay(pre_dl) self.k.tap_key(key, n, interval) self.delay(post_dl) def enter(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press enter key n times. **中文文档** 按回车键/换行键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.enter_key, n, interval) self.delay(post_dl) def backspace(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press backspace key n times. **中文文档** 按退格键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.backspace_key, n, interval) self.delay(post_dl) def space(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press white space key n times. **中文文档** 按空格键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.space_key, n) self.delay(post_dl) def fn(self, i, n=1, interval=0, pre_dl=None, post_dl=None): """Press Fn key n times. **中文文档** 按 Fn 功能键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.function_keys[i], n, interval) self.delay(post_dl) def tab(self, n=1, interval=0, pre_dl=None, post_dl=None): """Tap ``tab`` key for ``n`` times, with ``interval`` seconds of interval. **中文文档** 以 ``interval`` 中定义的频率按下某个tab键 ``n`` 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.tab_key, n, interval) self.delay(post_dl) def up(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press up key n times. **中文文档** 按上方向键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.up_key, n, interval) self.delay(post_dl) def down(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press down key n times. **中文文档** 按下方向键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.down_key, n, interval) self.delay(post_dl) def left(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press left key n times **中文文档** 按左方向键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.left_key, n, interval) self.delay(post_dl) def right(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press right key n times. **中文文档** 按右方向键 n 次。 """ self.delay(pre_dl) self.k.tap_key(self.k.right_key, n, interval) self.delay(post_dl) def delete(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres delete key n times. **中文文档** 按 delete 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.delete_key, n, interval) self.delay(post_dl) def insert(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres insert key n times. **中文文档** 按 insert 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.insert_key, n, interval) self.delay(post_dl) def home(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres home key n times. **中文文档** 按 home 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.home_key, n, interval) self.delay(post_dl) def end(self, n=1, interval=0, pre_dl=None, post_dl=None): """Press end key n times. **中文文档** 按 end 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.end_key, n, interval) self.delay(post_dl) def page_up(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres page_up key n times. **中文文档** 按 page_up 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.page_up_key, n, interval) self.delay(post_dl) def page_down(self, n=1, interval=0, pre_dl=None, post_dl=None): """Pres page_down key n times. **中文文档** 按 page_down 键n次。 """ self.delay(pre_dl) self.k.tap_key(self.k.page_down, n, interval) self.delay(post_dl) #--- Keyboard Combination --- def press_and_tap(self, press_key, tap_key, n=1, interval=0, pre_dl=None, post_dl=None): """Press combination of two keys, like Ctrl + C, Alt + F4. The second key could be tapped for multiple time. Examples:: bot.press_and_tap("ctrl", "c") bot.press_and_tap("shift", "1") **中文文档** 按下两个键的组合键。 """ press_key = self._parse_key(press_key) tap_key = self._parse_key(tap_key) self.delay(pre_dl) self.k.press_key(press_key) self.k.tap_key(tap_key, n, interval) self.k.release_key(press_key) self.delay(post_dl) def press_two_and_tap(self, press_key1, press_key2, tap_key, n=1, interval=0, pre_dl=None, post_dl=None): """Press combination of three keys, like Ctrl + Shift + C, The tap key could be tapped for multiple time. Examples:: bot.press_and_tap("ctrl", "shift", "c") **中文文档** 按下三个键的组合键。 """ press_key1 = self._parse_key(press_key1) press_key2 = self._parse_key(press_key2) tap_key = self._parse_key(tap_key) self.delay(pre_dl) self.k.press_key(press_key1) self.k.press_key(press_key2) self.k.tap_key(tap_key, n, interval) self.k.release_key(press_key1) self.k.release_key(press_key2) self.delay(post_dl) def ctrl_c(self, pre_dl=None, post_dl=None): """Press Ctrl + C, usually for copy. **中文文档** 按下 Ctrl + C 组合键, 通常用于复制。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("c") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_v(self, pre_dl=None, post_dl=None): """Press Ctrl + V, usually for paste. **中文文档** 按下 Ctrl + V 组合键, 通常用于粘贴。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("v") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_x(self, pre_dl=None, post_dl=None): """Press Ctrl + X, usually for cut. **中文文档** 按下 Ctrl + X 组合键, 通常用于剪切。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("x") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_z(self, pre_dl=None, post_dl=None): """Press Ctrl + Z, usually for undo. **中文文档** 按下 Ctrl + Z 组合键, 通常用于撤销上一次动作。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("z") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_y(self, pre_dl=None, post_dl=None): """Press Ctrl + Y, usually for redo. **中文文档** 按下 Ctrl + Y 组合键, 通常用于重复上一次动作。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("y") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_a(self, pre_dl=None, post_dl=None): """Press Ctrl + A, usually for select all. **中文文档** 按下 Ctrl + A 组合键, 通常用于选择全部。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("a") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_f(self, pre_dl=None, post_dl=None): """Press Ctrl + F, usually for search. **中文文档** 按下 Ctrl + F 组合键, 通常用于搜索。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key("f") self.k.release_key(self.k.control_key) self.delay(post_dl) def ctrl_fn(self, i, pre_dl=None, post_dl=None): """Press Ctrl + Fn1 ~ 12 once. **中文文档** 按下 Ctrl + Fn1 ~ 12 组合键。 """ self.delay(pre_dl) self.k.press_key(self.k.control_key) self.k.tap_key(self.k.function_keys[i]) self.k.release_key(self.k.control_key) self.delay(post_dl) def alt_fn(self, i, pre_dl=None, post_dl=None): """Press Alt + Fn1 ~ 12 once. **中文文档** 按下 Alt + Fn1 ~ 12 组合键。 """ self.delay(pre_dl) self.k.press_key(self.k.alt_key) self.k.tap_key(self.k.function_keys[i]) self.k.release_key(self.k.alt_key) self.delay(post_dl) def shift_fn(self, i, pre_dl=None, post_dl=None): """Press Shift + Fn1 ~ 12 once. **中文文档** 按下 Shift + Fn1 ~ 12 组合键。 """ self.delay(pre_dl) self.k.press_key(self.k.shift_key) self.k.tap_key(self.k.function_keys[i]) self.k.release_key(self.k.shift_key) self.delay(post_dl) def alt_tab(self, n=1, pre_dl=None, post_dl=None): """Press Alt + Tab once, usually for switching between windows. Tab can be tapped for n times, default once. **中文文档** 按下 Alt + Tab 组合键, 其中Tab键按 n 次, 通常用于切换窗口。 """ self.delay(pre_dl) self.k.press_key(self.k.alt_key) self.k.tap_key(self.k.tab_key, n=n, interval=0.1) self.k.release_key(self.k.alt_key) self.delay(post_dl) #--- Other --- def type_string(self, text, interval=0, pre_dl=None, post_dl=None): """Enter strings. **中文文档** 从键盘输入字符串, interval是字符间输入时间间隔, 单位是秒。 """ self.delay(pre_dl) self.k.type_string(text, interval) self.delay(post_dl) def copy_text_to_clipboard(self, text): """Copy text to clipboard. **中文文档** 拷贝字符串到剪贴板。 """ pyperclip.copy(text)
class Bot(): def __init__(self): self.mouse = PyMouse() self.keyboard = PyKeyboard() def Delay(self, n): time.sleep(n) """ ====== Mouse Macro ====== """ def Left_click(self, x, y, n=1, dl=0): """在屏幕某点左键点击若干次 """ self.Delay(dl) self.mouse.click(x, y, 1, n) def Right_click(self, x, y, n=1, dl=0): """在屏幕某点右键点击若干次 """ self.Delay(dl) self.mouse.click(x, y, 2, n) def Double_click(self, x, y, dl=0): """在屏幕的某点双击 """ self.Delay(dl) self.mouse.click(x, y, 1, n=2) def Scroll_up(self, n, dl=0): """鼠标滚轮向上n次 """ self.Delay(dl) self.mouse.scroll(vertical=n) def Scroll_down(self, n, dl=0): """鼠标滚轮向下n次 """ self.Delay(dl) self.mouse.scroll(vertical=-n) def Move_to(self, x, y, dl=0): """鼠标移动到x, y的坐标处 """ self.Delay(dl) self.mouse.move(x, y) def Drag_and_release(self, start, end, dl=0): """从start的坐标处鼠标左键单击拖曳到end的坐标处 start, end是tuple. 格式是(x, y) """ self.Delay(dl) self.mouse.press(start[0], start[1], 1) self.mouse.drag(end[0], end[1]) self.Delay(0.1) self.mouse.release(end[0], end[1], 1) def Screen_size(self): width, height = self.mouse.screen_size() return width, height def WhereXY(self): x_axis, y_axis = self.mouse.position() return x_axis, y_axis """ ====== Keyboard Macro ====== """ """COMBINATION组合键""" """Ctrl系列""" def Ctrl_c(self, dl=0): """Ctrl + c 复制 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("c") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_x(self, dl=0): """Ctrl + x 剪切 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("x") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_v(self, dl=0): """Ctrl + v 粘贴 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("v") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_z(self, dl=0): """Ctrl + z 撤销上一次操作 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("z") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_y(self, dl=0): """Ctrl + y 重复上一次操作 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("y") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_a(self, dl=0): """Ctrl + a 全选 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key("a") self.keyboard.release_key(self.keyboard.control_key) def Ctrl_Fn(self, n, dl=0): """Ctrl + Fn1~12 组合键 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.control_key) self.keyboard.tap_key(self.keyboard.function_keys[n]) self.keyboard.release_key(self.keyboard.control_key) """Alt系列""" def Alt_Tab(self, dl=0): """Alt + Tab 组合键 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.alt_key) self.keyboard.tap_key(self.keyboard.tab_key) self.keyboard.release_key(self.keyboard.alt_key) def Alt_Fn(self, n, dl=0): """Alt + Fn1~12 组合键 """ self.Delay(dl) self.keyboard.press_key(self.keyboard.alt_key) self.keyboard.tap_key(self.keyboard.function_keys[n]) self.keyboard.release_key(self.keyboard.alt_key) """SINGLE KEY单个键盘键""" def Up(self, n=1, dl=0): """上方向键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.up_key, n) def Down(self, n=1, dl=0): """下方向键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.down_key, n) def Left(self, n=1, dl=0): """左方向键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.left_key, n) def Right(self, n=1, dl=0): """右方向键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.right_key, n) def Enter(self, n=1, dl=0): """回车键/换行键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.enter_key, n) def Delete(self, n=1, dl=0): """删除键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.delete_key, n) def Back(self, n=1, dl=0): """退格键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.backspace_key, n) def Space(self, n=1, dl=0): """空格键n次 """ self.Delay(dl) self.keyboard.tap_key(" ", n) def Fn(self, n, dl=0): """功能键n次 """ self.Delay(dl) self.keyboard.tap_key(self.keyboard.function_keys[n]) def Char(self, char, n=1, dl=0): """输入任意单字符n次,只要能在键盘上打出来的字符都可以 """ if len(char) == 1: self.Delay(dl) self.keyboard.tap_key(char) else: raise Exception("""method "Char()" can only take one character.""") def Type_string(self, text, interval=0, dl=0): """键盘输入字符串,interval是字符间输入时间间隔,单位"秒" """ self.Delay(dl) self.keyboard.type_string(text, interval)
class mk(object): def getMousePosition(self): mouseposition = self.mouse.position() return np.array([mouseposition[0], mouseposition[1]]) def __init__(self): self.mouse = PyMouse() self.keyboard = PyKeyboard() self.multikey_mapping = {"cmdd": (["cmd"], "d"), "shiftd": (["shift"], "d")} self.boundary = [ 0, 0, AppKit.NSScreen.mainScreen().frame().origin.x + AppKit.NSScreen.mainScreen().frame().size.width, AppKit.NSScreen.mainScreen().frame().origin.y + AppKit.NSScreen.mainScreen().frame().size.height, ] def nKeysSameTime(self, list_of_mod, tap_key): for key in list_of_mod: self.keyboard.press_key(key) sleep(0.1) self.keyboard.tap_key(tap_key) for key in list_of_mod: self.keyboard.release_key(key) def decompMultiKey(self, key): (mod, tap_key) = self.multikey_mapping[key] return (mod, tap_key) def nKeysSequential(self, list_of_keys): for key in list_of_keys: try: self.keyboard.tap_key(key) except RuntimeError: try: decomp = self.decompMultiKey(key) except: raise RuntimeError("Key %s not implemented" % key) self.nKeysSameTime(decomp[0], decomp[1]) sleep(0.15) def mouseEvent(self, thetype, pos_vec): posx = pos_vec[0] posy = pos_vec[1] theEvent = CGEventCreateMouseEvent(None, thetype, (posx, posy), kCGMouseButtonLeft) CGEventPost(kCGHIDEventTap, theEvent) def mouseMove(self, pos_vec): if pos_vec[0] < self.boundary[0]: posx = self.boundary[0] elif pos_vec[0] > self.boundary[2]: posx = self.boundary[2] else: posx = pos_vec[0] if pos_vec[1] < self.boundary[1]: posy = self.boundary[1] elif pos_vec[1] > self.boundary[3]: posy = self.boundary[3] else: posy = pos_vec[1] self.mouse.move(posx, posy) # self.mouseEvent(kCGEventMouseMoved, posx, posy) def mouseClick(self, pos_vec): posx = pos_vec[0] posy = pos_vec[1] self.mouse.press(posx, posy, button=1) self.mouse.release(posx, posy, button=1) # self.mouseEvent(kCGEventLeftMouseDown, posx, posy) # self.mouseEvent(kCGEventLeftMouseUp, posx, posy) def mouseDrag(self, posx, posy): self.mouse.press(self.mouse.position()[0], self.mouse.position()[1]) self.mouse.drag(posx, posy) self.mouse.release(posx, posy)
#coding=utf-8 from pymouse import PyMouse import time import random #whiteboard drawing m = PyMouse() for i in range(1, 500, 1): x = random.randint(365, 1191) y = random.randint(182, 755) m.drag(x, y) time.sleep(random.randint(0, 1))
print("Drawing Size:", drawing_size) print("Let go of the mouse!") for countdown in range(2, 0, -1): print(countdown, "...") time.sleep(1) print("Starting to plot") # Moving mouse to center m.move(center[0], center[1]) # # Doing single click there # m.click(center[0], center[1]) # Drawing a box around the drawing area: if draw_border: m.move(top_left[0], top_left[1]) time.sleep(sleep_time) m.drag(top_left[0], bottom_right[1]) time.sleep(sleep_time) m.drag(bottom_right[0], bottom_right[1]) time.sleep(sleep_time) m.drag(bottom_right[0], top_left[1]) time.sleep(sleep_time) m.drag(top_left[0], top_left[1]) time.sleep(sleep_time) img = Image.open(os.path.join("images", image_file)) # Making image bw: thresh = 200 fn = lambda x: 255 if x > thresh else 0 img = img.convert('L').point(fn, mode='1') # img = img.convert('1') # summarize some details about the image
def run(self): global running last_time = datetime.datetime.now() m=PyMouse() self.settings() measure = str(datetime.datetime.now() - last_time).split(":", 1)[1].split(":", 1)[1] data = None X,Y,CX,CY,LX,LY,dirX,dirY=0,0,0,0,0,0,0,0 CXX,CYY,LXX,LYY=0,0,0,0 max_steps=120 click_lock=0 accelX=0 accelY=0 print "Started " + str(self) XX = range(0) YY = range(0) screen_dim = m.screen_size() print "Screen Xdim = " + str(screen_dim[0]) print "Screen Ydim = " + str(screen_dim[1]) current_pos = m.position() while running: if not reciever.empty(): data=str(reciever.get_nowait()).split("\n",1)[0] #print "Data received: " + str(data) reciever.task_done() current_pos = m.position() last_time = datetime.datetime.now() if (len(XX)>2 or len(YY)>2) and float(measure)>0.2: if len(XX)>0:XX.pop(0) if len(YY)>0:YY.pop(0) if re.match(".*ROW", str(data)) is not None: CY = int(data.split(" TPRow",1)[0].split("ROW",1)[1]) CX = LX #print "Row data: " + str(CY) #print "Col data: " + str(CX) data=None if re.match(".*COL", str(data)) is not None: CX = int(data.split(" TPCol",1)[0].split("COL",1)[1]) CY = LY #print "Row data: " + str(CY) #print "Col data: " + str(CX) data=None if (CY is not None and CX is not None) and float(measure)<0.125: if (CX-LX)>0 and CX!=LX:XX.append(1) elif (CX-LX)<0 and CX!=LX:XX.append(-1) elif CX!=LX:XX.append(0) if (CY-LY)>0 and CY!=LY:YY.append(1) elif (CY-LY)<0 and CY!=LY:YY.append(-1) elif CY!=LY:YY.append(0) dirX=sum(XX)+(self.divider(1,LX)) dirY=sum(YY)+(self.divider(1,LY)) if float(measure)<0.025 and float(measure)>0.0175: #print str(measure) accelX,accelY=6,5 elif float(measure)>0.025 and float(measure)<0.05:accelX,accelY=4,3 elif float(measure)>0.05 and float(measure)<0.075:accelX,accelY=3,2 elif float(measure)>0.075 and float(measure)<0.1:accelX,accelX=2,1 else:accelX,accelY=1,1 if int(dirX)==0: accelX=0 if int(dirY)==0: accelY=0 targetX=current_pos[0]+(dirX*accelX) targetY=current_pos[1]+(dirY*accelY) if (current_pos[0]>0 and current_pos[0]<screen_dim[0]) and (current_pos[1]>0 and current_pos[1]<screen_dim[1]): if (targetX<screen_dim[0]) and (targetX>0) and (targetY<screen_dim[1]) and (targetY>0): if click_lock==1:m.drag((targetX),targetY) else:m.move((targetX),targetY) elif (current_pos[0]<=0) or (current_pos[1]<=0): if dirX>0: m.move((1+dirX),current_pos[1]) elif dirY>0: m.move(current_pos[0],(dirY+1)) elif current_pos[0]>=screen_dim[0]: if dirX<0: m.move(((screen_dim[0]-2)+dirX),(current_pos[1]-2)) if len(XX)>=5 or len(YY)>=5: if len(XX)>0:XX.pop(0) if len(YY)>0:YY.pop(0) last_time = datetime.datetime.now() LX,LY=CX,CY CX,CY=None,None if re.match(".*LCLK.*LCLK", str(data)) is not None and click_lock is not 1: data=None click_lock=0 m.click(current_pos[0],current_pos[1],1) if re.match(".*LHLD.*LHLD", str(data)) is not None: data=None click_lock=1 m.press(current_pos[0],current_pos[1]) sender.put_nowait("LHLD1\n") if re.match(".*LRLS.*LRLS", str(data)) is not None: data=None click_lock=0 current_pos = m.position() m.release(current_pos[0],current_pos[1]) sender.put_nowait("LRLS0\n") if re.match(".*RCLK.*RCLK", str(data)) is not None: data=None click_lock=0 m.click(current_pos[0],current_pos[1],2) if re.match(".*RHLD.*RHLD", str(data)) is not None: data=None click_lock=1 m.press(current_pos[0],current_pos[1]) sender.put_nowait("RHLD1\n") if re.match(".*RRLS.*RRLS", str(data)) is not None: data=None click_lock=0 m.release(current_pos[0],current_pos[1]) sender.put_nowait("RRLS0\n") if re.match("KEYx.*", str(data)) is not None: scancode=str(data).split(" ",1)[0].strip() action=str(data).split(" ",1)[1].strip() self.parse_scancode(scancode, action) data=None click_lock=0 time.sleep(0.005) measure = str(datetime.datetime.now() - last_time).split(":", 1)[1].split(":", 1)[1]