
退屈なことをPythonにやってもらうための演習の回答[11.10.3]
毎度、『退屈なことはPythonにやらせよう』についている演習プロジェクトの自分なりの回答を投げています。
動かすところは特に迷うところは無いと思います。ぐるぐる回しながらずっとキー操作を続ければいいだけですね。
#! python3
# 11.10.3 2048
import os, sys, logging, time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
logging.basicConfig(level=logging.INFO,
format=' %(asctime)s - %(levelname)s - %(message)s')
#logging.debug('start')
# 2048にアクセス
browser = webdriver.Firefox()
browser.get('http://gabrielecirulli.github.io/2048/')
html_elem = browser.find_element_by_tag_name('html')
# 上右下左のキー入力を繰り返す
i = 0
while True :
if i % 4 == 0:
html_elem.send_keys(Keys.ARROW_UP)
elif i % 4 == 1:
html_elem.send_keys(Keys.ARROW_RIGHT)
elif i % 4 == 2:
html_elem.send_keys(Keys.ARROW_DOWN)
elif i % 4 == 3:
html_elem.send_keys(Keys.ARROW_LEFT)
i += 1
try:
end_elem = browser.find_element_by_class_name('game-over')
break
except:
pass
score = browser.find_element_by_class_name('score-container').text
logging.info(score)
終わり方をどうするのかちょっと悩みました。try-except文をこんな風に使ってもよかったのでしょうか…?
あとはゲームオーバーの表記がちょっと取りづらかったというか、2回目以降だと要素の表示/非表示をやっていたので、手動で検証していたときとSeleniumで操作したところでちょっと違ったので少し迷いました。
最後はなんとなくスコアをINFOで投げていますが、printしてもよかったかもしれません。
次でブラウザ操作は終わりですね。ではでは。