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

質問編集履歴

4

その他、試したコードを追記

2021/02/05 15:36

投稿

mugen0905
mugen0905

スコア1

title CHANGED
File without changes
body CHANGED
@@ -64,8 +64,32 @@
64
64
  > Message: unexpected alert open: {Alert text : 指定されたお客様の情報がございません。
65
65
  検索条件をご確認のうえ、再度操作してください。(処理結果コード 1:正常完了 業務処理結果コード 2:対象契約なしエラー)}
66
66
 
67
+ elseの際は、ページを更新して、次のID番号に進んでほしいのですが、上記の条件分岐したコードでは、ページが更新されずそこで止まってしまいます。
68
+ 条件分岐を入れず、アラート消すコードだけで下記のように記載した際は、アラートを消し、ページを更新し、次々とID番号を更新して進んでいきます。
69
+ ```python
70
+ NoId = 0000
67
71
 
72
+ while NoId <= 1000:
68
73
 
74
+ # 検索ボックスに「ID番号」を入力して、Enterキーを押す
75
+ driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys(str(NoId) + Keys.ENTER)
76
+
77
+ # [検索]ボタンをクリック
78
+ driver.find_element(By.ID, "search").click()
79
+
80
+ # 1秒待つ
81
+ time.sleep(1)
82
+
83
+ # アラートを消す
84
+ Alert(driver).accept()
85
+
86
+ #ページを更新して戻る
87
+ driver.refresh()
88
+
89
+ NoId += 1
90
+ ```
91
+
92
+
69
93
  パターン②if文でアラートを指定
70
94
  ```python
71
95
  NoId = 0000
@@ -124,6 +148,9 @@
124
148
  > Message: no such alert
125
149
  (Session info: chrome=87.0.4280.141)
126
150
 
151
+ こちらのコードでは、アラートを消して次のID番号へと進んでいくのですが、アラートをが出なかった際に、情報取得の操作が実行されず、そこで止まってしまいます。
152
+
153
+
127
154
  良い条件分岐の方法があればご教示いただきたいです。
128
155
  その他以下も併せて指定したいです。
129
156
  ・管理番号の検索範囲を「0000~1000」など指定したい

3

#コメントを一部修正

2021/02/05 15:36

投稿

mugen0905
mugen0905

スコア1

title CHANGED
File without changes
body CHANGED
@@ -70,11 +70,11 @@
70
70
  ```python
71
71
  NoId = 0000
72
72
 
73
- #for
73
+ #while
74
74
  while NoId <= 1000:
75
75
 
76
76
  # 検索ボックスに「ID番号」を入力して、Enterキーを押す
77
- driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
77
+ driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys(str(NoId) + Keys.ENTER)
78
78
 
79
79
  # [検索]ボタンをクリック
80
80
  driver.find_element(By.ID, "search").click()

2

#コメントを一部修正

2021/02/05 15:24

投稿

mugen0905
mugen0905

スコア1

title CHANGED
File without changes
body CHANGED
@@ -10,11 +10,11 @@
10
10
  ```python
11
11
  NoId = 0000
12
12
 
13
- #for
13
+ #while
14
14
  while NoId <= 1000:
15
15
 
16
16
  # 検索ボックスに「ID番号」を入力して、Enterキーを押す
17
- driver.find_element(By.ID, "j_id0:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
17
+ driver.find_element(By.ID, "j_id0:KeiyakuNoId").send_keys(str(NoId) + Keys.ENTER)
18
18
 
19
19
  # [検索]ボタンをクリック
20
20
  driver.find_element(By.ID, "search").click()

1

試したコードを記載しました。

2021/02/05 15:23

投稿

mugen0905
mugen0905

スコア1

title CHANGED
File without changes
body CHANGED
@@ -4,79 +4,129 @@
4
4
  操作をしたいと思っています。管理番号で検索を行い、検索結果があった際はページが切り替わり、
5
5
  情報が表示されます。検索結果がなかった際はアラートが表示されます。
6
6
 
7
- 管理番号を入力し検索・・・①
8
- 検索結果があった際・・・②-A
9
- 検索結果がなかった際・・・②-B
7
+ if文などを使い、アラート出た際と出なかった際で条件分岐し、操作を指定したいのですが、条件分岐がうまくいきません。
10
8
 
11
- 現状、下記のようにコ書いており
9
+ パタン①if文でid属性指定
12
- 「①→②-A」や「①→②-B」がそれぞれ分かれた状態では
10
+ ```python
13
- 正常に動作しています。
11
+ NoId = 0000
14
12
 
13
+ #for文
14
+ while NoId <= 1000:
15
15
 
16
+ # 検索ボックスに「ID番号」を入力して、Enterキーを押す
17
+ driver.find_element(By.ID, "j_id0:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
18
+
19
+ # [検索]ボタンをクリック
20
+ driver.find_element(By.ID, "search").click()
21
+ time.sleep(1)
22
+
16
- ①管理番号入力し検索
23
+ #id属性確認
17
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
24
+ if len(driver.find_elements_by_id("j_id0:j_id1"))>0:
25
+
18
- #「管理番号」を指定
26
+ #ID属性の指定
27
+ body = driver.find_element(By.ID, "keiyaku-itiran")
28
+
29
+ #dd要素の指定
30
+ links = driver.find_elements(By.TAG_NAME, "dd")
31
+
32
+ #リスト作成
33
+ data_list = []
34
+
35
+ for link in links:
36
+ link_text = link.text
37
+ data_list.append(link_text)
38
+
39
+ #エクセル出力
40
+ for data in data_list:
41
+ ws_new["A"+str(row_num)].value = data_list[3]
42
+ ws_new["B"+str(row_num)].value = data_list[5]
43
+ ws_new["C"+str(row_num)].value = data_list[6]
44
+ ws_new["D"+str(row_num)].value = data_list[7]
45
+
46
+ wb_new.save("管理情報.xlsx")
47
+
48
+ #ページを更新して戻る
49
+ driver.refresh()
50
+
51
+ NoId += 1
52
+
53
+ else:
54
+
55
+ # アラートを消す
56
+ Alert(driver).accept()
57
+
58
+ #ページを更新して戻る
59
+ driver.refresh()
60
+
61
+ NoId += 1
62
+ ```
63
+ 条件を満たす際は、if以降の操作を実行しますが、elseの際がエラーとなり以下のメッセージが表示されます。
64
+ > Message: unexpected alert open: {Alert text : 指定されたお客様の情報がございません。
65
+ 検索条件をご確認のうえ、再度操作してください。(処理結果コード 1:正常完了 業務処理結果コード 2:対象契約なしエラー)}
66
+
67
+
68
+
69
+ パターン②if文でアラートを指定
70
+ ```python
19
71
  NoId = 0000
20
72
 
73
+ #for文
21
- #検索ボックスに「管理番号」を入力して、Enterキーを押す
74
+ while NoId <= 1000:
22
- driver.find_element(By.ID, "j_id0:FORM:DataNoId").send_keys("x"+str(NoId) + Keys.ENTER)
23
75
 
24
- #[検索タンをクリック
76
+ # 検索ボックスに「ID番号」を入力して、Enterキーを押す
25
- driver.find_element(By.ID, "search").click()
77
+ driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
26
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
27
78
 
79
+ # [検索]ボタンをクリック
80
+ driver.find_element(By.ID, "search").click()
81
+ time.sleep(1)
28
82
 
29
- ②-A:検索結果があった際の操作→情報を取得しエクセルへ入力、保存
30
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
31
- #ID属性の指定
83
+ #アラートを確認
32
- body = driver.find_element(By.ID, "ichiran")
84
+ if driver.switch_to.alert:
33
85
 
86
+ # アラートを消す
34
- #dd要素の指定(取得したい要素)
87
+ Alert(driver).accept()
35
- links = body.find_elements(By.TAG_NAME, "dd")
36
88
 
37
- #リスト作成
89
+ #ページを更新して戻る
38
- data_list = []
90
+ driver.refresh()
39
- for link in links:
40
- link_text = link.text
41
- data_list.append(link_text)
42
91
 
92
+ NoId += 1
93
+
94
+ else:
95
+
43
- #エクセル出力
96
+ #ID属性の指定
44
- for data in data_list:
45
- ws_new["A"+str(row_num)].value = data_list[3]
97
+ body = driver.find_element(By.ID, "keiyaku-itiran")
46
- ws_new["B"+str(row_num)].value = data_list[5]
47
- ws_new["C"+str(row_num)].value = data_list[6]
48
- ws_new["D"+str(row_num)].value = data_list[7]
49
98
 
99
+ #dd要素の指定
50
- wb_new.save("管理情報.xlsx")
100
+ links = driver.find_elements(By.TAG_NAME, "dd")
51
101
 
52
- #ページを更新して戻る
102
+ #リスト作成
53
- driver.refresh()
103
+ data_list = []
54
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
55
104
 
105
+ for link in links:
106
+ link_text = link.text
56
- ②-B:検索結果がなかった際の操作→アラートを消す
107
+ data_list.append(link_text)
57
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
58
- #1秒待つ
59
- time.sleep(1)
60
108
 
61
- #アラートを消す
109
+ #エクセル出力
62
- Alert(driver).accept()
110
+ for data in data_list:
111
+ ws_new["A"+str(row_num)].value = data_list[3]
112
+ ws_new["B"+str(row_num)].value = data_list[5]
113
+ ws_new["C"+str(row_num)].value = data_list[6]
114
+ ws_new["D"+str(row_num)].value = data_list[7]
63
115
 
64
- #ページを更新して戻る
65
- driver.refresh()
66
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
116
+ wb_new.save("管理情報.xlsx")
67
117
 
118
+ #ページを更新して戻る
119
+ driver.refresh()
68
120
 
121
+ NoId += 1
122
+ ```
69
- ②-A②-Bの操作後に①へ戻り、管理番号に+1して検索繰り返たいのですが、
123
+ 条件を満たす際はif以降の操作を実行すが、elseの際がエラーとなり以下のメッセージが表示されます。
124
+ > Message: no such alert
70
- if文で②-Aと②-Bを区別する方法がわからず、組み合わせることができていません。
125
+ (Session info: chrome=87.0.4280.141)
71
126
 
72
- つきましては、②-Aと②-Bを区別する条件指定と
73
- 管理番号に+1して操作を繰り返す方法について
74
- ご教示いただけると幸いです。
127
+ 良い条件分岐の方法があればご教示いただきたいです。
75
- その際、以下について条件を指定したいです。
128
+ その以下も併せて指定したいです。
76
- ・管理番号の検索範囲を「0000~5000」など指定したい
129
+ ・管理番号の検索範囲を「0000~1000」など指定したい
77
- ②-Aで取得情報をエクセル入力する際、1行ずつ下げていきたい
130
+ ・取得情報をエクセル入力する際、1行ずつ下げていきたい
78
131
 
79
- その他ド素人が見様見真似で書いたコードですので
80
- 修正した方がいい箇所があればご指摘いただけますと幸いです。
81
-
82
132
  宜しくお願い致します。