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

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

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

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

selenium

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

Q&A

解決済

1回答

789閲覧

Seleniumとリストを組み合わせたFor構文について

Shiwa

総合スコア8

Python 3.x

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

selenium

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

0グッド

0クリップ

投稿2020/03/02 06:27

リストにあるValue値の、587以外をクリックするという処理をしたいです。

lists = ["892","884","251","587","637","690","597","599","1849","635","1214"] driver.find_element_by_xpath("//option[@value='892']").click() driver.find_element_by_xpath("//option[@value='884']").click() driver.find_element_by_xpath("//option[@value='251']").click() driver.find_element_by_xpath("//option[@value='637']").click() driver.find_element_by_xpath("//option[@value='690']").click() driver.find_element_by_xpath("//option[@value='597']").click() driver.find_element_by_xpath("//option[@value='599']").click() driver.find_element_by_xpath("//option[@value='1849']").click() driver.find_element_by_xpath("//option[@value='635']").click() driver.find_element_by_xpath("//option[@value='1214']").click()

上記のように記載することで、問題なく動作することを確認しています。
これをもっと簡潔に記載したいのですが、上手く行かずに悩んでいます。

試したコードは次の通りです。

lists = ["892","884","251","587","637","690","597","599","1849","635","1214"] for list in lists:    if not list == 587: driver.find_element_by_xpath("//option[@value=list]").click()

何か解決策がありましたら教えて下さい。

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

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

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

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

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

guest

回答1

0

ベストアンサー

587"587"は別物です。

投稿2020/03/02 06:39

otn

総合スコア85901

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

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

Shiwa

2020/03/02 06:45

お早いご回答ありがとうございます。 早速訂正してみたところ、次のようなエラーが表示されてしまいました。 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//option[@value=list]"}
otn

2020/03/02 06:48

上のコードのように、 "//option[@value='1214']" のような形式でないといけないのでは?
Shiwa

2020/03/02 06:49

コードの短縮は難しいのですね。 ありがとうございます。 迅速なご回答助かりました。
Shiwa

2020/03/02 07:03

プログラミングを初めてまだ1週間ほどしか経っておらず、色々と理解できていない点があります。 ご迷惑おかけ致しました。 教えて頂いたURLを参考に、下記のように記載することで解決することができました。 感謝致します。 " lists = ["892","884","251","587","637","690","597","599","1849","635","1214"] for list in lists: if not list == "587": driver.find_element_by_xpath("//option[@value="+list+"]").click() "
otn

2020/03/02 10:03

はい。それが簡単です。属性値の前後に引用符を付けたほうがいいですね。 driver.find_element_by_xpath("//option[@value='"+list+"']").click() フォーマット済み文字列リテラルというのは、 driver.find_element_by_xpath(f"//option[@value='{list}']").click() みたいなものです。
Shiwa

2020/03/03 02:05

なるほどですね。 フォーマット済み文字列リテラルの方が、 このプログラムを見る人にとって優しそうですね。 教えて頂きありがとうございます。 重ねてお礼申し上げます。
hayataka2049

2020/03/03 02:19

listという変数名を使うと組み込みのlistクラスを上書きしてしまうので、他の名前にしましょう。同じプログラムの中で(Jupyterなど対話環境では以後のセッション全体で)何かをlistに変換しようとしてlist(なにか)などと書くとエラーが出るようになります。 同様の理由でstr, intなどの変数名も使うべきではありません。
Shiwa

2020/03/03 03:29

ご親切にありがとうございます。 このプログラム含め、今後コードを書く時はそのように致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問