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

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

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

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

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

Python

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

Q&A

解決済

2回答

557閲覧

スクレイピング時,期間入力においてTypeError: object of type 'datetime.datetime' has no len()というエラー

ricopin333

総合スコア3

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

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

Python

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

1グッド

0クリップ

投稿2024/04/25 07:35

編集2024/04/25 07:51

実現したいこと

webスクレイピングを行っています.そこで期間を設定する際,dd-mm-yyyyという形でページに入力したいのですがやり方を教えていただきたいです.

発生している問題・分からないこと

今,loopをprintすると2024-04-01 00:00:00とプリントされます.dd-mm-yyyyという形になっていないため,loopがstart_spanにはいりません.

該当のソースコード

import datetime from dateutil.relativedelta import relativedelta import time from selenium import webdriver startday = "01-01-2024" #開始日 lastday="01-04-2024" #終了日 #開始日終了日を日付型にする startday = datetime.datetime.strptime(startday,"%d-%m-%Y") lastday = datetime.datetime.strptime(lastday,"%d-%m-%Y") #開始日と終了日の月の差分を取得する sabun = (lastday.year-startday.year)*12+lastday.month-startday.month for i in range(0,sabun+1): start = startday #開始日を設定する loop=start+relativedelta(months=i) #開始日に1か月づつ加算する loop2=loop+relativedelta(month=i) start_span = driver.find_element(By.XPATH,("//input[@name='from']")) start_span.send_keys(loop) sleep(3) finish_span = driver.find_element(By.XPATH,("//input[@name='to']")) finish_span.send_keys(loop2) sleep(3) button = driver.find_element(By.XPATH,"/html/body/div[2]/div[2]/div[3]/div/div/div[1]/div[2]/div/div[2]/form/div[7]/div/div/button") button.submit() sleep(3) #アンケート questionnaire_1 = driver.find_element(By.XPATH,('//*[@id="form-feedback"]/div[1]/div/div[1]/ul/a[4]')).click() questionnaire_2 = driver.find_element(By.XPATH,('//*[@id="form-feedback"]/div[2]/div/div[1]/ul/a[1]')).click() questionnaire_3 = driver.find_element(By.XPATH,('//*[@id="form-feedback"]/div[3]/div/div[1]/ul/a[2]')).click() questionnaire_4 = driver.find_element(By.XPATH,('//*[@id="form-feedback"]/div[4]/div/div[1]/ul/a[4]')).click() sleep(3) #アンケート提出 SEND = driver.find_element(By.XPATH,('//*[@id="form-feedback"]/div[6]/div/button')).click() #データダウンロード XLS = driver.find_element(By.XPATH,('/html/body/div[2]/div[2]/div[3]/div/div/div[2]/div/div/div[2]/div[4]/div/form/button[1]')).click()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ToStringを試してみようとしましたが,datetimeとの兼ね合いがわからなくなってしまいました.

補足

特になし

melian👍を押しています

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

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

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

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

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

melian

2024/04/25 08:19

start_span.send_keys(loop) を start_span.send_keys(loop.strftime("%d-%m-%Y")) に変更するとよいかと思います。(loop2も同様に変更)
ricopin333

2024/04/25 08:47

コメントありがとうございます!!試したところ問題が解決しました! ベストアンサーに選びたいのでmelianさん,同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答2

0

ベストアンサー

※ コメントから転記

strftime() メソッドで書式を変更します。具体的には、start_span.send_keys(loop)start_span.send_keys(loop.strftime("%d-%m-%Y")) に変更します。(loop2 も同様です)

投稿2024/04/25 08:54

melian

総合スコア20574

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

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

0

端末表示やsend_keys()できるのは、文字列(str型)だけです。
loopdatetime型です。
ただし、str型以外をprint()するとエラーになるのは不便なのでprint()関数はどの型でもstr()関数で文字列化してから表示します。なのでどんな型でもprint()できます。
send_keys()にはそういう「自動文字列化機能」は無いので、駄目です。

datetime型をstr()すると、"2024-04-01 00:00:00"というstr型になるので、send_keys(str(loop))だと質問にあるようなエラー出ませんがキーインされるのはその文字列ですね。
他の形式で文字列化したい場合はstrftime()を使って形式を指定して文字列化します。

投稿2024/04/25 10:38

otn

総合スコア85766

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

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

otn

2024/04/25 10:47

> send_keys()できるのは、文字列(str型)だけです。 正確には、send_keys(["a","b","c"]) のような文字列のリストなどでもOKですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問