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

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

新規登録して質問してみよう
ただいま回答率
85.50%
アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Python

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

selenium

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

Q&A

0回答

1238閲覧

Python Seleniumで、ドラッグアンドドロップの領域に画像をアップロードする方法。

shakariki

総合スコア5

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Python

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

selenium

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

0グッド

0クリップ

投稿2019/12/24 10:21

編集2022/01/12 10:55

前提・実現したいこと

ホテルやレストランの検索サイトを運営しております。
施設の登録をPythonのseleniumを使用して自動化しようとしておりますが、
ドラッグアンドドロップで画像をアップロードする必要があり、
その操作が分からず詰まってしまいました。

■画像
ローカルファイルに保存した画像をアップロードします。

■アップロードをする箇所
画像をアップロードする箇所が複数ありまして、
下記のソースコードが基本となります。

■アップロード方法
フロント側から確認できることとしては、
ドラッグアンドドロップのみで、
「ファイルから選んで挿入」や「ボタンを押す」等の挙動ではありません。
画像が自動でアップロードできれば、方法については問いません。

該当のソースコード

<div id="imageUpload1" class="imageUpload" data-cnt="1"> <input type="button" onclick="javascript:imageOnlyDelete(1);" value="×"/> <input type="hidden" name="images[0].image" id="imageFile1" value="3fATymXd9RMtbKr2.jpg"/> <input type="hidden" name="images[0].sortNum" id="imageSortNum1" value="0"/> <img id="imgPreview1" src="/facility_image/large_3fATymXd9RMtbKr2.jpg" data-cnt="1"/> </div>

###試した方法
from selenium import webdriver
driver = webdriver.Chrome()
・・・
driver.find_element_by_id('imageFile1').send_keys('C:.spyder-py3\facilityRegist\pic1.jpg')

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

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

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

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

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

shirai

2019/12/24 11:03

D&D以外の方法ではアップロードできないですか?(ファイルを選択 的なボタンは付随していないでしょうか
shakariki

2019/12/25 04:51

shirai さん ご確認頂きありがとうございます!質問の方も編集致しましたが、フロント面から確認できることとしては、D&Dの方法のみとなります。
dave_mccartney

2019/12/25 06:04

>フロント面から確認できること こちらは、seleniumではなく実際に画面を操作してアップロードした、ということでしょうか? 通常のseleniumのアップロードとしては、 webdriver.find_element_by_id('{${input type=fileのエレメントID}').send_keys('${アップロードファイルパス}') でいけると思いますが、マウスカーソルの挙動を再現したかったということですか?
shakariki

2019/12/25 09:59 編集

dave_mccartneyさん ご確認頂きありがとうございます! >マウスカーソルの挙動を再現したかったということですか? いえ、画像アップロードを自動化できれば、挙動は問わないです。 >webdriver.find_element_by_id('{${input type=fileのエレメントID}').send_keys('${アップロードファイルパス}') について今回の例でいくと、driver.find_element_by_id('imageFile1').send_keys('C:\.spyder-py3\facilityRegist\pic1.jpg')になるのでしょうか。 フォーラムなどで質問をするのが初めてなので、齟齬あるようでしたら申し訳ありません。
dave_mccartney

2019/12/26 05:03

ソース上ではid=imageFile1はhiddenのようですが、fileであるなら問題ないかと思います。
shakariki

2020/01/06 10:40

dave_mccartneyさん 返信遅れて申し訳ありませんでした! element not visibleになってしまい、エラーになってしまいました。 やはりhiddenの場合ですと難しいのでしょうか。
dave_mccartney

2020/01/07 06:42

>hiddenの場合ですと難しいのでしょうか。 seleniumの仕様として、画面上で触れない(hiddenであったり、ウィンドウサイズの範囲外であったり)オブジェクトは参照できないです。 代替案としては、 ・アップロード部分をjavascriptで制御しているのなら、 //html中のjavascript実行 webdriver.execute_script('アップロードしているfunction(ファイルパス)') ・input typeを変更するなら 変更前:<input type='hidden' …> 変更後:<input type='file' style='opacity=0'> <!-- 透明度 0 --> などでしょうか。いろいろ試してみてください。
shakariki

2020/01/07 08:59

dave_mccartneyさん ご回答頂きありがとうございます! >seleniumの仕様として、画面上で触れない(hiddenであったり、ウィンドウサイズの範囲外であったり)オブジェクトは参照できないです。 やはり参照が出来ないのですね。 >・アップロード部分をjavascriptで制御しているのなら、 >//html中のjavascript実行 >webdriver.execute_script('アップロードしているfunction(ファイルパス)') 実行してみたのですが、私の知識が不足しているのか上手くいかなかったです。 色々とご尽力頂きありがとうございました。現状のままseleniumで実行しようとすると難しそうなので、input typeを変更するか、マウス制御で検討をしようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問