我正在尝试按照 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状态。