首页 > 解决方案 > 只有在使用 Selenium 自动播放 2048 时才会向下移动

问题描述

我正在尝试按照 Automate the Boring Stuff 中的指示使用 Selenium 自动播放 2048。

但是无论我向 send_keys() 发送什么参数,每一步都是 DOWN 的。

这是代码:

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time, requests

browser.get('https://play2048.co/')

time.sleep(2)

game = browser.find_element_by_tag_name('body')
over = browser.find_element_by_class_name('retry-button')
control = ['Keys.UP','Keys.RIGHT','Keys.DOWN','Keys.LEFT']

act = 0

while True:
     if over.is_displayed() is False:
         if act == 4:
             act = 0
         game.send_keys(control[act])
         print('act=' + str(act) + ' control =' + control[act])  # To check every move output.
         act += 1
         time.sleep(0.1)

     else:
          print('Done')
          time.sleep(2)
          over.click()             

发送到 game.send_keys() 的参数对于每一步都是不同的(上 > 右 > 下 > 左 > 上)。

但游戏中的实际结果每次总是在向下移动。

经过几次尝试,我将“控制”字典更改为:

control = ['\ue013','\ue014','\ue015','\ue012']

并且问题解决了...

我只是想知道是什么导致了这个问题,以及为什么它总是向下移动,因为参数都是不同的。

多谢你们。

- - - - - - - - - - - - - - - - - 编辑 - - - - - - - - -----------------

这里的问题是我向 send_keys() 发送字符串,而不是密钥,正如 Iain Shelvington(谢谢队友)所回答的那样。

为什么游戏总是向下移动?

因为 2048 也可以通过 W,D,S,A 而不是 UP, LEFT, DOWN, 和 RIGHT 来控制,所以游戏将逐个字母地接收来自字符串“Keys.UP”的命令。

“K”、“e”和“y”对游戏没有任何意义,但“s”会使积木下降。

因此,所有字符串都以“Keys”开头。将引导游戏进入DOWN状态。

标签: pythonselenium2048

解决方案


推荐阅读