Seleniumでタイピング

前提

  • Seleniumを動かすための設定などは済んでいる
  • jpn.traineddata はDL済み
  • いきなり未定義変数が出てきたりしていますがあくまで個人メモです

手順

1. 初期起動画面待機

初期起動画面でコンテンツが表示されるのを待つ

driver.get(URL)
# 5秒待機
time.sleep(5)

2. 画面上の特定のボタンを押す

クリック座標が確認できるようにブラウザのConsoleに以下を貼り付けて、ボタンをクリックする

document.body.addEventListener('click', (e) => console.log(e))

ボタンをクリックするように設定

# ボタンをクリックしたときにConsoleに表示される座標を設定
ActionChains(driver).move_by_offset(x, y).click().perform()
# クリック後のアニメーションの待機
time.sleep(1)

3. 要素をスクショする

# canvas要素をスクショ
canvas = driver.find_element_by_tag_name('canvas').screenshot_as_png
# 一時保存
file_name = f'{cur_dir}/images/elm.png'
# 書き込みできるように
with open(file_name, 'wb') as f:
f.write(canvas)

4. スクショした画像から文字周辺をトリミング

# スクショしたcanvas要素から文字周辺のみをトリミング
src = Image.open(file_name)
crop = src.crop((left, upper, right, lower))
# トリミングした画像を保存
cropped_file = f'{cur_dir}/images/elm_cropped.png'
crop.save(cropped_file)

5. 文字認識の精度のための画像の調整

# 文字認識の精度調整のため画像を2値化して保存
image_read = cv2.imread(cropped_file)
image_read = cv2.bitwise_not(image_read)
bit_image_file = f'{cur_dir}/images/elm_bit.png'
cv2.imwrite(bit_image_file, image_read)

6. 文字認識

# 文字認識
tools = pyocr.get_available_tools()
res = tools[0].image_to_string(Image.open(bit_image_file), lang="eng")

7. タイピング

# 認識した文字をcliに出力してタイピング
print(res)
driver.find_element_by_tag_name('body').send_keys(res)

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

実践Selenium WebDriver [ サタヤ・アバサララ ]
価格:3300円(税込、送料無料) (2021/9/25時点)