Python×医療事務(×トロント)

#医療 / #医療事務 / #IT / #トロント / #歯科助手 / #のんびり / #備忘録 / #趣味

pyAutoGUI エラーが出ても成功するまで繰り返す retry 等

pyAutoGUI チートシート(英語バージョン)

Cheat Sheet — PyAutoGUI documentation

英語ですが英語のほうが色々記載してあります

 

 

エラーが出ても処理する方法

コマンド(windows)or  ターミナル(MAC)にて下記を実行

pip install retrying

下記をimport

import random from retrying import retry

文字通り成功するまで繰り返すだった↓  「do_until_succeed」

@retry()

def do_until_succeed(x,y = pg.locateCenterOnScreen("画像名.png",confidence=.5)):

pg.moveTo(x=x//2, y=y//2)# マウス座標を(x,y)まで移動

pg.doubleClick(x,y)

time.sleep(15)

他下記参照↓

blog.imind.jp

pyAutoGUI のバージョンを調べる

下記コマンドで実施 pip list

今のバージョン f:id:chocolate22554:20210103135910p:plain

 

PyAutoGUI

退屈なことはpython にやらせよう  でもピックアップされている PyAutoGUI

PyAutoGUI = RPA と考えていただければ分かりやすいです

RPAは結構費用が高く付くのでpythonでPyAutoGUIすれば費用は安め

 

無料のRPAもありますが

www.uipath.com

 

途中で挫折+pythonを使いたいのでPyAutoGUIを使用していきます

いつかUiPathも触ってみたいです

 

先に下記をimportしておく

import pyautogui as pg
import time
from time import sleep #timeモジュールのsleep関数


#import pyperclip(あまり関係ない)

PyAutoGUI でよく使うコード

ただひたすら下記コードを繰り返し使う作業に近い

 参照したHP↓

pythonで業務効率化/RPA自作 – 検討 その2 PyAutoGUI を試す。 | beginners Hub

 

> 画像とマッチする座標を画面上から取得

x,y = pg.locateCenterOnScreen("ファイル名",confidence=.5) 

PyAutoGUIで画像認識(locateOnScreen)【Python】 | ジコログ


>confidenceについて

公式サイトより

Screenshot Functions — PyAutoGUI documentation

confidence = 画面上の画像の位置を特定する精度を指定

無視できるほどのピクセルの違いで画像の位置を特定できない場合に役立つ
画像を読み込めないときに、調整する変数ということ
confidenceのみ追加の場合、0.5まで下げればコードが動いた
confidence変数の利用には、OpenCVが必須

 

>grayscale(そんなに使わなかった)

grayscale=True を渡すことで、わずかに高速化することができます(約 30% 程度)。 これにより、画像やスクリーンショットの色が脱色され、ロケートは高速化されますが、誤検出の原因となる可能性があります。
白黒にして、余計な情報を取り除くということです。

 

 > マウス座標を(x,y)まで移動

pg.moveTo(x=x//2, y=y//2)

MACの場合 //を使用し2割る

> マウスボタンをクリックする

pg.click()

 

>#sleep関数の引数は“秒”で指定

time.sleep(3)

> キーボードの()を押す

pg.press("tab")

pg.press("enter")

>ショートカット 同時押し

pg.hotkey('command'(今回の場合windowsでがctr), 'f')

 

> 文字入力

pg.typewrite("文字 英数字のみ")

pg.typewrite("文字 英数字のみ") 

 日本語の場合 どこかからコピー&ペーストで使用する形

そのため 該当の部分に移動or 画像(アイコン)クリック→表示→command(ctr)+Aで全体選択等をし コピー&ペースト のような作業をしないといけない

 

例として該当サイトにログインする際の一連のコード

import pyautogui as pg
import time
from time import sleep #timeモジュールのsleep関数
#import pyperclip

 

x,y = pg.locateCenterOnScreen("ファイル名.png",confidence=.5)

x,y = pg.locateCenterOnScreen("ファイル名.png",confidence=.5)

pyautogui/pg.moveTo(x=x//2, y=y//2)

time.sleep(3)

pg.typewrite("英数字")

pg.press("tab")

pg.typewrite("英数字")

pg.press("enter") 

 

 

 

今後参考になりそうなURL一覧と機能

https://www.octoparse.jp/blog/top-30-process-automation-tools-for-2018/

UiPath

https://www.uipath.com/ja/

ライセンス:無料、および商業

UiPathは、UiPath社が提供しているRPAツールです。UiPath社は、作業や業務を自動化するロボットを開発する会社です。UiPathは機能が豊富にある自動化ツールを開発する環境を提供しており、簡単にロボットでの業務の流れが構築できます。業務の流れのシナリオ化は、ロボットにさせるアクティビティ(動作)をドラッグ&ドロップすることによって簡単にできるだけでなく、「レコーダー」という人の動作を見て自動化するものを使用するのみです。.Netがわからない初心者でも向いています。されに、従業員250名/台未満、かつ年商約5億円未満の企業は無料で利用できます。


Webデータ取得ツール

16. Octoparse

https://www.octoparse.jp/

ライセンス:無料

Octoparseは、視覚的に分かりやすくデータを抽出できるWebスクレイピングツールです。Webページ自動認識の機能を備え、取得先のURLを入力すると、データが自動的に検出され、プログラミングの知識がなくても、簡単にデータを抽出できます。

それに、ソフトを使いやすくするために、Yahooショッピング、楽天マイナビ転職、Twitterなど数多くのWebスクレイピングテンプレートを提供しています。パラメータ(ターゲットページのURL、検索キーワードなど)を入力するだけで、データがどんどん抽出されてきます。取得したデータを、CSVExcel、またはデータベースなどのフォーマットとして保存することができます。

また、クラウド型のプラットフォームも提供するので、定期的にデータを取得可能で、自動取得したデータはクラウドに保存され、どこでもアクセスできます。ハードウェア保守も不要だし、ネットワーク中断に心配する必要もありません。

海外製品ですが、ソフトのUI、カスタマーサポートも全部日本語対応しています。しかも無料でも使えるので、初心者には一番オススメです。

17. WebScraper(Chrome)

http://webscraper.io/

ライセンス:無料

Web Scraperは、オンラインテーブルからデータを抽出できる、使いやすいスクリーンスクレイピングツールです。Web Scraperは動的なWebページからデータを抽出できます。サイトマップを使って、サイトをナビゲートし、複数のタイプのデータ(テキスト、テーブル、画像、リンクなど)を抽出します。また、ページをスクロールしたり、AJAX経由でデータをロードしたページングボタンをクリックしたり、ボタンをクリックしてより多くのデータをロードしたりするなど、JavaScriptで動的にロードまたは生成されたデータを抽出することもできます。また、データをCSV形式で簡単にエクスポートしたり、CouchDBに保存したりすることができます。

 

 

18. Scrapy

https://scrapy.org/

ライセンス:オープンソース

Scrapyは、Python で書かれているWebクローリングとスクレイピングフレームワークです。もともとはWebスクレイピング用に設計されており、APIを使用してデータを抽出したり、汎用のWebクローラーとして使用することもできます。Scrapyは、開発者がWebサイト動作に関する仮定のテストに使用できるWebクローリングシェルも提供します。

 

20. Outwit Hub

https://www.outwit.com/products/hub/

ライセンス:無料

OutWit Hubは、Webデータ抽出機能を備えたFirefox向けのアドオンで、Web検索を簡単にさせます。このWebクローラーは、表示中のWebページの詳細をパーツ毎に一覧で表示、必要なパーツをローカルに簡単にダウンロードできます。ニーズに応じて、大量のデータをスクレイピングできる単一のインターフェイスを提供します。OutWit Hubを使うと、ブラウザ自体から任意のWebページをスクレイピングしたり、自動エージェントを作成してデータを抽出したり、設定によってフォーマットすることさえできます。これは、最も簡単なWebスクレイピングツールの1つで、無料だし、コードを書くことなくWebデータを抽出できます。

 

 

 

テスト自動化ツール

21. Selenium

http://www.seleniumhq.org/

ライセンス:オープンソース

Seleniumは、WindowsMacLinuxなどのさまざまなWebアプリケーションやプラットフォームのファンクションテストを行うツールとして注目されています。Web自動化テスター、特に高度なプログラミングとスクリプティングスキルを備えたテスターの自動化フレームワークとして、JavaPHPC#PythonRubyJavaScript(Node.js)などの複数言語に対応できます。Selenimuは、柔軟性が高く、多くの機能が提供されているので,業界としてもSeleniumを無視できないほど重要なものになってきています。

 

 

 

タイピングゲームの自動化 

https://tex2e.github.io/blog/python/auto-SushiDA
RPAでは、画像認識や光学文字認識の精度を上げる
機械学習によって画像や音声のような非構造化データを学習し、RPAが得意な定型的なデータに加工することで、より広範囲な業務を自動化できる

 

画像認識で動く障害物避けゲームをプレイしてみよう 

https://note.com/benao_blog/n/n84a7d61eda69

 

OCRを使用する際に役立ちそう

pythonOCRの設定を

予めインストールが必要なもの

・pyautogui

・pyocr

・PIL

 

TesseractはOCRエンジンである

https://self-development.info/tesseractwindowsへインストールする【ocr】/

EPSON レシートプリンター 発券機について

EPSONのレシートプリンターについて色々機能が充実しており今後活用できるのではないかと思い備忘録がてら残します

 

どの機種か忘れたのですがEPSONのレシートプリンターを使用しているのでわからない単語を調べてみた

www.epson.jp

DM-D コネクターとはで調べてみたけどもいいのがない

f:id:chocolate22554:20201230192207p:plain

 

 

パススルー接続についてしらべると下記の感じ

パススルーとは何ですか? | Sony JP

f:id:chocolate22554:20201230192520p:plain

いちいち繋ぎ変える必要がないということらしい

 

ACケーブル

 

f:id:chocolate22554:20201230192825p:plain

www.mco.co.jp

 

スタンドアローン接続

f:id:chocolate22554:20201230193101p:plain

Y接続

下記のURLを見ていたら小学生の時に習った電流について(理科)を思い出す

Δ接続とY接続およびΔ-Y変換 | 高校物理の備忘録

 

 

インターフェイス

f:id:chocolate22554:20201230193944p:plain



このように開発者向けのダウンロードできるものがある

www.epson.jp

 

 

 

MySQL環境構築(途中)

ターミナルを起動し、下記コマンドでbrewがインストールされているのか確認する
 
MACにてbrewがインストールされているのを前提で
 
 
 
 
問題を報告する
・起動
 
 
 
問題を報告する
実行後、次のようなメッセージが表示されたら問題なし
Starting MySQL
. SUCCESS!
・セキュリティ周りの初期設定を行います。
次のコマンドをターミナルで実行してください。
 
 
 
問題を報告する
yと入力後、1と入力し、MySQLにログインするための好きなパスワードを入力
 
パスワード入力時に、何も入力されていないように感じるが、入力されている
 
注意
何度パスワードを実行しても下記のメッセージにて繰り返しになってしまう場合は、パウワードポリシーの制約文字数を下げてみる
... Failed! Error: Your password does not satisfy the current policy requirements
New password:
 

下記エラーが頻繁に出てくる

f:id:chocolate22554:20201229111043p:plain

 

Googleにて下記 単語で検索

f:id:chocolate22554:20201229111301p:plain

❌下記を参考に英数字、記号を混ぜ8文字で設定したが相変わらず進まない

Zenlogic よくある質問(FAQ)

 
 
下記エラー発生

f:id:chocolate22554:20201229114215p:plain

❌下記URLを参考に

mysql -u root -p でERROR 1045 (28000)に遭遇する - Qiita

# service mysql stop  にて下記エラー
 

f:id:chocolate22554:20201230084312p:plain



 

f:id:chocolate22554:20201230084542p:plain

 

f:id:chocolate22554:20201230084729p:plain

次に権限システムを起動せずにMySQLを起動

f:id:chocolate22554:20201230085055p:plain

 

mysql -u root -pを実行しERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)というエラー発生

f:id:chocolate22554:20201230103352p:plain

検索すると先程もアクセスしたURLに解決策ある?

mysql -u root -p でERROR 1045 (28000)に遭遇する - Qiita

 

◎mysqld_safe --skip-grant-tables &を実行するとHPと同じ反応が出た

↓自分がコマンドで実行f:id:chocolate22554:20201230104101p:plain

HPのコード↓
f:id:chocolate22554:20201230104119p:plain

 

◎ps aux| grep mysqldを実行

 

f:id:chocolate22554:20201230104503p:plain

サイト上にあった 下記URLで  kill -9 の処理をする

mysqld_safe A mysqld process already existsが出た時の対処方法 | ふみのあるきかた

数字は赤線部分を使用

f:id:chocolate22554:20210110033820p:plain



下記のようになった

f:id:chocolate22554:20201230105029p:plain

違うバージョン

f:id:chocolate22554:20210110034506p:plain


 

 

 

 

mysql.server startを実行しHPと同じように出来ました!

f:id:chocolate22554:20201230105330p:plain

こういうふうに最初出来ないと頭抱えても調べて出来ていくと達成感半端ないのでこれがITの醍醐味でもあるなあと私は思います

しかし日本語化設定と暗号化プラグインの設定のための設定?があるのですがまたエラーが出ます 違う方法でアプローチ

f:id:chocolate22554:20201230110004p:plain

上記エラーは下記URLでチャレンジ

MySQLインストール時に遭遇する「アクセス拒否エラー(Access denied for user 'root'@'localhost')」の対処 | Mobile First Marketing Labo

 

3番の mysql> まで出てきた際に  use mysql;で実行

f:id:chocolate22554:20201230154736p:plain

Database changed  まで出てくる

次に  mysql>      select * from  user;で実行

URLと違い長々と出てきます

f:id:chocolate22554:20201230154918p:plain

HPと違い 

4 rows in set (0.00 sec)で終わります

f:id:chocolate22554:20201230154957p:plain

mysql> grant all privileges on *.* to root@localhost identified by 'パスワード' with grant option;と実行すると下記エラーが発生

f:id:chocolate22554:20201230155536p:plain

MySQLのPasswordと権限の設定 · GitHub

f:id:chocolate22554:20201230110132p:plain

 

f:id:chocolate22554:20201230110145p:plain





なにか分かりそうですが一旦ここまでで

 

 
 
 

タピオカはいくつ?のコードを練習

 

 

下記URLを参考に画像認識の練習をしてみた(コピペして貼って上手くいかないのを調べまくるだけ)

rightcode.co.jp

最初はopencvを pip install opencv のようなものを仮想環境のコマンドで実行するもできない

f:id:chocolate22554:20201130174446p:plain ⇛エラーとしてはcv2がありませんというものだった  よく見て  from cv2 import * のcv2を指していることがわかった ⇛Anacondaでopencvインストール試みる 下記エラーが出た f:id:chocolate22554:20201130173513p:plain ⇛原因:anaconda仮想環境 のpython verが3.8だからopencvは3.7かそれ以下じゃないと無理ってことだった

◎対策⇛仮想環境作り直した

次 whereなんてありませんけど と言われる

f:id:chocolate22554:20201130184132p:plain またタピオカの画像が連続で出てくる被害に見舞われる f:id:chocolate22554:20201130184253p:plain whereってなんだと思ったら簡単なことでwhereが未定義のためだった Pythonの「*** is not defined」とは何かを現役エンジニアが解説【初心者向け】 | TechAcademyマガジン 下のHSV を使ってみよう部分のコードを見たら

◎対策⇛from numpy import array, where, ones_like  が 「opencv」のほうでなかったためと判明 追加した

ブログ通り画像が出た f:id:chocolate22554:20201130184735p:plain

#■パス変更

#jupyter上で

import sys
sys.path.append('/Users/maeda/opt/anaconda3/envs/app1/lib/python3.7/site-packages')

#sys.pathはpythonライブラリをimportする先を設定しているみたいです(つまりライブラリへのpath)
#結局Anaconda仮想環境のpythonのバージョンを英語通り3.8→3.7に変えたら成功した





# コマンドプロンプトが動かなくなった時
#https://www.cse.kyoto-su.ac.jp/~oomoto/lecture/program/tips/trouble/hungup.html
#https://qiita.com/yut-nagase/items/27b0a17e9e3074a95c6c


from numpy import array, where, ones_like
from matplotlib import pyplot
## 画像を白黒で読み込む ##
img_bw = imread('tapioca_drink.jpg', 2) # ,2は白黒で読み込むという合図
 
## 一定の明るさ(この場合は120)より暗い部分のみ残してみる ##
img_mod = where(img_bw > 120 , 0, img_bw)
pyplot.imshow(img_mod)

HSV を使ってみよう は問題なくクリア

#HSV を使ってみよう
from cv2 import *
from numpy import array, where, ones_like
from matplotlib import pyplot


## カラーで読み込んだ画像をcvtColorを用いてhsvに変更 ##
img_cl = imread('tapioca_drink.jpg', 6)
img_hsv = cvtColor(img_cl, COLOR_BGR2HSV)

## 赤色の範囲を定義 ##
hsv_min = array([150,  64,   0])
hsv_max = array([180, 255, 255])

## 赤色をマスクする ##   
mask = inRange(img_hsv, hsv_min, hsv_max)
mask = bitwise_not(mask)
img_hsv = bitwise_and(img_hsv, img_hsv, mask = mask)

## 背景の黒い部分などを白くする ##
img_hsv[:, :, 2] = where(img_hsv[:, :, 2] < 10, 255 * ones_like(img_hsv[:, :, 2]), img_hsv[:, :, 2])

## HSVからBGRを経由して白黒に変更する ##
img_bgr = cvtColor(img_hsv, COLOR_HSV2BGR)
img_bw  = cvtColor(img_bgr, COLOR_BGR2GRAY)

## ごみを取るためのブラシ処理 ##
img_bw_b = blur(img_bw, (3, 3))

## 暗い部分のみ残してみる ##
img_bw_b = where(img_bw_b < 90, 255, 0)
pyplot.imshow(img_bw_b)

タピオカはいくつある?

次 ValueError: too many values to unpack (expected 2)  というエラーが出たf:id:chocolate22554:20201130191007p:plain

可変長引数の問題と思われるが自分が作りたいものにすごい近いパターンのものでないため一旦ここまで時間ある時にまた訂正&挑戦したいなと思います

#■パス変更

#jupyter上で

import sys
sys.path.append('/Users/maeda/opt/anaconda3/envs/app1/lib/python3.7/site-packages')

#sys.pathはpythonライブラリをimportする先を設定しているみたいです(つまりライブラリへのpath)
#結局Anaconda仮想環境のpythonのバージョンを英語通り3.8→3.7に変えたら成功した





# コマンドプロンプトが動かなくなった時
#https://www.cse.kyoto-su.ac.jp/~oomoto/lecture/program/tips/trouble/hungup.html
#https://qiita.com/yut-nagase/items/27b0a17e9e3074a95c6c


from numpy import array, where, ones_like
from matplotlib import pyplot
## 画像を白黒で読み込む ##
img_bw = imread('tapioca_drink.jpg', 2) # ,2は白黒で読み込むという合図
 
## 一定の明るさ(この場合は120)より暗い部分のみ残してみる ##
img_mod = where(img_bw > 120 , 0, img_bw)
pyplot.imshow(img_mod)