标签: keyboard-python

如何在更长的时间内“发送密钥”到画布元素?

我的目标:

我正在尝试制作一个 python 机器人来赢得chrome 的恐龙游戏

游戏允许两种类型的跳跃:

  • 短距离跳跃
  • 跳远

使用main_body.send_keys(Keys.SPACE)(如下面的代码所示)给出了短跳转。

我的问题:

我很难执行跳远。

我的做法:

目前,对于跳远,我正在使用该Keyboard库:

keyboard.press(keyboard.KEY_UP)

不幸的是,这要求浏览器窗口始终处于焦点。稍后,我希望无头地运行这个程序,所以这种方法行不通。

或者:

我试过ActionChains

ActionChains(driver) \
.key_down(Keys.SPACE) \
.pause(0.2) \
.key_up(Keys.SPACE) \
.perform()
Run Code Online (Sandbox Code Playgroud)

但这最终会滚动整个页面。并且没有达到预期的目的。

我只是希望直接将这些操作“发送”到画布元素,而不是在整个页面上执行它们...

我希望做这样的事情

main_body.key_down(Keys.SPACE) 
time.sleep(0.2)
main_body.key_up(Keys.SPACE) 
Run Code Online (Sandbox Code Playgroud)

虽然这当然会给我这个错误:AttributeError: 'FirefoxWebElement' object has no attribute 'key_down'因为canvas没有属性key_downkey_up.

这是一个 MCVE:

注意在代码中,恐龙会不断跳跃,但这不是重点,这只是为了检查跳跃的高度而不是赢得比赛。

main_body.key_down(Keys.SPACE) 
time.sleep(0.2)
main_body.key_up(Keys.SPACE) 
Run Code Online (Sandbox Code Playgroud)

请给别人注释掉代码,看看每种跳转的效果。

如果可能的话,建议一些其他的替代方法,在不使用Keyboard和不滚动整个页面的情况下进行跳远......

python selenium canvas selenium-webdriver keyboard-python

6
推荐指数
1
解决办法
1008
查看次数

为什么在使用键盘时我的代码循环两次?

我正在编写代码,以在输入特定的数字字符串时提醒用户。该代码运行似乎按预期运行,但应给我“ 12345”时输出“ 1122334455”:

import sys
sys.path.append('..')
import keyboard

line = ''
ISBN10 = ''
number = ""

def print_pressed_keys(e):
    global line, ISBN10, number
    line = line.join(str(code) for code in keyboard._pressed_events)
    if line == "2":
        number = 1
    elif line == "3":
        number = 2
    elif line == "4":
        number = 3
    elif line == "5":
        number = 4
    elif line == "6":
        number = 5
    elif line == "7":
        number = 6
    elif line == "8":
        number = 7
    elif …
Run Code Online (Sandbox Code Playgroud)

python keyboard-python

2
推荐指数
1
解决办法
53
查看次数