pyautogui でページをスクロールさせながらすべてのチェックボックスをチェックし「次へ進む」を挿下したい
とあるアプリ内でページをスクロールさせながらすべてのチェックボックスをチェックし
ページ最下部(すべてのボックスにチェック済)にて「次へ進む」を挿下したいと思いコードを書き始めました。一応望む結果は得られたのですが、どうにも不安定かつ冗長なコードになってしまったので質問を投稿します。
解決したいこと
pyautogui でページをスクロールさせながらすべてのチェックボックスをチェックし「次へ進む」を挿下したい。
とあるアプリ内でページをスクロールさせながらすべてのチェックボックスをチェックし
ページ最下部(すべてのボックスにチェック済)にて「次へ進む」を挿下したいと思いコードを書き始めました。
理想を言えば下記のような洗練されたプログラムを書きたいと思います。
(1)チェックボックスを画像認識で識別しチェックを入れる
(2)画面をスクロールする
(3)画面最下部まで(1)(2)をループ
(4)最下部到達後「次へ進む」ボタンを画像認識で識別。クリックする
現実は、30回ほど(1)(2)のコードをコピペしし、(4)のコードを書きとりあえず満足しました。
が、ページの長さはまちまちなので、やはり安定しません。
発生している問題・エラー
(コード自体は機能しており、エラーは出ていません)
該当するソースコード
import pyautogui
import os
import time,subprocess,platform
import pyautogui as pa
import pyperclip
~略~
#チェックボックスを画像認識しチェックしスクロールします
#画像2枚は仮称ですがともに保存場所、命名等正しく認識されています
for checkbox in pyautogui.locateAllOnScreen(checkbox_png,confidence=0.97):
print('見つかりました:', checkbox)
#座標の1点を取り出して画像の中心を取得する
center_checkbox = pyautogui.center(checkbox)
print('座標は:', checkbox)
#画像の中心をクリックする
pa.click(center_checkbox)
time.sleep(0.2)
#スクロールします
pyautogui.press('pagedown')
time.sleep(0.8)
※※上記を30回繰り返します※※
※※30回も繰り返せば多分最下部にたどり着いているので「次へ進む」ボタンを挿下します
next_button = None
for i in range(10):
next_button = pyautogui.locateOnScreen(next_button_png,grayscale=True, confidence=0.5)
if next_button is None:
time.sleep(1)
print('探しています')
continue
break
if next_button is None:
pyautogui.alert('見つかりません')
quit()
print('見つかりました:', next_button)
x, y = pyautogui.center(next_button)
pyautogui.click(x, y)
time.sleep(2)
自分で試したこと
おそらく、
チェックボックスにチェックを入れ終わった時点で、
画面内の「次へ進む」ボタンの有無を判定
→無ければ下方向にスクロール
→あれば「次へ進む」を挿下
というようなforやifやbreakを使った制御構文を書くのでしょうが色々考えましたが結局望む結果は得られませんでした。
ご指導いただけますと幸いです。
よろしくお願いいたします。
0