开始着手用Python写一个游戏脚本(一)

本文分享了使用Python和pywin32库编写游戏脚本的经验,重点介绍了如何获取游戏窗口句柄并调整其大小和位置,以及尝试实现自动购买功能所遇到的游戏API屏蔽问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习python有一段时间了,由于python语言的强大和简洁,是一个不错的脚本语言,就准备做个游戏脚本练练手。
听说pywin32写脚本还不错
pywin32主要代码
我以楚留香的电脑版为例,记录脚本的编写之路吧。
窗口句柄
因为主要游戏都在windows跑,没什么好说的,第一步应该是获取窗口句柄。
在按键精灵帮助下,我们知道了游戏窗口句柄的类名和名字分别为"Messiah_Game",“楚留香”。
利用win32gui的函数,获取到窗口句柄,并稍微调整一下我们理想的大小。

import win32con
import win32gui
import win32api


hwnd=win32gui.FindWindowEx(0,0,"Messiah_Game","楚留香")
win32gui.SetForegroundWindow (hwnd)

if(win32gui.IsIconic(hwnd)):
    win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 300,200,1200,800,win32con.SWP_SHOWWINDOW)

这样就完成对窗口的激活和尺寸,位置设定了。
接下来我们先做一个模块的功能,比如自动摆摊购买,因为端游模式和手游模式摆摊位置不同,我们首先确定为端游模式的坐标。
自动购买第一步,首先是鼠标能移动到‘’藏宝阁‘’图标上
然后我们关注我们需要抢购的东西,再拿他与我们需求的价格做对比,如果小于我们理想的价格,则让脚本自动购买。

所以模拟键盘鼠标的操作和价格识别就显得尤为重要。以下为关注界面,每点击一次关注就会刷新,似乎有点击事件间隔限制。关注界面

 '''我们希望脚本是在端游模式跑起来的,方便测试,先默认一个Mode为端游模式,后期可以设置一个检查模式功能'''
    Mode='端游模式'
    if(Mode=='端游模式'):
        win32api.SetCursorPos([557, 584])
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)

启动脚本后,发现鼠标虽然移动成功,但是单击命令似乎只能在游戏之外的窗口才会执行?
为什么呢?
这是由于游戏屏蔽了系统API提供的模拟输入,包括键盘鼠标的模拟操作都不会生效。
看起来事情并不简单。
那怎么办?

别急,我们可以模拟键盘鼠标驱动的硬件操作。
以下理一下我们思路
目的:我们希望模拟键盘和鼠标的操作。
可以使用方式或库:

  • pyinput
  • autopy
  • win32api
  • winio
  • vb类似于按键精灵的模式
    前面三种已经证明不可行,因为都是api层面的操作,一定都会被游戏系统屏蔽。
    关于第四种可以实现IO驱动的模拟
    介绍winio
    但是进入github查看说明文档发现:
    不支持
    也就是说,winio的python接口还不支持win10,其他语言倒是可以支持,但是我们的代码不就前功尽弃了吗?
    因此联想到可以使用vb的按键精灵模式来实现模拟输入。
    在这里我们并不是要推翻整个代码重写,更不是把语言换成vbscript,我们可以通过调用按键精灵某些插件实现模拟的键盘鼠标输入。
    今天就分析到这里,下一篇我们来讲讲怎么使用python调用vb脚本实现键盘鼠标的dx游戏模拟输入吧。
### 如何使用PythonSelenium脚本 为了创建一个基本的Selenium脚本来控制Web浏览器并执行自动化任务,可以遵循下面的方法。这包括设置环境以及构建简单的测试案例。 #### 安装必要的库 在开始之前,确保安装了`Selenium`库以及其他可能需要的依赖项。可以通过pip工具轻松完成此操作: ```bash pip install selenium ``` #### 导入模块与初始化WebDriver实例 旦设置了开发环境,在Python程序里导入`selenium.webdriver`包,并指定要使用的浏览器驱动器(例如ChromeDriver)。这里展示了一个简单例子来说明如何启动一个新的浏览器会话[^3]。 ```python from selenium import webdriver # 设置 Chrome 浏览器选项 (可选) options = webdriver.ChromeOptions() options.add_argument('--start-maximized') # 启动时最大化窗口 # 初始化 WebDriver 对象 driver = webdriver.Chrome(options=options) # 打开目标网页 url = 'https://www.example.com' driver.get(url) ``` #### 进行交互操作 通过定位HTML文档中的特定元素来进行各种类型的用户模拟动作,比如点击按钮、填表单字段或者读取页面上的文本内容。以下是如何找到链接并通过它导航到另一个页面的例子[^1]。 ```python try: # 查找超链接并点击 link = driver.find_element('link text', 'Start') link.click() finally: # 关闭浏览器 driver.quit() ``` #### 显性和隐性等待策略 考虑到网络延迟等因素可能导致某些动态加载的内容未能及时呈现给Selenium,因此建议采用显式或隐式的等待机制以提高脚本稳定性。虽然不存在直接等待整个页面完全渲染的功能,但是可以根据具体需求选择合适的等待方式[^2]。 ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 隐式等待全局生效 driver.implicitly_wait(10) # 单位秒 # 或者 使用显式等待针对某个条件成立前暂停执行 element = WebDriverWait(driver, timeout=5).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) ``` 以上就是关于怎样利用Python配合Selenium框架快速入门UI自动化的基础教程概览。希望这些信息能够帮助理解如何着手建立自己的第一个自动化测试项目。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值