50行代码实现小猿口算自动PK脚本(兼顾性能和简洁性)

Github 项目地址:https://github.com/Done-0/xyksAuto

附带教程和配套工具

import cv2
import numpy as np
import pyautogui
import pytesseract
import keyboard
import sys
import time
import pygetwindow as gw
import re

pytesseract.pytesseract.tesseract_cmd = r'D:\Tesseract-OCR\tesseract.exe' # 设置 tesseract 安装路径
previous_numbers, skip_count, cached_image = None, 0, None

def focus_window(title="BlueStacks App Player", attempts=3):
    window = gw.getWindowsWithTitle(title)
    return any(window and window[0].activate() or window[0].isActive for _ in range(attempts) if time.sleep(0.2) or True)

def preprocess_image(image):
    return cv2.adaptiveThreshold(cv2.convertScaleAbs(image, alpha=1.5, beta=50), 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

def extract_valid_numbers(text):
    return [int(num) for num in re.findall(r'\d+', text) if 0 <= int(num) <= 20]

def capture_and_recognize():
    global cached_image
    if not focus_window(): return None
    screenshot = np.array(pyautogui.screenshot(region=(267, 354, 440, 100)))  # 设定截取屏幕区域
    if cached_image is not None and np.array_equal(screenshot, cached_image): return None
    cached_image = screenshot
    gray = cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY)
    numbers = extract_valid_numbers(pytesseract.image_to_string(preprocess_image(gray), config='--psm 7'))
    return numbers if len(numbers) >= 2 else None

def compare_and_draw(numbers):
    global previous_numbers, skip_count
    skip_count = skip_count + 1 if numbers == previous_numbers else 0
    pyautogui.press("." if numbers[0] > numbers[1] else ",")
    print(f"{numbers[0]} {'>' if numbers[0] > numbers[1] else '<'} {numbers[1]}")
    previous_numbers = numbers

def main():
    keyboard.add_hotkey('shift+enter', sys.exit)
    print("程序启动,按 'Shift + Enter' 退出")
    while True:
        if numbers := capture_and_recognize():
            compare_and_draw(numbers)
        time.sleep(0.3 if numbers == previous_numbers else 0.01)

if __name__ == "__main__":
    main()
Python可以用来编写自动化的小猿口脚本,通常通过网络爬虫技术获取题目,并利用自然语言处理库(如BeautifulSoup、requests等)获取网页内容。然后解析题目信息,比如加减乘除运符和数字,将它们转换成适合法处理的数据结构。接着,你可以编写一个简单的计函数来进,最后验证答案是否正确。 以下是一个简化的步骤概述: 1. **网络请求**:使用`requests`库发送HTTP请求到小猿口的API或者网页页面,获取题目数据。 ```python import requests response = requests.get('http://example.com/kaoju') data = response.text ``` 2. **数据解析**:使用HTML解析库如`BeautifulSoup`解析HTML内容,提取题目和答案。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(data, 'html.parser') question = soup.find('span', class_='question').text answer = int(soup.find('input', id='answer')['value']) ``` 3. **计**:创建一个简单的函数对输入的问题进。 ```python def calculate(question): # 将问题字符串转为操作数和运符 operation, num1, num2 = question.split() num1, num2 = int(num1), int(num2) if operation == '+': result = num1 + num2 elif operation == '-': result = num1 - num2 # ...添加其他运符的支持 return result ``` 4. **答案验证**:比较计结果与预期答案。 ```python calculated_answer = calculate(question) if calculated_answer == answer: print(f"答对了!{question} 的答案是 {calculated_answer}") else: print(f"答错了!正确答案是 {answer}") ``` 注意这只是一个基本的示例,实际的环境可能需要处理更多复杂的情况,例如登录、验证码识别等。此外,很多在线平台可能会有反爬机制,因此在开发这类脚本时,一定要遵守网站的服务条款并尊重版权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fenderisfine

蟹蟹你的奶茶😘

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值