質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

1758閲覧

pyautoguiを用いたブラウザ自動化の質問

hnkahd

総合スコア12

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2019/02/04 07:52

前提・実現したいこと

WebDriverを用いて開いたChrome内の
ボタンをクリックしたいと考えています。

下記ソース内にあります、
driver = webdriver.Chrome()
driver.get('https://www.yahoo.co.jp')
で開いたChromeで
x,y = pg.locateCenterOnScreen('sample.png')
を実行した際にうまく画像認識しません。

発生している問題・エラーメッセージ

例外が発生しました: pyscreeze.ImageNotFoundException Could not locate the image (highest confidence = 0.582)

該当のソースコード

Python3.7

1import pyautogui as pg 2from selenium import webdriver 3import chromedriver_binary 4 5driver = webdriver.Chrome() 6driver.maximize_window() 7driver.get('https://www.yahoo.co.jp') 8 9x,y = pg.locateCenterOnScreen('sample.png') 10pg.click(x,y)

試したこと

サンプル画像はこちらです。
イメージ説明

WindowsアプリとしてChromeを通常起動し、
'https://www.yahoo.co.jp'を開いた画面を用意。
この状態で
x,y = pg.locateCenterOnScreen('sample.png')
のみを実行した場合はうまく認識され、座標が返ってきます。

webdriver.get()を用いて開いたChromeと
通常起動したChromeでは認識する際に何か異なる点があるのでしょうか。

ご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まず、locateOnScreenの前にtime.sleep(5)程度の待ちを実行します。
さらに画像認識が結構シビアなようなので
x,y = pg.locateCenterOnScreen('sample.png', grayscale=True)
grayscale指定し、以下の画像を利用することで、動作することを確認できました。

イメージ説明

投稿2019/02/04 08:57

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hnkahd

2019/02/05 01:03

ご回答ありがとうございます。 grayscaleの指定はしましたが、私が用意した画像では 認識不可でした。 can110様が用意した画像をダウンロードして使用しましたが その場合は認識できる結果です。 そもそもsample.pngとして用意する画像の問題もありますでしょうか?
can110

2019/02/05 01:19

質問画像には白い余白部分が少しふくまれており、それが問題だった可能性があります。 回答にも記載しましたが、けっこうシビアに判定されるので、できるだけキレイに認識したい領域を切り取った画像を用意すべきかと思います。
guest

0

seleniumで操作されたChromeかどうかはJSの名前空間(?)を調べると判別可能なので、その点が異なるといえば異なるんだと思います。

投稿2019/02/04 08:11

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問