
正文
OpenCV和selenum实现点击操作
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
import cv2 as cvimport numpy as npfrom PIL import Image, ImageDraw, ImageFontimport osfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium import webdriver as driver1resultlist = []device = 'PC'path = os.path.abspath('..')imglist = []show =1url="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()






