teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

別の回答方法を見つけたため

2020/01/02 12:25

投稿

frederick_1974
frederick_1974

スコア303

answer CHANGED
@@ -1,13 +1,12 @@
1
- 「テニス」などの文字列を使っているわけではりませんが、、
1
+ selectorsに格納している要素は、id="label"取得してきていますが、これチェックボックスの横のspanタグの要素になります。ですから、この要素をクリックしてもチェックボックスはクリックされません(チェックボックスはinputタグです)。
2
- それぞれのチェックボックスinputタグには固有nameが振られていますので、`find_element_by_name()`を使うのはどうしょうか
2
+ ただ、チェックボックスとなるinputタグの要素は、spanタグと親要素を同じにしていますので、`find_element_by_xpath('../input')`によって一度、親要素に上がってから、inputタグに降りてくることで、チェックボックスたる要素取得きると思います
3
3
 
4
- なおid="label"で取得できエレメントはチェックボックスにあるspanタグなので、そクリックてもチェックボックスをクリックできません(チェックボックスはinputタグ
4
+ (下には該当部分しか記載していませんが、当該ページに入ってから多少のwaitなりsleepを入れ必要があると思います。また当初、全く別回答を記載していましたが、より質問者のコード近い方法がりましたので、そちらに大きく修正をしました。申し訳ありません)
5
5
 
6
6
  ```Python
7
- # 軟式野球をクリック
7
+ for i in selectors:
8
+ selectors_str.append(i.text)
8
- driver.find_element_by_name('layoutChildBody:childForm:purposeSearchItems:0:selectItemsItems:0:selectItems:0:checked').click()
9
+ if i.text == "テニス(屋外)" or i.text == "軟式野球" or i.text == "ソフトボール" :
9
- # ソフトボールをクリック
10
- driver.find_element_by_name('layoutChildBody:childForm:purposeSearchItems:0:selectItemsItems:0:selectItems:1:checked').click()
10
+ j = i.find_element_by_xpath('../input')
11
- # テニス(屋外)をクリック
11
+ j.click()
12
- driver.find_element_by_name('layoutChildBody:childForm:purposeSearchItems:0:selectItemsItems:1:selectItems:0:checked').click()
13
12
  ```

1

情報の追加

2020/01/02 12:25

投稿

frederick_1974
frederick_1974

スコア303

answer CHANGED
@@ -1,6 +1,8 @@
1
1
  「テニス」などの文字列を使っているわけではありませんが、、
2
2
  それぞれのチェックボックスのinputタグには固有のnameが振られていますので、`find_element_by_name()`を使うのはどうでしょうか。
3
3
 
4
+ なお、id="label"で取得できるエレメントは、チェックボックスの横にあるspanタグなので、そこをクリックしてもチェックボックスをクリックできません(チェックボックスはinputタグ)。
5
+
4
6
  ```Python
5
7
  # 軟式野球をクリック
6
8
  driver.find_element_by_name('layoutChildBody:childForm:purposeSearchItems:0:selectItemsItems:0:selectItems:0:checked').click()