e-typing自動タイピング

プロジェクト概要

日本最大級のタイピング練習サイト「e-typing」に対応した自動入力プログラムです。Selenium WebDriverによるブラウザ自動操作技術を活用し、XPathによる動的要素取得と文字列自動入力を実装しました。

開発目的

  • Web自動化技術(Selenium)の実践的スキル習得
  • XPathを用いた動的要素取得の理解
  • iframe操作を含む複雑なDOM構造への対応
  • ブラウザ操作の自動化プログラミング体験

使用技術

プログラミング言語

Python 3.x

ブラウザ自動化

Selenium 4.34.2 webdriver-manager 4.0.2 requests 2.32.4 python-dotenv 1.1.1

Selenium: Webブラウザの自動操作・要素取得
webdriver-manager: ChromeDriverの自動インストール・管理

その他依存ライブラリ

trio / trio-websocket urllib3 certifi

主な機能

1. e-typing自動タイピング機能

対象サイト: e-typing(イータイピング) - 日本最大級のタイピング練習サイト

実装機能:

  • ローマ字タイピングチェックの自動実行
  • XPathによる動的テキスト要素の取得
  • 15問の自動入力処理
  • スコア・レベルの自動取得とコンソール表示
  • 無限ループモード対応(コメントアウト解除で有効化)
  • iframe内要素への正確なアクセス

システム構成

動作フロー

e-typingサイトアクセス
↓ 1秒待機
ローマ字チェックリンククリック
↓ 1秒待機
腕試しレベルチェックボタンクリック
↓ 2秒待機・iframe切り替え
タイピング開始ボタンクリック
↓ 2秒待機・body要素取得
スペースキー送信でタイピング準備
↓ 3秒待機
15問の文字列を1文字ずつ自動入力
↓ 各問題後1秒待機
結果画面からスコア・レベル取得
コンソールに結果表示

工夫した点

1. XPathによる柔軟な要素取得

# 次にタイプする文字列を動的に取得
text = driver.find_element("xpath", 
    "//div[@id='sentenceText']/div/span/following-sibling::span").text
  • following-sibling軸を使用した兄弟要素の取得
  • 動的に変化するテキストへの対応
  • タイピング済み文字ではなく「未タイプ文字」のみを正確に取得

2. iframeへの切り替え処理

# タイピング画面はiframe内にあるため切り替えが必要
driver.switch_to.frame("typing_content")
  • e-typingのタイピング画面はtyping_contentというiframe内に実装
  • 正確な要素操作のためのコンテキスト切り替えが必須
  • iframe切り替えなしでは要素が見つからない

3. ChromeDriverの自動管理

from webdriver_manager.chrome import ChromeDriverManager

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
  • webdriver-managerにより環境に応じたChromeDriverを自動ダウンロード
  • 手動でのドライバー管理が不要
  • Chromeバージョンアップ時も自動対応

4. 適切な待機時間の設定

  • 各処理の間に適切な待機時間を設定
  • ページ読み込みやJavaScript実行の完了を待つ
  • エラーを防ぐための安全マージン確保

技術的ハイライト

1. 動的要素の監視と文字単位での入力

# タイピング問題を1文字ずつ自動入力
for _ in range(15):
    text = driver.find_element("xpath", 
        "//div[@id='sentenceText']/div/span/following-sibling::span").text
    for char in text:
        body_element.send_keys(char)
    time.sleep(1)

2. XPath軸を活用した柔軟な要素取得

"//div[@id='sentenceText']/div/span/following-sibling::span"
  • sentenceTextという特定IDの要素から出発
  • 子要素のdiv、さらにその子のspanへ移動
  • following-sibling軸で兄弟要素(未タイプ部分)を取得
  • 複雑なDOM構造を正確にナビゲート

開発情報

開発形態

個人開発

役割

企画・設計・実装・テスト

開発時の注意事項

本プロジェクトは教育・学習目的で開発しました。開発および検証にあたり、以下の点に配慮しています。

利用規約の遵守

  • e-typingサイトの利用規約を事前に確認し、個人的な学習範囲内での開発
  • 自動化技術の学習を目的とし、ランキングや公式記録への影響を避ける
  • Webスクレイピング技術の研究として、倫理的配慮を持って実装
  • 本番環境での継続的な使用は行わず、あくまで技術検証に限定

サーバーへの配慮

  • 適切な待機時間(time.sleep)を各処理に設定し、過度な負荷を防止
  • 無限ループモードはコメントアウトし、デフォルトでは実行されない設計
  • テスト実行は必要最小限に留め、連続実行を控える運用方針
  • ページ読み込み完了を確認してから次の操作を実行する設計

技術的配慮

  • ブラウザ自動化技術(Selenium)の学習を主目的とした開発
  • XPath、iframe操作など、複雑なDOM構造への対応技術の習得
  • 実用ツールではなく、技術研究・ポートフォリオとしての位置づけ

倫理的配慮

  • オープンソースとして公開せず、悪用防止に配慮
  • 自動化技術の学習範囲を超えた使用を推奨しない立場を明示
  • e-typingサービスの健全な運営を尊重する姿勢を維持

デモ動画

実際の動作をご覧いただけます。e-typingサイトでの自動タイピングの様子をわかりやすく紹介しています。

謝辞

  • e-typing: 日本最大級のタイピング練習サイトの提供
  • Seleniumプロジェクト: 強力なブラウザ自動化フレームワーク
  • webdriver-manager: ChromeDriver自動管理ツールの開発
  • Pythonコミュニティ: 豊富なライブラリとドキュメント