🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

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

selenium

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

Q&A

解決済

1回答

2585閲覧

seleniumを使いサイトでドロップダウンを変数を用いてクリックする

kaigo

総合スコア1

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

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

selenium

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

0グッド

0クリップ

投稿2021/01/08 12:58

前提・実現したいこと

seleniumを使いドロップダウンの中から、先月の値をクリックする為、を変数を用いてクリックする為
datetimeで当月の月を出して、その月に+1をしたものを変数にいれ選択しようとしたのですが、エラー
が返ってきます。
dt_now = datetime.datetime.now()
x = dt_now.month
x = x+1
x = str(x)
このコードを消してxの代わりに1~12の数字を入れてみた所、しっかりと洗濯することが出来ます。

変数を使用することはできないのでしょうか
そもそもコードの書き方が間違っているのでしょうか

ご回答よろしくお願い致します。

なお該当HPアドレスとID PASSは機密保持の為、消しております

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


NoSuchElementException Traceback (most recent call last)
<ipython-input-56-3d3d2e7c0c62> in <module>
36 x = x+1
37 x = str(x)
---> 38 select_element.select_by_value("x")

~\anaconda3\lib\site-packages\selenium\webdriver\support\select.py in select_by_value(self, value)
85 matched = True
86 if not matched:
---> 87 raise NoSuchElementException("Cannot locate option with value: %s" % value)
88
89 def select_by_index(self, index):

NoSuchElementException: Message: Cannot locate option with value: x

エラーメッセージ

該当のソースコード

import datetime
element = browser.find_element_by_id("form:periodFromMonth")
select_element = Select(element)
dt_now = datetime.datetime.now()
x = dt_now.month
x = x+1
x = str(x)
select_element.select_by_value('x')

Pythonここに言語名を入力
ソースコード
from selenium import webdriver
import time
import pandas as pd
from selenium.webdriver.common.action_chains import ActionChains
browser = webdriver.Chrome(executable_path="C:/Users/suncare/chromedriver_win32/chromedriver.exe")
#browser.implicitly_wait(1)
browser.get("")
element = browser.find_element_by_id("form:corporation_id")
element.clear()
element.send_keys(120989)
element = browser.find_element_by_id("form:member_login_id")
element.clear()
element.send_keys("")
element = browser.find_element_by_id("form:password")
element.clear()
element.send_keys("")
browser_from = browser.find_element_by_id("form:logn_nochklogin")
#time.sleep(1)
browser_from.click()
browser_from = browser.find_element_by_xpath("/html/body/div[2]/div[1]/div[1]/ul/li[1]/ul/li[1]/a")
browser_from.click()
browser_from = browser.find_element_by_xpath("/html/body/div/div[2]/div/form/div[1]/div[2]/ul/li[6]/div/ul/li[2]/a")
browser_from.click()
browser_from = browser.find_element_by_xpath("/html/body/div/form/div/ul/li[7]/a/img")
browser_from.click()
browser_from = browser.find_element_by_xpath("/html/body/div/form/div/ul/li[7]/ul/li/a")
browser_from.click()
browser_from = browser.find_element_by_xpath("/html/body/div/div[2]/div/form/div[1]/div[8]/table/tbody/tr[2]/td[1]/a/span")
browser_from.click()
from selenium.webdriver.support.ui import Select
import datetime
element = browser.find_element_by_id("form:periodFromMonth")
select_element = Select(element)
dt_now = datetime.datetime.now()
x = dt_now.month
x = x+1
x = str(x)
select_element.select_by_value('x')

試したこと

変数の型が違うのかと思い型を色々変えてみたけれど駄目でした

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

Python3 anaconda Jupyter lab
ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

select_element.select_by_value('x')

x'x'の違いをよく考えましょう。

変数を用いてクリックする

xは変数ですが、'x'は変数じゃ無いです。

投稿2021/01/08 13:44

編集2021/01/08 13:44
otn

総合スコア85886

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

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

kaigo

2021/01/08 14:01

("x")ではなく、(x)でやってみたのですがダメでした。
otn

2021/01/08 17:16

具体的な現象を書きましょう。
kaigo

2021/01/11 13:47

x = dt_now.month x = x+1 x = str(x) これだと12月の時に13になってしまい、一月を選択できませんでしたので、dt_nowのままにして、1ヶ月を足すことの出来るrelativedeltaを使用して x=datetime.datetime(now) + relativedelta(months=1) x=str(x)として、 select_element.select_by_value(x)に入れたところ上手く行きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問