import cv2 as cv
import numpy as np

from PIL import Image, ImageDraw, ImageFont

import os

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver as driver1

resultlist = []
device = 'PC'
path = os.path.abspath('..')
imglist = []
show =1

url="http://www.bjjs.gov.cn/bjjs/index/index.shtml"
driver = driver1.Chrome(executable_path=path+"/Program/chromedriver")

"""
首先:加载原始图像和要搜索的图像模板
其次:OpenCV对原始图像进行处理,创建一个灰度版本
再次:在灰度图像里进行处理和查找匹配
最后:使用相同的坐标在原始图像中进行还原并输出
"""

def opencv_elementActive(value=0.8, type='OK', msg='流程', title='测试_冀', desc='北京建房委员会', devices='PC'):
    try:
       target = path+r"\Run\Demo2\pic\PC\BJ_GOV\background\img.png"
       temp = r"C:\Users\lenovo\Desktop\newI\UI\temp.png"

       # 加载原始的RGB图像
       img_rgb = cv.imread(target)
       # 色彩空间转换(因为在opencv中默认的颜色空间是BGR)
       # 创建一个原始图像的灰度版本,所有操作在灰度版本中处理
       img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
       # 加载将要搜索的图像模板
       template = cv.imread(temp, 0)

       # 高斯函数对图形进行高斯滤波
       merged = cv.GaussianBlur(np.uint8(np.clip((1.0 * img_rgb - 60), 0, 200)), (0, 0), 3)
       # shape 图片的尺寸
       w, h = template.shape[::-1]

       # 使用matchTemple对原始灰度图像和图像模板进行匹配(在原始图像中查找并匹配图像模板中的内容,并设置阈值)
       res = cv.matchTemplate(img_gray, template, cv.TM_CCOEFF_NORMED)
       threshold = value
       pt = []
    except Exception as e:
        print(" Error:",e)
    try:
        loc = np.where(res >= threshold)
        # 使用灰度图像中的坐标对原始RGB图像进行标记
        for pt in zip(*loc[::-1]):
            cv.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 30, 255), 10)
            cropImg=img_rgb[pt[1]:pt[1] + h,pt[0]:pt[0] + w]
            merged[pt[1]:pt[1] + h,pt[0]:pt[0] + w] = cropImg

        creatImgDebug(merged,pt,h)
        x, y = eval("pt[0]+w/2,pt[1]+h/2")
        click(x,y)
    except Exception as e:

        print("===================================================================================================")

def creatImgDebug(img_rgb, pt, h):
    cv_im = cv.cvtColor(img_rgb, cv.COLOR_BGR2RGB)
    # arary转换成image
    pil_im = Image.fromarray(cv_im)
    # 创建绘制对象
    draw = ImageDraw.Draw(pil_im)
    font = ImageFont.truetype(path + "/Program/FZYTK.TTF", 80, encoding="utf-8")
    font1 = ImageFont.truetype(path + "/Program/FZYTK.TTF", 40, encoding="utf-8")
    draw.text((80, 50), "图像识别 {}检测:成功".format("图片识别成功"), (40, 250, 50), font=font)
    draw.text((pt[0], pt[1] + h + 20), "坐标位:%s,%s" % (pt[0], pt[1]), (250, 40, 1), font=font1)
    cv_text_im = cv.cvtColor(np.array(pil_im), cv.COLOR_RGB2BGR)
    cv.namedWindow("Target", 0)
    cv.resizeWindow("Target", 1600, 900)
    cv.moveWindow("Target", 10, 50)
    cv.imshow("Target", cv_text_im) #创建一个窗口显示图片,第一个参数是窗口名字,第二个参数是读入的图片
    cv.waitKey(1200)
    cv.destroyWindow("Target") # 删除建立的全部窗口

def click(x,y):
    actions = ActionChains(driver)
    el = driver.find_element_by_xpath('/html/body')
    actions.move_to_element_with_offset(el, x, y).perform()
    actions.move_by_offset(0,0).click().perform()
    driver.implicitly_wait(6)

def selenium_start():
    driver.get(url)
    driver.maximize_window()
    driver.implicitly_wait(4)

def screenshot():
    driver.save_screenshot(path+r"\Run\Demo2\pic\PC\BJ_GOV\background\img.png")

if __name__ == '__main__':
    """
    第一步:启动浏览器,输入网址
    第二步:截取图片,保存到相应路径
    第三步:在大图上匹配小的图片
    第四步:返回坐标,selenium点击操作
    """
    selenium_start()
    screenshot()
    opencv_elementActive()
    driver.close()

OpenCV和selenum实现点击操作的更多相关文章

  1. JS---DOM---点击操作---part1---20个案例

    点击操作:------>事件: 就是一件事, 有触发和响应, 事件源 按钮被点击,弹出对话框 按钮---->事件源 点击---->事件名字 被点了--->触发了 弹框了---& ...

  2. JS---DOM---点击操作---节点的方式---案例

    点击操作---节点的方式---案例 案例1:点击按钮,设置p变色---节点的方式做 <!DOCTYPE html> <html lang="en"> < ...

  3. c#使用UIA进行模拟点击操作

    之前,我写过一篇c#使用spy进行模拟操作的文章,有朋友在留言中提到了UIA进行操作,今天也使用UIA重新实现一次对vnc窗体的控制测试. 实现目标 在server框内填入192.168.2.200 ...

  4. opencv中对图像的像素操作

    1.对灰度图像的像素操作: #include<iostream> #include<opencv2/opencv.hpp> using namespace std; using ...

  5. 使用powershell/vbs自动化模拟鼠标点击操作

    今天想做windows上的自动化,所以才有了模拟鼠标点击的需求,先考虑用powershell实现: 首先先安装一个名为“WASP”免费可用的Powershell扩展程序,下载地址:http://was ...

  6. AutoIT: 如何通过坐标相对位置来对无法识别的Menu以及GridView进行定位点击操作

    一般情况下,GridView中的数据来自数据库,我们通过Windows Info,是无法获取GridView中的信息的.而软件定制的Menu,很多时候无法通过系统提供的WinMenuSelectIte ...

  7. Opencv YAML和XML格式文件操作详解

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/47660943 本文参考Opencv 2 ...

  8. Android 微信UI 、点击操作

    上一篇,我们介绍了微信界面的相关知识点.今天我们就来把微信的界面做出来. 首先我们新建一个layout-->LinearLayout-->weixin.xml 我们使用上中下线性布局,采用 ...

  9. 【Java】在JTable中设置鼠标监听器,点击操作对应数据

    最终效果 鼠标点击JTable中任一数据,修改相应的信息. 确定点击的行和列 package com.dao; import java.awt.event.MouseAdapter; import j ...

随机推荐

  1. Flutter 即学即用系列博客——09 MethodChannel 实现原生与 Flutter 通信(二)

    前言 上一篇我们讲解了如何通过 EventChannel 实现 Android -> Flutter 的通信. 并且也看到了 Flutter 内部 EventChannel 源码也是对 Meth ...

  2. JS数组添加删除

    栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.原文: https://www.w3cplus.com/j ...

  3. H5、C3、ES6的新特性

    H5的新特性 1.语义化标签 有利于SEO,有助于爬虫抓取更多的有效信息,爬虫是依赖于标签来确定上下文和各个关键字的权重. 语义化的HTML在没有CSS的情况下也能呈现较好的内容结构与代码结构 方便其 ...

  4. css3修改浏览器scroll默认样式

    最近公司的新项目.前端样式采用的蚂蚁金服的antDesign. 比较喜欢antDesign.BootStrap一类简约大方的前端样式库. 但是在页面布局上.包括一些选择框.默认的scroll样式简直丑 ...

  5. SuperMap iObject入门开发系列之一组件式GIS开发平台介绍

    本文是一位好友“炀炀”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢.平台介绍:SuperMap iObjects Java/.NET 是面向GIS应用系统开发者的组件式GIS开发平台,具有强 ...

  6. Dynamics 365-CRM又报看不懂的错误了

    在CRM上执行各种操作,时不时会碰到各种问题,尤其是CRM环境里包含越来越多定制的时候.有的问题在CRM弹出的错误提示框,一目了然:而有的,可能就是简单的提示:SQL Error. 这个时候我们可能都 ...

  7. json-sever 配置与应用

    先安装 node.js. 全局安装 json-server: npm install json-server -g 检查是否安装成功: json-server -h 安装好后,json-server的 ...

  8. 20年硅谷技术牛人到访DataPipeline谈:技术如何与业务平衡发展

    导读:技术人员的常态是“左手支持业务签单,右手提升系统性能”,却经常陷入技术和业务该如何平衡发展的困惑?今天,且听一位硅谷牛人分享他的平衡之道. 以个人名誉申请31个国内外技术和产品专利,中国最佳CT ...

  9. extjs ajax 请求成功也会进入failure

     Ext.Ajax.request({ url: '路径', method : 'post',   params : {     传的参数   }, success: function (action ...

  10. 自反ACL(第三组)

    一.实验拓扑 二.配置过程 此处我用了学号后两位来划分网段,注意:先把网络做通再配ACL 1)网络连通测试 内网可以telnet外网 ----------- 外网可以telnet内网 2)ACL配置( ...