weixin_43383962 2023-06-24 15:20 采纳率: 100%
浏览 52
已结题

python使用大漠找图点击后不再寻找下一个图问题

#python使用大漠找图问题,找到网页上的图后,点击以后,就没有了反应

import win32com.client
import time
import dm


dm = win32com.client.Dispatch('dm.dmsoft')  # 调用大漠插件
dm.setDict(0, 'c:\dm_soft.txt')
dm.SetPath("C:\dmtw")
print(dm.ver())  # 输出版本号




a = 0
while a == 0:
    dm_ret = dm.FindStr(0, 0, 1920, 1080, "草稿箱", "3ecd83-a2e4c2", '0.7', 'X', 'Y')
    x = dm_ret[1]
    y = dm_ret[2]
    print(x, y)
    if x < 0 and y < 0:
        print("未找到草稿箱")
    else:
        a = a + 1
        dm.MoveTo(x + 20, y + 10)
        dm.LeftClick()

time.sleep(2000)
#问题在这出现,点击后不再找图,如果把下面的代码挪到上面,可以找到,我感觉应该是窗口指向不对,但却不知道如何处置
a=0
while a == 0:
    dm_ret = dm.FindPic(0, 0, 1920, 1080,"新的创作.bmp", 000000,0.9,0, 'X', 'Y')
    #dm_ret = dm.FindStr(1712,283,1773,308, "新的创作", "ffffff-77e7e5", '0.4', 'X', 'Y')
    x = dm_ret[1]
    y = dm_ret[2]
    print(x, y)
    if x < 0 and y < 0:
        print("新的创作未找到")
    else:
        a = a + 1
        dm.MoveTo(x + 20, y + 10)
        time.sleep(500)


  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-06-24 16:23
    关注

    基于new bing部分指引作答:
    根据你的描述,你在使用大漠插件进行图像识别和鼠标点击操作时遇到了问题。在第一个循环中,你成功找到了"草稿箱"图像,并进行了点击操作,但在第二个循环中,无法再次找到图像并进行点击。

    问题可能出在第二个循环中的代码逻辑上。根据你提供的代码,第一个循环执行完后,你使用了time.sleep(2000)来暂停程序执行,然后重置了变量a的值为0,接着进入了第二个循环。这可能导致第二个循环立即结束,因为a的值已经不等于0了。

    为了解决这个问题,你可以尝试在第一个循环结束后不重置a的值,直接进入第二个循环。另外,你可以使用time.sleep来等待一段时间,确保第一个点击操作完成后再执行第二个循环,以便能够在正确的窗口中进行图像查找和点击操作。

    以下是修改后的代码示例:

    import win32com.client
    import time
    
    dm = win32com.client.Dispatch('dm.dmsoft')  # 调用大漠插件
    dm.setDict(0, 'c:\dm_soft.txt')
    dm.SetPath("C:\dmtw")
    print(dm.ver())  # 输出版本号
    
    a = 0
    while a == 0:
        dm_ret = dm.FindStr(0, 0, 1920, 1080, "草稿箱", "3ecd83-a2e4c2", '0.7', 'X', 'Y')
        x = dm_ret[1]
        y = dm_ret[2]
        print(x, y)
        if x < 0 and y < 0:
            print("未找到草稿箱")
        else:
            a = a + 1
            dm.MoveTo(x + 20, y + 10)
            dm.LeftClick()
    
    time.sleep(2)  # 等待2秒,确保第一个点击操作完成
    
    a = 0
    while a == 0:
        dm_ret = dm.FindPic(0, 0, 1920, 1080,"新的创作.bmp", 000000,0.9,0, 'X', 'Y')
        x = dm_ret[1]
        y = dm_ret[2]
        print(x, y)
        if x < 0 and y < 0:
            print("新的创作未找到")
        else:
            a = a + 1
            dm.MoveTo(x + 20, y + 10)
            time.sleep(0.5)
    

    我对第一个time.sleep的参数进行了修改,将等待时间改为2秒,以确保第一个点击操作完成。你可以根据实际情况适当调整等待时间。另外,在第二个循环中,我将time.sleep(500)改为了time.sleep(0.5),以秒为单位进行等待,同样你也可以根据需要进行调整。

    希望这能解决你的问题!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月2日
  • 已采纳回答 6月24日
  • 创建了问题 6月24日

悬赏问题

  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享