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


人間をやめる

ある日、自分のタイピングの力不足を嘆いて私はe-typingの門戸を叩いた
e-typingとは名前の通りタイピングのゲームです

[リンク]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.005だと100%弾かれます。
ご自分で実験してより早くするのもまた一興かも知れません。
2.新しいお題が出たらすぐに打ち込みを始めるのでなく、人間らしく言葉を理解してるっぽい時間を設けます
ここの時間はテキトーなのでまだまだ早くなれる余地があります

実験

まあざっとこんなもんですね
言葉によっては結果の振れ幅が大きくなります


神の代償

Godhandも超え、正真正銘の神になれました
素晴らしい速さのタイピングです!
人間技じゃない!!!
このサイトでは結果を登録することもできます
「さあ登録するぞ!!!」としたとき手が止まりました
こんなPythonにやらせた虚無的なものを登録してランキングにのっけて人間にマウントとって良いのだろうか
人間が自分の手でやっているところに神(Python)がでしゃばるのは野暮ではないか((((そもそも不正

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

おわりに

2020年の大学受験を控えていますが現在この記事を深夜3時に書いてます
やばいですね
知ってますか?センター試験にはPythonは出ないらしいんですよ
非常にまずいですね
「受験生??????」ってなるの僕のGithubのコミットしてる時間とかは見ないでください

追記

書き方がダサかったのでCSS selectorでちょこっと書き直してみました
こっちの方が綺麗でよい
上のやつはダサい
[リンク]https://github.com/nyanko3142592/e-typer/blob/master/eTypeCSSselector.py