最近steam上有个banana游戏小火了一波
规则是每隔三个小时点击一次可以获得一个普通香蕉卡片,每隔18个小时点击一次可以获得一个特殊香蕉卡片,卡片可以挂在市场上出售换余额。因此戏称香蕉币。
为了自动点击获取卡片,并且减小影响,因此我写了个python脚本,分享一下。
首先安装的包
pip install win32api
from time import sleep
import win32gui
import win32api
import win32con
导入所需要的包,主要使用win32gui、win32con切换窗口,win32api模拟点击事件。
def get_current_position():
return win32api.GetCursorPos()
定义一个获取当前鼠标位置的函数,用于点击后将光标复位,防止做事的时候弹出窗口点击然后光标移开了不知道去哪了。
def find_window(title):
hwnd = win32gui.FindWindow(None, title)
# 找不到该窗口
if hwnd == 0:
raise Exception("找不到窗口")
else:
# 若最小化则还原窗口
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
# 切换到前台
win32gui.SetForegroundWindow(hwnd)
return hwnd
定义一个找到窗口的函数。
def get_window_position(hwnd):
rect = win32gui.GetWindowRect(hwnd)
x = int((rect[0] + rect[2]) / 2)
y = int((rect[1] + rect[3]) / 2)
return x, y
定义一个获取要点击位置的函数,由于香蕉在窗口中间,可以直接返回窗口中间的位置。
def click(x, y):
win32api.SetCursorPos((x, y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
sleep(0.1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
定义一个点击函数,中间停隔0.1秒模拟正常点击速度。
def collapse_window(hwnd):
if hwnd:
win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
定义一个收起窗口的函数。
def get_banana():
hwnd = find_window("Banana")
sleep(0.1)
x = get_window_position(hwnd)[0]
y = get_window_position(hwnd)[1]
click(x, y)
sleep(0.1)
collapse_window(hwnd)
组合一下上面的函数。
from time import sleep
import win32gui
import win32api
import win32con
def get_current_position():
return win32api.GetCursorPos()
def find_window(title):
hwnd = win32gui.FindWindow(None, title)
# 找不到该窗口
if hwnd == 0:
raise Exception("找不到窗口")
else:
# 若最小化则还原窗口
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
# 切换到前台
win32gui.SetForegroundWindow(hwnd)
return hwnd
def get_window_position(hwnd):
rect = win32gui.GetWindowRect(hwnd)
x = int((rect[0] + rect[2]) / 2)
y = int((rect[1] + rect[3]) / 2)
return x, y
def collapse_window(hwnd):
if hwnd:
win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
# 模拟鼠标点击
def click(x, y):
win32api.SetCursorPos((x, y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
sleep(0.1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def get_banana():
hwnd = find_window("Banana")
sleep(0.1)
x = get_window_position(hwnd)[0]
y = get_window_position(hwnd)[1]
click(x, y)
sleep(0.1)
collapse_window(hwnd)
if __name__ == '__main__':
while True:
current_position = get_current_position()
get_banana()
win32api.SetCursorPos(current_position)
sleep(3 * 60 * 60 + 60)
完整的代码如上。
完结!