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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

Q&A

解決済

1回答

1575閲覧

tkinterでファイル選択をした後にseleniumでwebを動かしたいです

chara2100

総合スコア1

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

0グッド

0クリップ

投稿2020/06/29 09:05

前提・実現したいこと

tkinterでファイル選択をした後にseleniumでwebを動かしたいです
webdriverの選択はできたのですが自動操作中の差し込み画像を先に選択して変数に入れることができません
python初心者なのでコードはものすごく雑です。
ここに質問の内容を詳しく書いてください。

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

browser = webdriver.Chrome(executable_path = file_path, chrome_options=options) Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\81703\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__ return self.func(*args) File "c:/Users/81703/OneDrive/デスクトップ/python/tk_test.py", line 25, in driver_path browser = webdriver.Chrome(executable_path = file_path, chrome_options=options) File "C:\Users\81703\Anaconda3\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in __init__ self.service.start() File "C:\Users\81703\Anaconda3\lib\site-packages\selenium\webdriver\common\service.py", line 76, in start stdin=PIPE) File "C:\Users\81703\Anaconda3\lib\subprocess.py", line 775, in __init__ restore_signals, start_new_session) File "C:\Users\81703\Anaconda3\lib\subprocess.py", line 1178, in _execute_child startupinfo) OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。

該当のソースコード

def img_path(): global img_dir, imgfile_path img_dir = 'C:' imgfile_path = tkinter.filedialog.askopenfilenames(initialdir = img_dir) def driver_path(): global idir, file_path idir = 'C:' file_path = tkinter.filedialog.askopenfilename(initialdir = idir) browser = webdriver.Chrome(executable_path = file_path, chrome_options=options) browser.get('https://www.mercari.com/jp/') #出品 browser.find_element_by_link_text("出品").click() sleep(1) #image browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div/form/div[2]/div/div/div[2]/div/div/div/input").send_keys(imgfile_path) sleep(3) browser.find_element_by_xpath("/html/body/div[1]/div/div[2]/div/form/div[2]/div/div/div[2]/div/div/div/input").send_keys(r"C:\Users\81703\OneDrive\デスクトップ\images\second.jpg")

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

「自動操作中の差し込み画像」については解りませんが、

質問に記載されたの情報だけでは解らない部分:

  • img_path, driver_path をよ呼び出してる部分のコードはありますか?
  • どのような操作でエラーになったのでしょうか(再現できるコードと手順を提示してください)

上記のエラーが出る可能性としては、
file_path (クロムのexeファイルのパスが必要)な所に、画像ファイルを選択して指定したのかもしれません。

  • imgfile_path や file_path を print() で表示して見て下さい。期待通りの値になってるでしょうか?

投稿2020/06/29 12:41

teamikl

総合スコア8760

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

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

chara2100

2020/06/30 03:41

説明不足で申し訳ございません 詳しく説明しますと、某ECサイトへの自動出品でtkinterを使って任意の画像ファイルを選択させようとしているところです。 自分のPC内ではdriverのpathと差し込む画像ファイルのpathは選択できたのですが任意でpathを選択し、それを browser.find_element_by_xpath('XXXXXX').send_keys('ファイルpath') の'ファイルpath'に代入できません。 tkinterの画面にファイル選択をする動作までは成功しましたが、画像を選択するとエラーが起きてしまいます。(恐らくファイル選択でpathの代入ができていなく実行をしてしまいchromeの自動操作が走ってしまいdriverのpathを選択できずにエラーが起きてしまっていると思います) 文章が下手で長くなってしまいましたが、要するに自動出品の際に任意のdriverPATHと画像ファイルPATHをtkinterを使って取得、代入をしたいです
teamikl

2020/06/30 04:17 編集

繰り返しになりますが > img_path, driver_path を呼び出してる部分のコードはありますか? 呼ぶ出し側が不明の為、どの操作でどちらのファイル選択ダイアログが呼ばれてるのかがわかりません。 ダイアログの部分に title を付けてどちらのファイル選択かを確認して見て下さい。 askopenfilename(title="画像選択", ...) # img_path関数内 askopenfilename(title="driver選択", ...) # driver_path関数内 > imgfile_path や file_path を print() で表示して見て下さい。期待通りの値になってるでしょうか? これはどうなってましたか?driver の部分に画像ファイルを選択してませんか? > browser.find_element_by_xpath('XXXXXX').send_keys('ファイルpath') の'ファイルpath'に代入できません。 エラーは、exeファイルが正しく選択されてない為なので、 それ以前の段階です。
chara2100

2020/06/30 04:39

#画像選択の関数 def img_path(): global img_dir, imgfile_path img_dir = 'C:' imgfile_path = tkinter.filedialog.askopenfilenames(title="画像選択", initialdir = img_dir) print(imgfile_path) #driverのpath関数 def driver_path(): global idir, file_path idir = 'C:' file_path = tkinter.filedialog.askopenfilename(title="driver選択", initialdir = idir) print(file_path) これで合っていますでしょうか...? エラー文は変わらずです。
teamikl

2020/06/30 04:46

合ってます。ファイル選択時に何のファイルを選ぶのかに注意してください。 それで、print(file_path) には何が表示されましたか?
chara2100

2020/06/30 11:00

tkinterの画面でdriverのPATHを先に選ぶとseleniumの処理が走り、画像アップロードの場面でエラーが起きます。逆に画像ファイルの選択を先に選ぶと最初と同じエラーが起きます。printは処理が走りません
teamikl

2020/06/30 11:16 編集

> printは処理が走りません 最初と同じエラーなら browser = webdriver.Chrome の所なので その前に表示できるはずですが。なにか齟齬がありそうですね。 いずれにしても、問題の再現が出来ないと原因が解らないので、再度繰り返しますが 「img_path, driver_path をよ呼び出してる部分のコード」を質問に掲載してください。 (問題を再現できる最小限のコードとその手順を書いてください) デバッグの方法としては、askopenfilename でダイアログを出して選択している部分を 固定値の文字列にしてみて動作はうまくいくのでしょうか? tkinter の扱いの問題なのか他なのか問題点の切り分けをしてみましょう。 今の情報だけでは解らない部分が多いので、 driveのPATH(exeファイルを選ぶところ)で他のファイルを選んでいる可能性があるとしか言えません。
teamikl

2020/06/30 11:21

あと、もう一点気付いた点 askopenfilenames 複数形になっている点に注意。 リストなのでリストとして扱う必要があります。 (ですが、質問文のエラーではこれを扱う前の部分のエラーです。) >driverのPATHを先に選ぶとseleniumの処理が走り、画像アップロードの場面でエラーが起きます。 こちらのケースで driver を正常に選べた場合は、画像ファイルの変数の扱いで解決するかもしれません。 print(imgfile_path) を driver_path関数内でも確認しましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問