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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

アップロード

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

selenium

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

Q&A

1回答

2786閲覧

seleniumでfor文を使って画像アップロードしたら、1枚⇨2枚⇨3枚⇨4枚・・・と同時アップロードの枚数が増えて投稿されます。

yudai109

総合スコア18

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

アップロード

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

selenium

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

0グッド

0クリップ

投稿2020/02/19 12:24

編集2020/02/20 18:40

イメージ説明### 前提・実現したいこと

Baseと言うサイトでpythonを使って画像を自動アップロードするシステムを作っています。
CSVファイル(https://docs.google.com/spreadsheets/d/e/2PACX-1vSJmH8sah7B7LjlKSh7zOA9cUdDs73xpgxDqz_lPgrkp8w6sgp-a17HyGd0k72Zg_bPQmErURMLn9yc/pub?output=csv)から画像のファイル名を取得し、1枚づつアップロードするようにしたいのですが、1枚⇨2枚⇨3枚⇨4枚・・・と勝手に増えて投稿されてしまいます。

該当のソースコード

from selenium import webdriver import chromedriver_binary import time import random import csv # csvファイルを開いて、必要なセルの情報を取得 with open('/Users/yudai/Desktop/itemdata_20200217034307791/itemdata_20200217034307791.csv', 'r', encoding='shift_jis') as f: render = csv.reader(f) l = [row for row in render] print(l[1][0].split('-')[0]) def login(): # ログインページ開く driver.get('https://admin.thebase.in/shop_admin/items/add') # メアドと、パスワードを入力 driver.find_element_by_id('loginUserMailAddress').send_keys('【ID入れています】') time.sleep(1) driver.find_element_by_id('UserPassword').send_keys('【パスワード入れています】') time.sleep(1) # ログインボタンを押す driver.find_element_by_class_name('tabbox__btn').click() time.sleep(random.randint(2, 3)) time.sleep(1) def item(): # 商品名 driver.find_element_by_id('itemDetail_name').send_keys('商品名') time.sleep(0.4) # 商品詳細 driver.find_element_by_id('itemDetail_detail').send_keys(l[1][6].replace("<br>", "\n") + "\n" + l[1][7].replace("<br>", "\n")) time.sleep(0.4) # 値段 driver.find_element_by_id('itemDetail_price').send_keys(int(l[1][15]) + 1100) time.sleep(0.4) # 画像アップロードループ def item_image(): IMG_LIST = [] IMAGE_COL_NUM = 21 NUM = 2 driver.find_element_by_class_name('m-uploadBox__input').send_keys('/Users/yudai/Desktop/itemdata_20200217034307791/image/333957/77TZJ-001/' + l[1][IMAGE_COL_NUM - 1]) time.sleep(2) while IMAGE_COL_NUM <= 29: if len(l[1][IMAGE_COL_NUM]) == 0: time.sleep(2) break else: print(l[1][IMAGE_COL_NUM]) IMG_LIST.append(l[1][IMAGE_COL_NUM]) IMAGE_COL_NUM += 1 print(IMG_LIST) for IMG in IMG_LIST: print(IMG) driver.find_element_by_class_name('fileInput_18uZvZi5').send_keys('/Users/yudai/Desktop/itemdata_20200217034307791/image/333957/77TZJ-001/' + IMG) NUM += 1 time.sleep(6) def item_stock(): # 在庫と種類ループ ITEM_NUM = int(len(l)) ITEM_TYPE_NUM = int(len(l)) - 1 ITEM_STOCK_NUM = 0 while ITEM_NUM > 2: driver.find_element_by_class_name('c-defaultBtn').click() ITEM_NUM -= 1 time.sleep(0.2) while ITEM_TYPE_NUM > 0: driver.find_element_by_name('variationText' + str(ITEM_STOCK_NUM)).send_keys(l[ITEM_TYPE_NUM][10]) time.sleep(0.3) driver.find_element_by_name('variationStock' + str(ITEM_STOCK_NUM)).send_keys('3') ITEM_NUM -= 1 ITEM_TYPE_NUM -= 1 ITEM_STOCK_NUM += 1 time.sleep(0.2) if __name__ == '__main__': driver = webdriver.Chrome(executable_path='chromedriver') time.sleep(0.2) login() time.sleep(0.2) # item() time.sleep(0.2) item_image() time.sleep(0.2) # item_stock()

試したこと

time.sleep()をつけて時間をおいて試してみましたができませんでした。
postリクエストがずっとたまり続けてるのかなと思っていますが、解決策がわかりません。。
よろしくお願いいたします。

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

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

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

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

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

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

shirai

2020/02/20 14:51

増えていく様子の画像をもらえますか?
yudai109

2020/02/20 18:40

画像を添付いたしました! よろしくお願いいたします!
yudai109

2020/02/21 12:09

左上から右にかけて、 1枚⇨2枚⇨3枚⇨4枚・・・ と同じ写真が繰り返しアップロードされる現象となっています。。
shirai

2020/02/21 14:34

なるほど、プログラムとアップロードされた画像に規則性が見えるので なんとなく起こっている事象は把握できました。 アップロードボタンの画像とDOMもいただけますか?
guest

回答1

0

リストを' \n 'でつないで放り込むときちんと入るみたいです。

IMG_LIST_JOIN = ' \n '.join(IMG_LIST)

driver.find_element_by_class_name('fileInput_18uZvZi5').send_keys(IMG_LIST_JOIN)

https://stackoverflow.com/questions/17210325/multiple-files-upload-in-selenium-webdiver

投稿2020/03/20 00:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問