OpenCV和selenum实现点击操作
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实现点击操作的更多相关文章
- JS---DOM---点击操作---part1---20个案例
点击操作:------>事件: 就是一件事, 有触发和响应, 事件源 按钮被点击,弹出对话框 按钮---->事件源 点击---->事件名字 被点了--->触发了 弹框了---& ...
- JS---DOM---点击操作---节点的方式---案例
点击操作---节点的方式---案例 案例1:点击按钮,设置p变色---节点的方式做 <!DOCTYPE html> <html lang="en"> < ...
- c#使用UIA进行模拟点击操作
之前,我写过一篇c#使用spy进行模拟操作的文章,有朋友在留言中提到了UIA进行操作,今天也使用UIA重新实现一次对vnc窗体的控制测试. 实现目标 在server框内填入192.168.2.200 ...
- opencv中对图像的像素操作
1.对灰度图像的像素操作: #include<iostream> #include<opencv2/opencv.hpp> using namespace std; using ...
- 使用powershell/vbs自动化模拟鼠标点击操作
今天想做windows上的自动化,所以才有了模拟鼠标点击的需求,先考虑用powershell实现: 首先先安装一个名为“WASP”免费可用的Powershell扩展程序,下载地址:http://was ...
- AutoIT: 如何通过坐标相对位置来对无法识别的Menu以及GridView进行定位点击操作
一般情况下,GridView中的数据来自数据库,我们通过Windows Info,是无法获取GridView中的信息的.而软件定制的Menu,很多时候无法通过系统提供的WinMenuSelectIte ...
- Opencv YAML和XML格式文件操作详解
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/47660943 本文参考Opencv 2 ...
- Android 微信UI 、点击操作
上一篇,我们介绍了微信界面的相关知识点.今天我们就来把微信的界面做出来. 首先我们新建一个layout-->LinearLayout-->weixin.xml 我们使用上中下线性布局,采用 ...
- 【Java】在JTable中设置鼠标监听器,点击操作对应数据
最终效果 鼠标点击JTable中任一数据,修改相应的信息. 确定点击的行和列 package com.dao; import java.awt.event.MouseAdapter; import j ...
随机推荐
- Mysql、SqlServer、Oracle三大数据库的区别
一.MySQL 优点: 体积小.速度快.总体拥有成本低,开源: 支持多种操作系统: 是开源数据库,提供的接口支持多种语言连接操作 : MySQL的核心程序采用完全的多线程编程.线程是轻量级的进程,它可 ...
- 前后端分离密码登陆加密RSA方案(java后端)
前言:密码加密有很多种方案,这里不做过多讨论,本篇文章是基于RSA加密实现. 首先在前端工程中需要引入加密js: "jsencrypt": "2.3.1",(注 ...
- Redis 过期键删除策略
Redis 中数据库键的过期时间都保存在过期字典中,当一个键过期了,Redis 存在三种不同的删除策略:定时删除.惰性删除和定期删除 定时删除 定义 在设置键的过期时间的同时创建一个计时器,让定时器在 ...
- es6 proxy代理
es6 新增构造函数 Proxy Proxy 构造函数,可以使用new 去创建,可以往里面插入两个参数,都是对象 let target = {} let handler = {} let proxy ...
- thinkPHP5.0 URL路由优化
在tp中访问页面的时候URL地址是 域名/模块/控制器/方法,在点击首页的时候URL是 域名/index/index/index 而不是只显示域名,这样不利于SEO,而且强迫症的我看着很不爽,这个时候 ...
- 深挖 NPM 机制
使用NPM安装的时候会经常出现包冲突(比如多个主模块的子模块版本不一致等),导致在开发过程中会遇到各种或大或小的问题.所有在这会介绍以下内容: NPM 主要安装方式 NPM 包信息查询 NPM 安装机 ...
- OPPO A7x在哪里开启usb调试模式的详细经验
当我们使用Pc连接安卓手机的时候,如果手机没有开启Usb调试模式,Pc则没法成功读到我们的手机,这时我们需要想办法将手机的Usb调试模式开启,这里我们讲解OPPO A7x如何开启Usb调试模式的方法. ...
- Testlink插件工具
目的: 使用Testlink时间长了,会发现有些功能体验不是很好,比如用例编写就无法快速复制,且展示能力很弱 使用对象: 测试人员.测试leader,技术经理 xmind2testlink:xmind ...
- 解决在圆角手机(如小米8)上自定义Dialog无法全屏的问题
在小米8等一系列圆角的手机上测试项目时,发现我的自定义dialog无法全屏了,这时我的dialog全屏的解决方案还是和网上大部分人是一样的 Window window = getWindow(); i ...
- Numpy库的学习(四)
我们今天继续学习一下Numpy库 接着前面几次讲的,Numpy中还有一些标准运算 a = np.arange(3) print(a) print(np.exp(a)) print(np.sqrt(a) ...