首页 > 其他分享 >获取给定区域内的符合颜色值的第一个和最后一个坐标

获取给定区域内的符合颜色值的第一个和最后一个坐标

时间:2024-04-29 21:35:18浏览次数:11  
标签:pyautogui point color 获取 给定 坐标 key xy click

from PIL import ImageGrab
import pyautogui
import time
import pyperclip
import numpy
def 获取给定区域内的符合颜色值的第一个和最后一个坐标(left_x:int,left_y:int,right_x:int,right_y:int,color_r:int,color_g:int,color_b:int)->list:
    '''
    注意,本函数直接截取当前屏幕的全屏画面,然后再根据给定范围来查询。
    left_x,left_y:给定区域内的左上角坐标
    right_x,right_y:给定区域内的右下角坐标
    color_r,color_g,color_b:以RGB模式表示的颜色值的R/G/B值
    返回list,若是没有找到,将返回[(-1,-1),(-1,-1)]
    '''
    key_name = "{}|{}|{}".format(color_r,color_g,color_b)
    color_dict={key_name:[]}
    pim = ImageGrab.grab()
    im = numpy.array(pim)
    y,x = numpy.where(numpy.all(im==[color_r,color_g,color_b],axis=2))
    result_xy =zip(x,y)
    result_xy_list = [(x_,y_) for x_,y_ in result_xy if (x_>=left_x and x_ <=right_x)and(y_>=left_y and y_<=right_y)]
    # print(len(result_xy_list))
    if(len(result_xy_list)>0):
        return [result_xy_list[0],result_xy_list[-1]]
    #下面的方法比较慢,但是不是不能用
    # for x in range(left_x,right_x):
    #     for y in range(left_y,right_y):
    #         color = pim.getpixel((x,y))
    #         color_key = "{}|{}|{}".format(color[0],color[1],color[2])
    #         if(color_key==key_name):
    #             color_dict[color_key].append((x,y))
    # color_dict[key_name].sort(key=lambda x:(x[1]))
    # if(len(color_dict[key_name])>0):
    #     return [color_dict[key_name][0],color_dict[key_name][-1]]
    else:
        return [(-1,-1),(-1,-1)];

def main():
    # 屏幕分辨率为3200*1800
    # 浏览器关闭垂直标签,处于右半边屏幕
    
    #移动鼠标到空白处:2246,127 ,然后左键单击一下。
    pyautogui.click(x=2246,y=127)
    pyautogui.hotkey('ctrl', 's')
    time.sleep(2)
    pyautogui.press('enter')
    time.sleep(0.2)
    pyautogui.hotkey('alt', 'y')
    time.sleep(2)
    pyautogui.hotkey('ctrl', 'home')
    #移动鼠标到空白处:2246,127,然后左键单击一下,避免浏览器下载窗口弹出的影响
    pyautogui.click(x=2246,y=127)
    #移动到指定点,然后按下鼠标左键;复制标题
    pyautogui.moveTo(x=1965,y=397)
    pyautogui.mouseDown()
    time.sleep(1)
    pyautogui.moveTo(x=3175,y=397)
    pyautogui.mouseUp()
    pyautogui.hotkey('ctrl', 'c')
    print("已保存:{}".format(pyperclip.paste()))
    pyautogui.hotkey('ctrl', 'f')
    time.sleep(0.2)
    pyautogui.hotkey('ctrl', 'v')
    time.sleep(1)
    pyautogui.hotkey('ctrl', 'end')
    time.sleep(0.2)
    point_xy=None
    found_num=0
    while True:
        point_xy  = 获取给定区域内的符合颜色值的第一个和最后一个坐标(1605,100,1954,1530,255,255,0)
        if(point_xy[0][0]==-1):
            point_xy  = 获取给定区域内的符合颜色值的第一个和最后一个坐标(1605,100,1954,1530,255,150,50)
            if(point_xy[0][0]==-1):
                if found_num >=10:
                    input("没有找到对应位置,请处理。处理完成请随意在控制台输入一个字符。")
                    found_num = 0
            else:
                break
        else:
            break
        if(found_num % 4 == 0):
            #向下概率更大
            pyautogui.click(x=1940,y=195)
        else:
            pyautogui.click(x=1940,y=1590)
            # time.sleep(0.2)
            # pyautogui.click(x=1940,y=1590)
        found_num += 1
    #一行文字的高度是17,然后再向右便宜24像素
    click_point_x = point_xy[0][0] + 24
    click_point_y = point_xy[1][1] + 17
    print("点击({},{})".format(click_point_x,click_point_y))
    pyautogui.click(x=click_point_x,y=click_point_y)
    time.sleep(2) 
if __name__ == "__main__":
    # print(获取给定区域内的符合颜色值的第一个和最后一个坐标(1605,341,1954,1513,255,255,0))
    while True:
        main()
        time.sleep(2)

 

标签:pyautogui,point,color,获取,给定,坐标,key,xy,click
From: https://www.cnblogs.com/love-DanDan/p/18166674

相关文章

  • C#获取CPU使用率 - 开源研究系列文章
          这次想编写一个CPU使用率的小应用,于是就用此例子来记录了这个代码。下面是源码:usingSystem;usingSystem.Diagnostics;usingSystem.Windows.Forms;namespaceWindowsFormsApp{publicpartialclassForm1:Form{///<summary>......
  • 使用springboot+thymeleaf 在html中获取session
    Controllerimportorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.GetMapping;importjavax.servlet.http.HttpSession;@ControllerpublicclassUserController{@GetMappin......
  • java获取树状结构
    /***转成树状结构*/publicList<DictVO>toTree(List<DictVO>list){List<DictVO>treelist=newArrayList<DictVO>();for(DictVOoutBean:list){for(DictVOinBean:list){Longoutid=outBean.getId();Longinpid=inBean......
  • 根据key 获取父级 和本身 key值
    vardata=[{key:1,name:"1",pd:0,age:60,address:"1",children:[{key:11,name:"1-1",age:42,},{key:12,name:"1-2&quo......
  • vue:子组件从后台获取数据期间,父组件被遮罩覆盖
    效果:父组件代码<template><el-containerv-loading="loading"class="container"element-loading-background="rgba(1,35,54,0.8)"><h1>这是父组件</h1><HelloWorldmsg="Welcometo......
  • Redis中对数组的获取类型转换
    1#####Redis中对数组的获取类型转换23```java4//判断redis中键值key是否存在;5BooleancarWeizi_redis_service=redisService.hasKey("carWeizi_redis_service");6if(carWeizi_redis_service){7//获取对应的list数组传入时re......
  • SqlServer中根据某几列获取重复的数据将其删除并保留最新一条
    有时候,我们某个数据表中,可能有几列的数据都是一样的,此时我们可能想查询出这几列数据相同的所有数据行,并保留最新一条,将其他重复的数据删除。......
  • blender python api 获取所有顶点组并将各自的顶点组转换为对应的颜色属性
    1.选中物体,进入权重绘制模式2.代码importbpy#获取当前活动的物体obj=bpy.context.object#确保物体是网格类型ifobj.type!='MESH':print("当前激活的对象不是网格类型。")#exit()#遍历所有顶点组forvg_nameinobj.vertex_groups.keys():#获......
  • ICESat-2 从ATL08中获取ATL03分类结果
    ICESat-2ATL03数据和ATL08数据的分段距离不一致,ATL08在ATL03的基础上重新分段,并对分段内的数据做处理得到一系列的结果,详情见数据字典:ATL08ProductDataDictionary(nsidc.org)ATL08使用DRAGANN算法对ATL03数据做了去噪处理,并使用分类算法对每个光子进行分类标志值标志......
  • 2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色
    2024-04-27:用go语言,在一个下标从1开始的8x8棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。需要注意的是,白色车可以垂直或水平移动,而白色象可以沿对角线移动,它们不能跳过其他棋子。如果白色车或白色象......