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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

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

selenium

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

Q&A

解決済

1回答

8034閲覧

pythonのseleniumを使ってドラックアンドドロップエリアに画像をアップロードしたい

shuhei.maruyama

総合スコア11

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

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

selenium

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

0グッド

0クリップ

投稿2019/05/19 04:46

編集2019/05/19 05:55

前提・実現したいこと

pythonのseleniumを使ってドラックアンドドロップエリアに画像をアップロードしたいです。

pythonのseleniumを使ってwebブラウザの自動化をしているのですが、
seleniumはHTML5に対応していないのでドラックアンドドロップエリアには画像をアップロードできません。

そこで知恵を貸して欲しくこちらに質問しました。
pythonのseleniumを使ってドラックアンドドロップエリアに画像をアップロードするにはどうしたらいいのでしょうか?

画像をアップロードしたいサイトはヤフーオークションです。
https://auctions.yahoo.co.jp/sell/jp/show/submit?select=non_premium
このページの上部のドラックアンドロップで画像をアップロードする場所に、
pythonのseleniumを使ってローカルにある画像をアップしたいです。

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

seleniumはHTML5に対応していないのでドラックアンドドロップエリアにはローカルの画像をアップロードできません。

該当のソースコード

python

試したこと

ネットで拾ってきた以下のソースを試しましたがうまくいきませんでした。
javascripでinputを疑似的に作って、そこにローカルの画像をアップロードしていくという方法のようです。

from selenium import webdriver

driver = webdriver.Chrome('./chromedriver')
driver.get('https://free.filesend.to/fileup_free2')

JS_DROP_FILE = "var tgt=arguments[0],e=document.createElement('input');e.type='"+
"file';e.addEventListener('change',function(event){var dataTrans" +
"fer={dropEffect:'',effectAllowed:'all',files:e.files,items:{},t" +
"ypes:[],setData:function(format,data){},getData:function(format" +
"){}};var emit=function(event,target){var evt=document.createEve" +
"nt('Event');evt.initEvent(event,true,false);evt.dataTransfer=da"+
"taTransfer;target.dispatchEvent(evt);};emit('dragenter',tgt);em"+
"it('dragover',tgt);emit('drop',tgt);document.body.removeChild(e"+
");},false);document.body.appendChild(e);return e;"

drop_area = driver.find_element_by_id("fileup")

tmp = driver.execute_script(JS_DROP_FILE, drop_area)
tmp.send_keys('/Users/dai/Desktop/test.png')

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

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

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

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

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

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

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

CHERRY

2019/05/19 11:06

ソースコードは、質問するときのヒントの [表現するための言葉がわからない時は表現の仕方を工夫しましょう]( https://teratail.com/help/question-tips#questionTips3-3-1 ) や [ソースコードを書きましょう]( https://teratail.com/help/question-tips#questionTips3-5-1 )を参考に「<CODE>」ボタンを利用して、内容を見やすく記載してください。 特に Python は、インデントが変わると意味が変わったり、エラーになりますので、マークダウンの <code> を使って記載していただくようにお願いします。 ---- うまくいきませんでしただけでは、わかりませんので、具体的な試したコードと結果を質問に追記していただけないでしょうか? 書かれているコードが試された内容とすると https://free.filesend.to/ は、会員情報の流出でサービス停止中なので、うまくいかないのではないかと思います。 別のサイトで試した結果を記載していただけないでしょうか?
guest

回答1

0

ベストアンサー

send_keyでアップロード領域にローカルファイルのパスを送ってやればいいです。具体的には下記です。

Python

1element = driver.find_element_by_name("file")#アップロードボタンのdom 2element.send_keys("/home/pavel/Desktop/949IH3GNHAo.jpg")#ローカルファイルのパス

投稿2019/05/20 03:33

編集2019/05/20 03:34
yamato_user

総合スコア2321

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

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

shuhei.maruyama

2019/05/22 09:21

ありがとうございました。できました!
ViCtoryODDS

2020/11/01 07:31

すみません。私もまったく同じことがわからず、ここにたどり着きました。 #アップロードボタンのdom というのが、どこの要素を選択すればわからず、困っています。 具体的な要素を教えていただくことは可能でしょうか? 便乗で恐縮ですが、よろしくお願いいたします。
ViCtoryODDS

2020/11/01 07:32

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable のようなエラーが出てしまいます。 上記エラーを防ごうと、クリックすると、ダイアログが出現してしまうので困っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問