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

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

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

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

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Python

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

selenium

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

Q&A

解決済

1回答

2268閲覧

SeleniumとPythonを使用してフォルダ内の複数画像を一括アップロードしたい

shimapy

総合スコア2

アップロード

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

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Python

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

selenium

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

0グッド

0クリップ

投稿2021/12/07 00:58

前提・実現したいこと

Python初心者です。初めてteratailを利用させていただきます。
Pythonとseleniumを使用してウェブサイトに自動で入力するツールを作っています。

大変初歩的な質問で申し訳ないのですが、ドラッグアンドドロップするところに複数枚の写真をアップロードしたいと考えています。複数枚の写真は一つのフォルダに入っており、そのフォルダに入っている画像ファイルを全てアップロードしたいです。

使用している環境は、Python 3.10、MacBook Pro M1、IDLEにて開発を行っています。
画像のパスやその他入力したい情報は全てExcelで作成したCSVファイルにまとまっています。
できればExcelの方に入力する画像に関することも画像ファイル一つ一つだととても大変なので、フォルダまでのパスのみにしたいと思っています。

どなたかご教授いただけると大変助かります。

試したこと

photo = driver.find_element(By.CSS_SELECTOR, '#対応するCSS' photo.send_keys('/Users/name/Document/Photos/画像.jpg' + '/Users/name/Document/Photos/画像2.jpg' +... )

少しネットで調べた結果出てきたので、このようにしたのですが、フォルダによって画像の枚数が違うため、send_keysを使って+で画像ファイルを一つずつ繋げていくことが難しいと感じました。send_keysで枚数が違くても一括アップロードをする方法、もしくは他の方法でフォルダのみを選択して一括アップロードをすることができる方いましたら教えていただきたいです。

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

入力したいサイトはJavaScriptを使用しているようです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

csvからとってきているパスのデータがどういう状態かによりますが。
リストで取ってこれるなら"".join(リスト名)で連結できます。
リストじゃなくばらばらであれば一回リストにして同じようにすればできます。

投稿2021/12/07 01:45

編集2021/12/07 01:48
irognodyci

総合スコア227

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

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

shimapy

2021/12/07 02:01

貴重なご回答ありがとうございます。 CSVファイルのindex[1]の部分に写真のパスが記載されています。全部の写真を読み込むためにこのようにしました↓ file = 'ファイル名.csv' f = open(file, 'r') reader = csv.reader(f) l = [row for row in reader] length = len(l) - 1 for i in range(length): i += 1 photo_file = l[i][1] photo_fileをphoto.send_keysのカッコ内に入力していくような形にしていたのですが、lenで全データを取らず枚数指定をしたいのです。inputなどで枚数指定をするなら複数の各フォルダに入れた写真を全部一括にアップロードできないかと思いました。 ちなみにCSVからフォルダまでのパスを指定した場合、各フォルダ内の画像のパスをリスト化することも可能なのでしょうか?各横列に対応した画像フォルダを入れたいと考えています
irognodyci

2021/12/07 02:22

photo_files = "" for i in range(length): i += 1 photo_files += l[i][1] パスを足して1文にしたいならこれでできますね。全データではなく枚数指定というのがわかっていないですが、連続する部分であればlengthとi+=1の部分を変えればできそうです。点在するならfor文内で別の処理がいりますね。 csvからフォルダまでのパスを指定~っていうのは、相対パスでフォルダのパスを手動指定して、そこにある画像のパスをリストに全部入れるってことですか?
shimapy

2021/12/07 05:27

ご返答ありがとうございます。 このコードの場合、画像ファイルまでのパスを縦列に入れないといけないということですよね?私のイメージを上手く説明できないのですが、画像データが複数入ったフォルダまでのパスを一つだけにしたいという考えです。 簡単にいうと、画像フォルダまでのパスだけを(l[1][1]だけに)書いてそのフォルダに入っている複数の画像を出力したいという感じです。 説明が下手で大変申し訳ないです…
irognodyci

2021/12/07 06:40

ちゃんとわかっていなくてすみません。globを使ってフォルダの中の画像を取り出してリストに入れられます。 import glob path = l[1][1] photo_files = glob.glob(path + '/*.jpg') # ['画像1.jpg','画像2.jpg'…] 画像はフルパス photo.send_keys("".join(photo_files) )
shimapy

2021/12/08 03:28

とんでもないです。私の説明がとてもわかりにくくて… globというのがあるのですね、初めて目にしました。試してみます! 大変参考になる情報をありがとうございます
irognodyci

2021/12/08 05:31

いえいえ、わからないことあれば教えてください!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問