Simulates a mouse left click on pixel (x,y) if x and y are provided
    If x and y are not passed to this function, a mouse click is simulated at the current (x,y)

    :param x: target x-ordinate
    :param y: target y-ordinate
    :param hold_time: length of time to hold the mouse's left button
    :return: None

def click_left(x = None, y = None, hold_time = 0):
    """
    Simulates a mouse left click on pixel (x,y) if x and y are provided
    If x and y are not passed to this function, a mouse click is simulated at the current (x,y)

    :param x: target x-ordinate
    :param y: target y-ordinate
    :param hold_time: length of time to hold the mouse's left button
    :return: None
    """

    if not x or not y:
        cursor = win32api.GetCursorPos()
        if not x:
            x = cursor[0]
        if not y:
            y = cursor[1]
    move(x, y)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)
    time.sleep(hold_time)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0)