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

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

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

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

selenium

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

Q&A

解決済

2回答

1214閲覧

chromedriverでsend_keysして、float型ではじかれます

arayashiki

総合スコア11

Python

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

selenium

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

0グッド

0クリップ

投稿2019/07/14 05:30

実現したいこと

言語はpythonを使っています。
excleからデータを取得して、chromedriverでブラウザに入力したいです。
excleの中身はstr型、int型、float型と混在しております。

列ごとに新規ページを作成し、行ごとにブラウザの入力欄を埋めていくのですが、
float型でエラーが発生します。

エラーを読むとwebにタイピングする際に文字数をlenで数えているようなのですが、回避方法がまったくわかりません。

float型を変える、send_keysの違うやり方があるなど、ご教授願います。

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

File "site-packages\selenium\webdriver\common\utils.py", line 150, in keys_to_typing object of type 'float' has no len()

該当のソースコード

python

1import time 2import openpyxl 3import tkinter as tk 4import os 5import pprint 6import sys 7import signal 8 9from selenium import webdriver 10from selenium.webdriver.common.by import By 11from selenium.webdriver.support.ui import WebDriverWait 12from selenium.webdriver.support import expected_conditions as EC 13from selenium.common.exceptions import TimeoutException 14from tkinter import ttk 15from tkinter import filedialog 16from tkinter import messagebox 17 18#from selenium.webdriver.Chrome.options import Options 19 20def fselenium(root): 21 22 #excelファイルの取り込み 23 #ユーザーパス 24 UserPath = os.path.join(os.path.expanduser('~'),"Desktop","テンプレ.xlsx") 25 if os.path.exists(UserPath): 26 book = openpyxl.load_workbook(UserPath) 27 sheet = book["Sheet1"] 28 cells = sheet.values 29 else: 30 var_err.set(UserPath + 'が見つかりません。\nファイルを確認して下さい。') 31 sys.exit 32 33 itemList = list(cells) 34 35 if len(itemList) < 2: 36 var_err.set("ファイルの中身がありません。\nファイルを確認して下さい。") 37 sys.exit 38 39 driver_path = "C:/driver/chromedriver.exe" 40 41 driver = webdriver.Chrome(driver_path) 42 url = '入力サイト' 43 driver.get(url) 44 driver.implicitly_wait(10) ←信じれてない 45 elem_search_btn = driver.find_element_by_xpath("/html/body/nav/ul/li[2]/a") 46 elem_search_btn.click() 47 48 WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div/button[2]"))) 49 time.sleep(3) #予備スリープ 50 elem_search_btn = driver.find_element_by_xpath("/html/body/div[1]/div/button[2]") 51 elem_search_btn.click() 52 time.sleep(3) #予備スリープ 53 54 id = TextBox1.get() 55 pass = TextBox2.get() 56 57 WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//*[@id='email']"))) 58 elem_search_word = driver.find_element_by_xpath("//*[@id='email']") 59 elem_search_word.send_keys(id) 60 elem_search_word = driver.find_element_by_xpath("//*[@id='pass']") 61 elem_search_word.send_keys(pass) 62 elem_search_btn = driver.find_element_by_xpath("//*[@id='u_0_0']") 63 elem_search_btn.click() 64 time.sleep(5) #予備スリープ 65 66 driver.switch_to.window(handle_array[0]) 67 time.sleep(3) #予備スリープ 68 69 startNum = int(TextBox3.get()) 70 endNum = int(TextBox4.get()) 71 loopNum = endNum - startNum + 1 72 #登録する内容のリストitemList 73 for i in range(loopNum): 74 try: 75 #新規作成 76 elem_search_btn = driver.find_element_by_xpath("/html/body/div[1]/div/button") 77 elem_search_btn.click() 78 79 WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//*[@id='inputKwAll']"))) 80 time.sleep(3) 81 elem_search_word = driver.find_element_by_xpath("//*[@id='inputKwAll']") 82 elem_search_word.send_keys(itemList[i + startNum][0]) 83 for j in range(10): 84 if itemList[i + startNum][j + 3] is not None: 85 elem_search_word = driver.find_element_by_xpath("//*[@id='inputKwe" + str(j + 1) + "']") 86 elem_search_word.send_keys(itemList[i + startNum][j + 3]) #バグ発生部分 87 else : 88 break 89 90 elem_search_btn = driver.find_element_by_xpath("/html/body/div[1]/div/form/button") 91 elem_search_btn.click() 92 # ページ上のすべての要素が読み込まれるまで待機(30秒でタイムアウト判定) 93 WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div/table/tbody/tr[2]/td[3]/button"))) 94 time.sleep(3) 95 96 elem_search_btn = driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/button") 97 elem_search_btn.click() 98 WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div/table/tbody/tr[1]/td[4]/button[1]"))) 99 time.sleep(3) 100 except TimeoutException: 101 elem_search_btn = driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/button") 102 elem_search_btn.click() 103 WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div/table/tbody/tr[1]/td[4]/button[1]"))) 104 time.sleep(3) 105 next 106 driver.quit()

試したこと

map関数で全部str化しようとしましたが、思うような結果にできませんでした。

python

1itemMap = [*map(lambda x: str(x),itemList)]

また、一つ一つのtypeを見て条件でわけようとしましたが、うまく動作せず、ものすごい数の複製リストが生まれただけでした。

python

1row=[] 2new_itemList=[] 3for i in range(len(itemList)): 4 for j in range(10): 5 if type(itemList) is str: 6 row.append(itemList[i][j+3]) 7 if type(itemList) is not str: 8 row.append(str(itemList[i][j+3])) 9 new_itemList.append(row)

拙い文章で伝わりにくいかもしれませんが、よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

コード詳細は確認していませんが単純にelem_search_word.send_keys(str(itemList[i + startNum][j + 3]))でよいかと思われます。

投稿2019/07/14 09:56

can110

総合スコア38266

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

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

arayashiki

2019/07/15 04:51

can110様 ありがとうございます!動作いたしました。 こんな単純なことに気づかないくらい視野が狭まっていたんですね(汗) ベストアンサーとさせていただきます。
guest

0

エラーを読むとwebにタイピングする際に文字数をlenで数えているようなのですが、回避方法がまったくわかりません。

float型を変える、send_keysの違うやり方があるなど、ご教授願います

send_keys では文字列である必要があります。
文字列にする必要があります。
ですので、文字列にする方法が間違っていると思います。

色々と試したようですが、その試した結果が期待通りの動作になっているのか確認されおりますか?

投稿2019/07/14 07:09

t_obara

総合スコア5488

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

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

arayashiki

2019/07/14 07:55

t_obara様 ありがとうございます。 ことごとく希望通りの動作になっていないため、困り果てております。
t_obara

2019/07/14 08:03

デバッグして得られた内容を確認しているかと言う意味です。
arayashiki

2019/07/15 05:15

勉強不足で申し訳ありません。 デバッグ内容を確認して、期待通りではないから修正しているのではないのでしょうか? 内容を確認して、期待通り動いてくれていれば、こちらでも質問しないと思うのですが・・・。 何か見当はずれなことを申していたら、ご容赦ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問