最近项目有这样一个需求,之前使用持续监控网页方式匹配新告警特定图像,但发现很不精准,本人python新手,有其他方式实现吗,监控的网页,需要处理确认的告警都是红色的,见下图
出现红色级别的告警,python需要识别到,并且鼠标点击红色前面圆圈按钮,在弹出小框点击确认事件,再在弹出小框点击是。如下三图
最近项目有这样一个需求,之前使用持续监控网页方式匹配新告警特定图像,但发现很不精准,本人python新手,有其他方式实现吗,监控的网页,需要处理确认的告警都是红色的,见下图
引用GPT
由于您之前使用的持续监控网页方式匹配新告警特定图像不够精准,我可以给您提供以下两种替代方案:
import cv2
import pyautogui
template_path = 'path/to/template_image.png' # 替换为您的模板图片的路径
def find_template(screen_image_path, template_path):
screen = cv2.imread(screen_image_path)
template = cv2.imread(template_path)
result = cv2.matchTemplate(screen, template, cv2.TM_CCOEFF_NORMED)
(_, max_val, _, max_loc) = cv2.minMaxLoc(result)
return max_val, max_loc
while True:
# 截取屏幕并保存为screen.png图片
screenshot_path = 'path/to/screen.png' # 替换为您保存屏幕截图的路径
pyautogui.screenshot(screenshot_path)
# 在截图中查找模板图片
max_val, max_loc = find_template(screenshot_path, template_path)
threshold = 0.9 # 阈值,用于判断是否匹配
if max_val >= threshold:
# 找到匹配的图像,点击确认按钮
button_x = max_loc[0] + button_width # 替换为确认按钮的x坐标
button_y = max_loc[1] + button_height # 替换为确认按钮的y坐标
pyautogui.click(button_x, button_y)
# 增加适当的延迟,然后继续下一次循环
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
# 初始化WebDriver,替换为您使用的浏览器(如Chrome)
driver = webdriver.Chrome()
# 打开监控的网页
driver.get('http://example.com')
while True:
# 等待页面加载完毕
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'div.classname'))
)
# 查找红色级别的告警
alarms = driver.find_elements(By.CSS_SELECTOR, 'div.classname')
for alarm in alarms:
if alarm.value_of_css_property('color') == 'red':
# 点击圆圈按钮
circle_button = alarm.find_element(By.CSS_SELECTOR, 'button.circle-button')
circle_button.click()
# 等待弹出小框出现
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'div.modal'))
)
# 点击确认按钮
confirm_button = driver.find_element(By.CSS_SELECTOR, 'button.confirm-button')
confirm_button.click()
# 等待是按钮出现
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'button.yes-button'))
)
# 点击是按钮
yes_button = driver.find_element(By.CSS_SELECTOR, 'button.yes-button')
yes_button.click()
# 增加适当的延迟,然后继续下一次循环
请注意,以上代码仅为示例,您需要根据实际情况进行适当调整和修改。并且,可能需要根据您的操作系统和浏览器类型进行一些配置。