示例#1
0
def max_apps_windows():
    """判断当前是否最小化,如果是,则点击任务栏图标,实现最大化"""

    # 找到最大化窗口图标位置
    im, bin, xrange, yrange = read_im_info('界面_已最大化窗口')
    # 截图,判断匹配位置
    pic = get_screenshot()
    pic2 = to_bin_img(pic.copy(), bin)
    x, y = find_location(pic2, im, xrange, yrange, 'center')
    # 判断是否已经最大化
    if x > 0 or y > 0:
        log.info('窗口已经最大化,无需点击')
        return 0
    # 没有最大化,找到点击窗口图标
    log.info('窗口未最大化,需要最大化窗口')
    im, bin, xrange, yrange = read_im_info('界面_需最大化窗口')
    im = cut_blank(im)
    pic2 = to_bin_img(pic.copy(), bin)
    x, y = find_location(pic2, im, xrange, yrange, 'center')

    if x == -1 or y == -1:
        log.info('没有找到最大化窗口图标,请检查是否最小化或者锁频了')
        return -1
    else:
        mouse_click(x, y)
        log.info('点击窗口最大化 %d %d ,解锁交易界面' % (x, y))
示例#2
0
def unlock(passwd='123456'):
    """判断是否需要解锁界面"""
    # 找到锁屏标志
    im, bin, xrange, yrange = read_im_info('界面_解锁密码')
    # 截图,判断匹配位置
    pic = get_screenshot()
    pic2 = to_bin_img(pic.copy(), bin)
    x, y = find_location(pic2, im, xrange, yrange, 'center')
    # 判断是否锁屏
    if x == -1 or y == -1:
        log.info('交易界面没有锁定,无需解锁')
    else:
        log.info('交易界面锁定,需要解锁')
        mouse_click(x, y)
        keyboard_input(passwd)
        log.info('移动到 %d %d ,输入解锁密码' % (x, y))

        # 找到确认按钮
        im, bin, xrange, yrange = read_im_info('界面_解锁确认')
        im = cut_blank(im)
        x1 = (x - 100) / pic.shape[0] if x - 100 >= 0 else 0
        x2 = (x + 100) / pic.shape[0] if x + 100 <= pic.shape[0] else 1
        y1 = (y - 200) / pic.shape[1] if y - 200 >= 0 else 0
        y2 = (y + 200) / pic.shape[1] if y + 200 <= pic.shape[1] else 1

        xrange, yrange = [x1, x2], [y1, y2]
        pic2 = to_bin_img(pic.copy(), bin)
        xc, yc = find_location(pic2, im, xrange, yrange, 'center')
        mouse_click(xc, yc)
        log.info('点击确认按钮 %d %d ,解锁交易界面' % (xc, yc))
    return
示例#3
0
def get_position_table():
    """获取指定列的数据"""
    # 获取焦点
    get_focus()
    # 功能键F1,转到买入选项卡
    keyboard_input(function_key='F4')

    log.info('获取程序焦点,调出股票持仓查询页面')

    # 第一步是先获取屏幕截图
    pic=get_screenshot()

    log.info('获取屏幕截图')

    # 获取表格下边框,防止搜索过界
    info = config.pic_info['持仓_汇总']
    bin = info['bin']
    xrange = info['xrange']
    yrange = info['yrange']
    # 获取子图
    file = os.path.join(config.gvariable.work_path, 'pic', '持仓_汇总.png')
    print(file)
    im = read_im(file, threshold=bin)  # 因为已经是二值图,这里的阈值就没必要了
    im = cut_blank(im)
    # 获取主图的二值图
    pic2 = to_bin_img(pic.copy(), threshold=bin)
    # 接下来就是找到边界了
    maxdown,y=find_location(pic2,im,xrange,yrange,'leftup')

    log.info('获取最大搜索下边界 %d'%maxdown)

    # 开始循环获取数字串
    cols = ['持仓_证券代码', '持仓_股票余额', '持仓_可用余额', '持仓_冻结数量',
            '持仓_成本价', '持仓_市价', '持仓_市值']
    # col=cols[0]
    tables=[]
    for col in cols:
        # 获取准备好的子图信息
        info=config.pic_info[col]
        bin=info['bin']
        xrange=info['xrange']
        yrange=info['yrange']
        # 获取子图
        file=os.path.join(config.gvariable.work_path,'pic',col+'.png')
        im=read_im(file,threshold=bin)  # 因为已经是二值图,这里的阈值就没必要了
        im=cut_blank(im)
        # 获取主图的二值图
        pic2=to_bin_img(pic.copy(),threshold=bin)
        # 接下来就是获取列的信息了
        col_info=get_cols_pic_info(pic2,im,xrange,yrange,maxdown)
        tables.append(col_info)

        log.info('完成 %s 数据解析'%col)

    # 转成dataframe
    position=pd.DataFrame(tables,index=cols).T

    log.info('完成表格所有列解析\n'+str(position))

    return position
示例#4
0
def get_cols_pic_info(pic, im, xrange, yrange, maxdown=None):
    """对一列数字的图像解析,划分截取"""
    # 找到表格的最下位置,方法查找过界
    xdown=pic.shape[0]*0.9 if not maxdown else maxdown

    # 找到子图在主图的左下角和右下角坐标
    x1, y1 = find_location(pic, im, xrange, yrange, 'leftdown')
    y2 = y1+im.shape[1]
    xmax,ymax=pic.shape
    # 往左边找到边界
    while True:
        y1=y1-1
        if pic[x1,y1]==0 and y1<ymax:
            y1=y1+1
            break
    # 往右边找到边界
    while True:
        y2=y2+1
        if pic[x1,y2]==0 and y2<ymax:
            y2=y2-1
            break
    # 往下找到边界位置,并越过边界
    while True:
        x1=x1+1
        if pic[x1,y1]==0 and x1<xmax:
            x1=x1+1
            break
    # 经过前面的步骤,找打了有数字表格的位置
    xstart,ystart,yend=x1,y1,y2
    # 下面找到xend就可以切割一个区域了
    notend=True
    nums=[]
    while notend:
        # 往下找到分割线
        x,xend=xstart,xstart
        while True:
            x=x+1
            if pic[x,ystart]==0 and x < xdown:  # 找到边界并且没有越界
                xend=x-1
                nums.append(pic[xstart: xend, y1:y2])
                # 接着越过边界,找到下一个查找开始坐标
                while True:
                    x=x+1
                    if pic[x,y1]==1 and x<xdown:
                        xstart=x
                        break
                    elif x>=xdown:
                        break
                break  # 既然找到了就接着开始下一行数字查找
            # 如果找了很久没有找到,说明已经到头了
            if x-xstart>30 or x>=xdown:
                notend=False
                break
    # 接下来就是解析nums数字
    nums=[rec_nums(num) for num in nums]
    # 最后返回该列数据
    return nums
示例#5
0
def get_focus():
    """获取界面焦点"""
    im, bin, xrange, yrange = read_im_info('界面_标题')
    # 截屏
    pic = get_screenshot()
    pic = to_bin_img(pic, bin)
    # 查找位置
    x, y = find_location(pic, im, xrange, yrange, 'center')
    mouse_click(x, y)
    log.info('点击,获取界面焦点 %d %d' % (x, y))
示例#6
0
def get_coordinate(pic, im_name):
    """获取指定子图的坐标"""
    # 读取子图,及其config数据
    file = os.path.join(config.gvariable.picpath, im_name + '.png')
    info = config.pic_info[im_name]
    bin = info['bin']
    xrange = info['xrange']
    yrange = info['yrange']
    # 读取子图,转成二值图
    im = read_im(file, info['bin'])
    im = cut_blank(im)
    # 主图也转成二值图
    pic2 = to_bin_img(pic, threshold=bin)
    # 找到四个角坐标
    x1, y1 = find_location(pic2, im, xrange, yrange, 'leftup')
    x2, y2 = x1 + im.shape[0], y1 + im.shape[1]
    return x1, x2, y1, y2
示例#7
0
def get_app_focus():
    """点击一下软件的任务栏图标,获取焦点"""
    # 获取图标信息
    name = '界面_任务栏图标'
    im, bin, xrange, yrange = read_im_info(name)
    # 截屏
    pic = get_screenshot()
    pic = to_bin_img(pic, bin)
    # 查找位置
    x_ico, y_ico = find_location(pic, im, xrange, yrange, 'center')

    log.info('找到任务栏图标位置 %d %d' % (x_ico, y_ico))

    # 接下来是鼠标点击
    # 由于无法实现鼠标点击任务栏图标事件,暂时空着
    #
    return x_ico, y_ico
示例#8
0
def buy(symbol, price, amount):
    """买入股票"""
    # 获取焦点
    get_focus()
    # 功能键F1,转到买入选项卡
    keyboard_input(function_key='F1')

    log.info('获取程序焦点,调出股票买入页面')

    # 截图
    pic = get_screenshot()
    # 获取 买入股票 标志坐标
    im, bin, xrange, yrange = read_im_info('买入_买入页')
    im = cut_blank(im)
    pic2 = to_bin_img(pic.copy(), threshold=bin)
    x, y = find_location(pic2, im, xrange, yrange, 'leftup')

    log.info('买入股票 坐标 %d %d ' % (x, y))

    # 计算其他几个标志的查找范围
    high = pic.shape[0] * 0.3
    width = pic.shape[1] * 0.3
    x1 = (x - 10) / pic.shape[0] if x - 10 >= 0 else 0
    x2 = (x + high) / pic.shape[0] if x + high <= pic.shape[0] else 1
    y1 = (y - 10) / pic.shape[1] if y - 10 > 0 else 0
    y2 = (y + width) / pic.shape[1] if y + width <= pic.shape[1] else 1

    # 获取 证券代码,买入价格,买入数量,买入
    # 证券代码
    im, bin, xrange, yrange = read_im_info('买入_证券代码')
    im = cut_blank(im)
    pic2 = to_bin_img(pic.copy(), bin)
    x_zqdm, y_zqdm = find_location(pic2, im, [x1, x2], [y1, y2], 'center')
    log.info('证券代码 坐标 %d %d ' % (x_zqdm, y_zqdm))

    # 买入价格
    im, bin, xrange, yrange = read_im_info('买入_买入价格')
    im = cut_blank(im)
    pic2 = to_bin_img(pic.copy(), bin)
    x_mrjg, y_mrjg = find_location(pic2, im, [x1, x2], [y1, y2], 'center')
    log.info('买入价格 坐标 %d %d ' % (x_mrjg, y_mrjg))

    # 买入数量
    im, bin, xrange, yrange = read_im_info('买入_买入数量')
    im = cut_blank(im)
    pic2 = to_bin_img(pic.copy(), bin)
    x_mrsl, y_mrsl = find_location(pic2, im, [x1, x2], [y1, y2], 'center')
    log.info('买入数量 坐标 %d %d ' % (x_mrsl, y_mrsl))

    # 买入确认
    im, bin, xrange, yrange = read_im_info('买入_买入确认')
    im = cut_blank(im)
    pic2 = to_bin_img(pic.copy(), bin)
    x_mrqr, y_mrqr = find_location(pic2, im, [x1, x2], [y1, y2], 'center')
    log.info('买入确认 坐标 %d %d ' % (x_mrqr, y_mrqr))

    # 重填
    im, bin, xrange, yrange = read_im_info('买入_重填')
    im = cut_blank(im)
    pic2 = to_bin_img(pic.copy(), bin)
    x_ct, y_ct = find_location(pic2, im, [x1, x2], [y1, y2], 'center')
    log.info('买入重填 坐标 %d %d ' % (x_ct, y_ct))

    # 下面买入股票
    # 重置所有输入
    mouse_click(x_ct, y_ct)
    # 输入代码
    mouse_click(x_zqdm, y_zqdm)
    keyboard_input(symbol)
    # 输入价格
    mouse_click(x_mrjg, y_mrjg)
    keyboard_input(str(price))
    # 输入数量
    mouse_click(x_mrsl, y_mrsl)
    keyboard_input(str(amount))
    # 点击确认
    mouse_click(x_mrqr, y_mrqr)

    log.info('买入 symbol=%s price=%f amount=%d' % (symbol, price, amount))
    # 后面还有弹出确认框的确认
    log.info('后面还有弹出确认框的确认, 未处理')