Edited at

おれは人間をやめるぞ!タイピングゲーム!!!


人間をやめる

ある日、自分のタイピングの力不足を嘆いて私はe-typingの門戸を叩いた

e-typingとは名前の通りタイピングのゲームです

スクリーンショット 2019-08-12 3.04.14.png

[リンク]https://www.e-typing.ne.jp/

やるとスコアと称号が出ます

800~ Joker

750~799 Godhand

700~749 Jedi

650~699 Tatujin

600~649 Rocket

550~599 Meijin

500~549 EddieVH

450~499 LaserBeam

400~449 Professor

375~399 Comet

350~374 Ninja

325~349 Thunder

300~324 Fast

277~299 Good!

260~276 S

243~259 A+

226~242 A

209~225 A-

192~208 B+

175~191 B

158~174 B-

141~157 C+

124~140 C

107~123 C-

90~106 D+

73~89 D

56~72 D-

39~55 E+

22~38 E

~21 E-

[リンク]https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1322215813より

といった具合に称号があります

自分でやってみたところGood!でした

しかしYouTubeにころがってる動画のタイピングを見て

「お前ら人間じゃねえ!!!」と悟りました

かのディオ・ブランドーも

「人間ってのは能力に限界があるなあ

おれが短い人生で学んだことは・・・・・・・・・・・・

人間は策を弄すれば弄するほど予期せぬ事態で策がくずされるってことだ!

・・・・・・・・・・・・

人間を超えるものにならねばな・・・・・・」


と言っています

私も人間をやめることにし、Pythonにぶんなげました


神に頼んでやってもらおう

退屈なことはPython(神)に、できないこともPythonに投げていてダメ人間まっしぐらの受験生です

よくPythonは遅い遅いと言われタイピングゲームに向いてないんじゃないかと思うかも知れませんが大丈夫です

このゲームあまりにも早いと人間じゃないと判定しジャッジをしてくれません

なのでほどほどのスピードで人間を装いつつやっていきますのでPythonの遅さは問題になりません


方法

今回はselenium使ってウェブスクレイピングしていきます


準備

secretThings.pyというファイルを作り、中に


secretThings.py

mail = ""

password = ""

をいれてください

スクレイピングの際に自動でログインしてくれます


コード


eTypeCSSselector.py

import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import secretThings

def login(driver):
driver.find_element_by_css_selector("#mail").send_keys(secretThings.mail)
driver.find_element_by_css_selector("#password").send_keys(secretThings.password)
driver.find_element_by_css_selector("#login_btn").click()

def startEtyping(driver):
#start e-typing
driver.find_element_by_css_selector("#level_check_member > a").click()
time.sleep(2)

driver.switch_to.frame('typing_content')#frameの変更 chrome内に生成されたゲーム画面に移動
driver.find_element_by_css_selector('#start_btn').click()

time.sleep(1)

body = driver.find_element_by_tag_name('body')
body.send_keys(Keys.SPACE)

time.sleep(3)

def solveQuestions(driver):
global questionFlag
try:
inputText = driver.find_element_by_css_selector('#sentenceText').find_elements_by_css_selector('span')[1].text
for sendText in inputText:
driver.find_element_by_tag_name('body').send_keys(sendText)
time.sleep(0.01)
time.sleep(0.5)
except:
questionFlag = False
time.sleep(3)

def main():
global questionFlag
questionFlag = True

#chromeを開く
driver = webdriver.Chrome('./chromedriver')
driver.get("https://www.e-typing.ne.jp/member/")

#login
login(driver)

#ウィンドウの最大化 省略化
driver.maximize_window()

#start e-typing
startEtyping(driver)

#回答
while questionFlag:
solveQuestions(driver)

#wait
input()
driver.quit()

if __name__ == "__main__":
main()


[リンク]https://github.com/nyanko3142592/e-typer.git


工夫

人間らしさを演出していきます

1.出されたお題の言葉を一度に送るのではなく、ローマ字でアルファベット1文字ごとでsleepを入れます。

sleep(0.008)くらいだとたまに弾かれ、0.05だと100%弾かれます。

ご自分で実験してより早くするのもまた一興かも知れません。

2.新しいお題が出たらすぐに打ち込みを始めるのでなく、人間らしく言葉を理解してるっぽい時間を設けます

ここの時間はテキトーなのでまだまだ早くなれる余地があります


実験

まあざっとこんなもんですね

言葉によっては結果の振れ幅が大きくなります

スクリーンショット 2019-08-12 3.51.16.png


神の代償

Godhandも超え、正真正銘の神になれました

素晴らしい速さのタイピングです!

人間技じゃない!!!

このサイトでは結果を登録することもできます

「さあ登録するぞ!!!」としたとき手が止まりました

こんなPythonにやらせた虚無的なものを登録してランキングにのっけて人間にマウントとって良いのだろうか

人間が自分の手でやっているところに神(Python)がでしゃばるのは野暮ではないか((((そもそも不正


そう思いツイートだけに留めました

まあツイートで「俺こんなにタイプ早いだぜえ!」みたいな虚無的なマウントくらいにしか使い道はないですね


おわりに

2020年の大学受験を控えていますが現在この記事を深夜3時に書いてます

やばいですね

知ってますか?センター試験にはPythonは出ないらしいんですよ

非常にまずいですね

「受験生??????」ってなるの僕のGithubのコミットしてる時間とかは見ないでください


追記

書き方がダサかったのでCSS selectorでちょこっと書き直してみました

こっちの方が綺麗でよい

上のやつはダサい

[リンク]https://github.com/nyanko3142592/e-typer/blob/master/eTypeCSSselector.py