88152


やりたいこと：  
Pythonでエクセルを開きメニューの「ファイル」を画像でクリックしたいです。  
pyautoguiのライブラリーを使ってファイルの画像クリックしたいですが、下記のエラーが出ます。

エラー内容から見ると  
座標でクリックする際に2つ値まで受付ないようです。  
現在は4つの値を返しています。

2つ値の座標でクリックさせる方法どのように変更すれば良いでしょうか。

pyautoguiアンインストールしてみましたが、それでもクリックできないです。  
環境設定の問題でしょうか。

もし、このエラーの回避方法分かる方がいましたら、ご教授をお願い致します。

エラー内容

[code]

    Traceback (most recent call last):
      File "c:/Automation/excel/exceltest.py", line 31, in <module>
        pyautogui.click(position)
      File "C:\Usersbeyond\lib\site-packages\pyautogui\__init__.py", line 356, in click
        x, y = _unpackXY(x, y)
      File "C:\Usersbeyond\lib\site-packages\pyautogui\__init__.py", line 180, in _unpackXY
        raise ValueError('The supplied sequence must have exactly 2 elements ({0} were received).'.format(len(x)))
    ValueError: The supplied sequence must have exactly 2 elements (4 were received).
    
[/code]

ブログラム全体

[code]

    import subprocess
    import time
    from datetime import datetime as dt, date, timedelta
    from dateutil.relativedelta import relativedelta
    import pyautogui
    
    # import subprocess
    
    
    file_time= dt.now().strftime("%Y%m%d")
    log_file="C:\\Python\\test\\log_excel"+file_time+".txt"
    
    with open(log_file, 'w') as f:
    
      
        #エクセルを開くファイル
        excel_file =r"C:\Users\python\Documents\test.xlsx"
    
        p = subprocess.Popen([r"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE",excel_file])
    
        #エクセルを開いたログをテキストへ出力
        print("excel Open",file=f)
        
        #起動するまでの時間 #5
        time.sleep(5) 
        pyautogui.press(['enter'])
    
        time.sleep(5) #3
        #メニューファイルアイコンの座標を取得
        position=pyautogui.locateOnScreen("C:\\Python\\picture\\filemeu.PNG" , confidence=0.9)
    
        #ファイルをクリック
        pyautogui.click(position)
    
    with open(log_file) as f:
      print(f.readlines())
    
[/code]


CC BY-SA 4.0
2022-03-28T04:55:40.250
88062
2022-08-10T06:18:20.553
2022-08-10T06:18:20.553
3060
18859
question
python python3 pyautogui
pyautogui画像クリックlocateOnScreen ValueErrorエラーについて


質問で推測されているように、エラーメッセージは「パラメータは2つだけのはずだが4つ指定されている」ということでしょう。  
ちなみに`locateOnScreen`が`ValueError`なのではなく、エラーが発生しているのは`click`でしょう。

こちらのドキュメントの解説では`locateOnScreen`は4つの整数`(left, top, width,
height)`で構成されるtupleが返ってくるということです。  
[The Locate
Functions](https://pyautogui.readthedocs.io/en/latest/screenshot.html#the-
locate-functions)

> you can call the locateOnScreen('calc7key.png') function to get the screen
> coordinates. The return value is a 4-integer tuple: (left, top, width,
> height).

それに対して`click`はいくつかバリエーションがあるようですが、2つのパラメータをとるのはX座標とY座標が指定されるものでしょう。  
ただしキーワード引数を使うのが主なようなので、それもあって使い方としては合って無さそうですが。  
[Mouse Clicks](https://pyautogui.readthedocs.io/en/latest/mouse.html#mouse-
clicks)

>
[code]

>     >>> pyautogui.click(x=100, y=200)  # move to 100, 200, then click the
> left mouse button.
>  
[/code]

* * *

おそらく、`filemeu.PNG`で示された画像が、スクリーン上のどの位置にあるかが`(left, top, width,
height)`で返ってくるのでしょうから、その`left(=X)`,`top(=Y)`の値に、`filemenu`中のクリックしたい項目の`filemenu`左上からの相対位置のX,Y座標数値を加算した値を`click`で指定すれば良いと思われます。


CC BY-SA 4.0
2022-04-03T15:43:22.760
88152
2022-04-03T15:43:22.760
26370
88062
answer