<p>如果显示错误</p>
<pre><code>except ValueError as ex:
error += 1
print(ex)
</code></pre>
<p>然后你就知道问题出在哪里了</p>
<pre><code>invalid literal for int() with base 10: '3060\n+20'
</code></pre>
<p>问题是,有时它会显示结果<code>3060</code>,并将点添加到结果<code>+20</code></p>
<p>当您在<code>\n</code>上拆分它并获取第一个元素时,它会正常工作</p>
<pre><code>newScore = int(
newScore.text.split('\n')[0]
)
</code></pre>
<hr/>
<p>要识别<code>Game Over</code>您需要</p>
<pre><code>game_over = driver.find_element_by_class_name("game-over") #
</code></pre>
<p>但是,当没有类<code>game-over</code>时,它会产生错误,因此我将使用<code>find_elements</code>(在单词<code>find_elements</code>的末尾使用<code>s</code>)来获取空列表,而不是生成错误</p>
<p>顺便说一句:我改变了一些名字,因为<a href="https://www.python.org/dev/peps/pep-0008/" rel="nofollow noreferrer">PEP 8 Style Guide for Python Code</a></p>
<hr/>
<pre><code>from selenium import webdriver
from selenium.webdriver.common.keys import Keys # import Keys to send special keys
from selenium.common.exceptions import NoSuchElementException
import time
def opensite():
driver = webdriver.Chrome()
driver.get("https://gabrielecirulli.github.io/2048")
return driver
def bot_keys(driver):
'''Function to send arrow keys to browser :up, right, down, left.'''
wait = 0.025 # time to wait between plays
try:
element = driver.find_element_by_tag_name("body")
game_on = True
counter = 0
old_score = 0
new_score = 0
error = 0
while game_on:
counter += 1
# Send keys to move pieces
time.sleep(wait)
element.send_keys(Keys.UP)
time.sleep(wait)
element.send_keys(Keys.RIGHT)
time.sleep(wait)
element.send_keys(Keys.DOWN)
time.sleep(wait)
element.send_keys(Keys.LEFT)
# check the score. Keep track of it to determine if GAME OVER!
try:
new_score = driver.find_element_by_class_name("score-container") # get the object with the score.
new_score = int(new_score.text.split('\n')[0]) # read the text of the object, which is the score in a string. Convert it to an integer.
print(f"Evolutions: {counter:5} | Old Score: {old_score:5} | New Score: {new_score:5}")
old_score = new_score
game_over = driver.find_elements_by_class_name("game-over") # get the object with the score.
#print('game_over:', len(game_over))
if game_over:
print("\nGAME OVER!\n")
print("Final Score:")
print(f"Evolutions: {counter:5} | New Score: {new_score:5} | Errors: {error}")
game_on = False
except ValueError as ex:
print('ex:', ex)
error += 1 # count value errors, but that's all.
except NoSuchElementException:
print("Could not find element")
input("\nPausing before program closes. Hit enter to continue.")
def main():
driver = opensite()
bot_keys(driver)
driver.close()
if __name__ == "__main__":
main()
</code></pre>
<hr/>
<p>也许下一步是使用<a href="https://gym.openai.com/" rel="nofollow noreferrer">Gym</a>(或类似的东西)来使用<code>Reinforcement Learning</code>(<code>Machine Learning</code>,<code>Artificial Intelligence</code>)</p>