from DrissionPage import Chromium
import cv2
import requests

def identify_gap(bg_src, sl_src):
    '''
    bg: 背景图片
    tp: 缺口图片
    '''
    # 读取背景图片和缺口图片
    slice_content = requests.get(url=sl_src).content
    bg_content = requests.get(url=bg_src).content
    with open('./bg_image.jpg', 'wb') as f:
        f.write(bg_content)
    with open('./front_image.png', 'wb') as f:
        f.write(slice_content)

    bg_img = cv2.imread('./bg_image.jpg')  # 背景图片
    tp_img = cv2.imread('./front_image.png')  # 缺口图片

    # 识别图片边缘
    bg_edge = cv2.Canny(bg_img, 100, 200)
    tp_edge = cv2.Canny(tp_img, 100, 200)

    # 转换图片格式
    bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
    tp_pic = cv2.cvtColor(tp_edge, 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)
    # 左上角点的坐标
    tl = max_loc
    # print(tl[0])
    # 返回缺口的X坐标
    return tl[0]

# 连接浏览器并获取浏览器对象
browser = Chromium()

# 获取标签页对象并打开网址

tab = browser.new_tab('https://dun.163.com/trial/jigsaw')
tab.wait.eles_loaded('xpath:/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div[3]/div/div/div[2]/div[3]')
xpath = 'xpath:/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div[3]/div/div/div[2]/div[2]'
slide = tab.ele(xpath)
bg_src = tab.ele('xpath:/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div[3]/div/div/div[1]/div/div[1]/img[1]').attr('src')
sl_src = tab.ele('xpath:/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[1]/div/div/div[2]/div[3]/div/div/div[1]/div/div[1]/img[2]').attr('src')

print(bg_src,sl_src)

distance = identify_gap(bg_src, sl_src)

print(bg_src,sl_src,distance)
tab.actions.hold(slide).move_to(slide).hold(slide).move(offset_x=distance+6,offset_y=3,duration=1).release()
# print(slide)

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐