Example #1
0
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))
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
 #登录失败,需要模拟拖动滑块验证
 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
Example #6
0
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)
Example #7
0
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)
Example #8
0
	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
Example #10
0
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)
Example #11
0
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)
Example #12
0
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)
Example #13
0
#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))
Example #14
0
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
Example #15
0
	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]