【Python入門】溜まったポイントシールの登録を自動化してみる

※ 当サイトではアフィリエイト広告を利用しています。リンクは広告リンクも含みます。

この記事は約5分で読めます。
広告

たまったビールのポイントシールをGoogleドキュメント、Windows11(メモ帳、Webキャプチャ)JupiterNotebook(python)を使ってサイトに登録してみました。
実際にはスマフォでQRコード読み込んだほうが速いですが
OpenCVを使ってWebカメラでシールのQRコード読み込んで自動化しようと思いましたが私のWebカメラでは小さいQRコードは検出不可能でした。
自動化のいろいろ場面で応用できると思いますので参考にしてください。

必要な環境:Windows11、Anaconda(Python)、Googleアカウント

Youtubeにしてあるので、こちらもご覧ください。

広告

OCR

PythonでOCRのライブラリーを使うにはマシンパワーが必要だったりコードを書くのも大変なので、簡単で精度のいいGoogleドキュメントを使います。
シールを並べてラップをかぶせカメラで撮影

必要な部分をトリミングするためEdgeに画像をドラッグ&ドロップする。
そうするとEdgeで画像が表示されます。
EdgeのWebキャプチャが使用できるので、右上の設定でWebキャプチャを起動
必要な部分をトリミング→キャプチャをマークアップで保存。
Googleドライブへ、その画像ファイルをアップロード→右クリック→アプリで開く→Googleドキュメント
そうするとOCRされて数字が取り出せます。本当は精度はいいのですが、今回は元の画像が不鮮明(しわや光の反射)なのでかなり読み取れていません。
メモ帳に貼り付けて修正。(最初からこれでもいいかも)
1234 5678の間のスペースは不要なので置換で上の段は半角スペース、下の段は空欄で置換すると半角スペースがなくなります。

自動入力

Windowsのマウスやキー操作を自動化できるPyAutoGuiを利用します。PyAutoGuiについては以下を参考にしてください。

最初の入力欄の位置を調べる

自動化する部分は、入力フォームに数字を入力する部分です。ログインや入力フォームを表示させるところまでは手動でやってください。数字を入力するほとんどの部分はPyAutoGuiでキー入力の自動化を使います。しかしキー入力で対応できない部分が1か所あるので、そこだけマウス操作の自動化を使います。
まずマウス操作で自動化する部分の座標を調べます。
Anaconda Powershellを立ち上げ

python(Enter)
MouseControlFunctionのHere is a short Python 3 program that will constantly print out the position of the mouse cursorにあるコードをコピペ
Enterを2回すると
マウスの座標がリアルタイムで表示されます。
なので最初のシリアルナンバー入力欄の位置を記録しておきます。

JupiterNotebookで以下のコードを実行します。必ずJupiterNotebookを表示する前に対象のWEBページを表示してください。pag.hotkey(“alt”,”tab”)を実行したところで対象のWEBページが表示されます。
コード実行前に
aにはメモ帳からシリアルナンバー一覧をコピペしてください。
上で調べた最初の入力欄の位置を以下の部分に記入してください。
pag.moveTo(上で調べた最初の入力欄の位置,0.5)
実行するときは必ず半角モード(右下のタスクバーが「あ」ではなく「A」の状態)で実行しないと全角数字で入力されエラーになります。
コード

import pyautogui as pag
import time

#メモ帳からシリアルナンバー一覧をコピペ
a='''1843004063519379
1245104041775610
1680104136103477
1801504135976471
1295704135400483
1333104136408263
'''
j=0
#シリアルナンバーの配列に変換
seal_list=a.split()

#対象のWEBページをターゲットにする処理(事前にJupiterNotebookの前に対象のWEBページを表示しておく)
#1秒ウェイト
time.sleep(1)
pag.hotkey("alt","tab")
#最初のシリアルナンバー入力欄をクリック
pag.moveTo(425,595,0.5)
pag.click()
#シリアルナンバー入力ループ
for i in range(6):
    time.sleep(0.5)
#シリアルナンバー入力
    pag.write(seal_list[j+i])
    time.sleep(0.5)
    pag.press("Enter")
    if i==5 or len(seal_list)<=j+i:
        break
    else:
#次の入力欄にカーソルを移動
        time.sleep(0.5)
        pag.press("tab")
        time.sleep(0.5)

あとがき

昨今AIによる自動化の話題が多いが、個人的には何でもかんでもAIに任せられるような時代は当分こないと思います。部分的にAI(今回の場合GoogleドキュメントのOCRはAIだと思う)で便利になるけど結局アナログ的手法やプログラミング、AIによる便利ツールを組み合わせていく形だろうと思います。

MENTAやってます(ichige)

イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。

コメント

タイトルとURLをコピーしました