首页 > 解决方案 > 如何将 Python 应用程序中的字符串打印到 Flash 游戏中的浏览器文本字段

问题描述

我希望这个小型 python 程序能够将字符串输出到 Google Chrome 上的 Flash 游戏中的文本字段中。按键模拟工作,但是打印功能显然只将打印的代码返回到控制台。

我尝试了一些解决方法,使用 for 循环将字符串值推送到 .press 和 .release 函数中,但是(这不仅不是最佳代码)它(据我所知)无法完成。

def click():
    username=textentry.get() 
    time.sleep(2)
    for i in range(1000):
        print(username)
        keyboard.press(Key.tab)
        keyboard.release(Key.tab)
        print(f'{i:03}')
        keyboard.press(Key.enter)
        keyboard.release(Key.enter)
        keyboard.press(Key.shift)
        keyboard.press(Key.tab)
        keyboard.release(Key.tab)
        keyboard.release(Key.shift)

可以很好地打印到控制台,并且按键和释放都可以正常工作。唯一的问题是文本不会被发送到控制台之外的任何东西。

我的理想情况是,您可以简单地启动程序,然后单击文本字段(一个用于用户名,另一个用于 3 代码整数),它会为您完成剩下的工作,运行与用户名相关的 000 个整数,直到它得到朋友代码。

这个程序不是(也不能)猜出某人的密码。这是一款名为棒帝国的无害 Flash 游戏。

标签: python-3.x

解决方案


这个问题似乎无法解决(我可能是错的,但经过数小时的研究,反复出现的答案是它无法完成。)但这里有一个半解决方法:

如果您使用 pynputs .type("") 函数,您基本上可以在操作系统中排队按键,就好像您自己正在输入一个字符串一样。要按照我上面的要求执行此操作,第一个文本字段需要输入用户名,第二个文本字段需要 3 位整数(从 000 迭代到 999 以实现所有可能性)我必须使用两个 for 循环并调用一堆功能。它看起来很丑,但它很实用。

    #Click function to run inputs 
def click():
    t = 0; j = 0
    lst = []
    keyboard = Controller()
    username = textentry.get()
    a = len(username)   
    time.sleep(2)
    for i in range(1000):
        for j in range(a):
            keyboard.press(username[j])
            keyboard.release(username[j])
            j += 1
        keyboard.press(Key.tab)
        keyboard.release(Key.tab)
        lst.append(f'{i:03}')
        keyboard.type(lst[i])
        keyboard.press(Key.enter)
        keyboard.release(Key.enter)
        keyboard.press(Key.shift)
        keyboard.press(Key.tab)
        time.sleep(0.02)
        keyboard.release(Key.tab)
        keyboard.release(Key.shift)
        i += 1
        j = 0

推荐阅读