基于影刀RPA及Python实现缺口滑块

该功能主要运用到的模块有:re、cv2、影刀元素库 

该代码基于影刀编辑器,再PyCharm以及VSCode无法运行

红色:滑块图片;黄色:缺口图片;绿色:滑块

dir_path = r'C:\img'
if os.path.exists(dir_path):shutil.rmtree(dir_path)  # 删除文件夹
os.makedirs(dir_path)  # 创建文件夹


def slider_treatment(web_page, slider_selector='滑块', mode='chrome'):#slider_selector可以不管
    web_page = xbot.web.get_active(mode)  #获取当前激活的网页对象
    if not web_page.wait_appear('滑块', timeout=5):return True   #判断是否有滑块按钮,存在滑块按钮则进行验证
    back_img_url_html = web_page.find("滑块图片").get_html()    #获取背景图片html
    block_img_url_html = web_page.find("缺口图片").get_html()   #获取缺口图片html

    # 利用正则将图片链接从html中匹配出来
    back_img_url, block_img_url = re.search(r'src="([^"]+)"', back_img_url_html).group(1), re.search(r'src="([^"]+)"', block_img_url_html).group(1)
    print(back_img_url)
    print(block_img_url)
    # 由于是本地识别,所以需要将文件保存到本地
    bj_img_path = download_image_new(back_img_url, dir_path)
    time.sleep(1)
    qk_img_path = download_image_new(block_img_url, dir_path)
    bj_img_a = cv2.imread(bj_img_path)
    qk_img = cv2.imread(qk_img_path)
    size = bj_img_a.shape  #获取图片尺寸
    # print(size)
    img_size = 340 / size[1]  #获取图片缩放比,图片在网站的宽度和下载下载之后的宽度可能存在差异,计算缩放比便于后面处理
    bj_img = cv2.Canny(bj_img_a, 100, 200)
    qk_img = cv2.Canny(qk_img, 100, 200)
    bg_pic = cv2.cvtColor(bj_img, cv2.COLOR_GRAY2RGB)
    tp_pic = cv2.cvtColor(qk_img, cv2.COLOR_GRAY2RGB)
    res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 寻找最优匹配
    X = max_loc[0]
    th, tw = tp_pic.shape[:2]
    tl = max_loc  # 左上角点的坐标
    br = (tl[0] + tw, tl[1] + th)  # 右下角点的坐标
    cv2.rectangle(bj_img_a, tl, br, (0, 0, 255), 2)  # 绘制矩形
    # plt_show(bj_img_a)
    # print(X * img_size)
    web_page.find('滑块').drag_to(left=round(X * img_size))  #滑动滑块按钮,计算出来的X坐标乘缩放比
    if not web_page.wait_appear('滑块', timeout=5):return True   #判断是否处理完成
    return False

def download_image_new(url, save_path):
    try:
        save_path = os.path.join(save_path, f'{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}.png')
        # Send a GET request to the URL
        response = requests.get(url)
        response.raise_for_status()  # Raise an error for bad status codes

        # Open a file in binary write mode and save the image
        with open(save_path, 'wb') as file:
            file.write(response.content)

        print(save_path)
        return save_path
    except requests.exceptions.RequestException as e:
        print(f"Error downloading image: {e}")
        return False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值