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

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

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

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

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

Q&A

解決済

1回答

1145閲覧

web scrapingでのfor文の処理がうまく行きません。

genki_0330

総合スコア4

for

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

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

0グッド

0クリップ

投稿2020/06/05 16:17

前提・実現したいこと

for文の変数iをウェブサイトから取得したxpathのoption[値]の値に使いたい。
しかし、iを直接入れることは出来なさそうなので、何か他の方法があれば教えていただけると幸いです。

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

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="selectPeriod"]/div/div[2]/div[2]/div[2]/select[1]/option[i]"} (Session info: chrome=83.0.4103.97)

該当のソースコード

python

1# -*- coding: utf-8 -*- 2from selenium import webdriver 3import time 4 5driver = webdriver.Chrome() 6html = driver.get("https://www.data.jma.go.jp/gmd/risk/obsdl/index.php") 7time.sleep(1) 8 9#ダウンロードするデータの詳細設定============================================================================== 10#項目を選ぶ 11driver.find_element_by_id('elementButton').click() 12time.sleep(1) 13 14#気温、降水量、風速を選択 15driver.find_element_by_xpath('//*[@id="aggrgPeriod"]/div/div[1]/div[1]/label/input').click() 16time.sleep(1) 17driver.find_element_by_xpath('//*[@id="気温"]').click() 18time.sleep(1) 19driver.find_element_by_xpath('//*[@id="降水量"]').click() 20time.sleep(1) 21driver.find_element_by_xpath('//*[@id="風向・風速"]').click() 22time.sleep(1) 23 24#表示オプションを選ぶ 25driver.find_element_by_id('optionButton').click() 26time.sleep(1) 27driver.find_element_by_xpath('//*[@id="selectOp"]/div[1]/div/div[2]/p/label/input').click() 28time.sleep(1) 29driver.find_element_by_xpath('//*[@id="selectOp"]/div[2]/div/div[1]/p/label/input').click() 30time.sleep(1) 31#================================================================================================== 32 33#期間を選ぶ 34for i in range(2,12): 35 driver.find_element_by_id('periodButton').click() 36 time.sleep(1) 37 driver.find_element_by_xpath('//*[@id="selectPeriod"]/div/div[1]/div[1]/label/input').click() 38 time.sleep(1) 39 driver.find_element_by_xpath( '//*[@id="selectPeriod"]/div/div[2]/div[2]/div[2]/select[1]/option[i]').click() # 年から 40 time.sleep(1) 41 driver.find_element_by_xpath('//*[@id="selectPeriod"]/div/div[2]/div[2]/div[2]/select[2]/option[i]').click() # 年まで 42 time.sleep(1) 43

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

コードは気象×Python 〜AMeDASの地点データ自動取得〜を参考に、作成しています。
気象庁のHPからアメダスの過去のデータを作成する際の期日指定画面の年数をfor文で指定したいです。
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python

1# -*- coding: utf-8 -*- 2from selenium import webdriver 3import time 4from selenium.webdriver.support.ui import Select 5 6driver = webdriver.Chrome() 7html = driver.get("https://www.data.jma.go.jp/gmd/risk/obsdl/index.php") 8time.sleep(1) 9 10#ダウンロードするデータの詳細設定============================================================================== 11#項目を選ぶ 12driver.find_element_by_id('elementButton').click() 13time.sleep(1) 14 15#気温、降水量、風速を選択 16driver.find_element_by_xpath('//*[@id="aggrgPeriod"]/div/div[1]/div[1]/label/input').click() 17time.sleep(1) 18driver.find_element_by_xpath('//*[@id="気温"]').click() 19time.sleep(1) 20driver.find_element_by_xpath('//*[@id="降水量"]').click() 21time.sleep(1) 22driver.find_element_by_xpath('//*[@id="風向・風速"]').click() 23time.sleep(1) 24 25#表示オプションを選ぶ 26driver.find_element_by_id('optionButton').click() 27time.sleep(1) 28driver.find_element_by_xpath('//*[@id="selectOp"]/div[1]/div/div[2]/p/label/input').click() 29time.sleep(1) 30driver.find_element_by_xpath('//*[@id="selectOp"]/div[2]/div/div[1]/p/label/input').click() 31time.sleep(1) 32#================================================================================================== 33 34#期間を選ぶ 35for i in range(2,12): 36 driver.find_element_by_id('periodButton').click() 37 time.sleep(1) 38 driver.find_element_by_xpath('//*[@id="selectPeriod"]/div/div[1]/div[1]/label/input').click() 39 time.sleep(1) 40 41 start_year = Select(driver.find_element_by_name('iniy')) # 年から 42 start_year.select_by_index(i) 43 time.sleep(1) 44 45 stop_year= Select(driver.find_element_by_name('endy')) # 年まで 46 stop_year.select_by_index(i) 47 time.sleep(1) 48 49 50driver.quit() 51time.sleep(1) 52

投稿2020/06/06 23:17

Reach

総合スコア733

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

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

genki_0330

2020/06/07 00:51

丁寧な回答ありがとうございました。 解決できました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問