質問編集履歴

4

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

2021/02/05 15:36

投稿

mugen0905
mugen0905

スコア1

test CHANGED
File without changes
test CHANGED
@@ -130,6 +130,54 @@
130
130
 
131
131
 
132
132
 
133
+ elseの際は、ページを更新して、次のID番号に進んでほしいのですが、上記の条件分岐したコードでは、ページが更新されずそこで止まってしまいます。
134
+
135
+ 条件分岐を入れず、アラート消すコードだけで下記のように記載した際は、アラートを消し、ページを更新し、次々とID番号を更新して進んでいきます。
136
+
137
+ ```python
138
+
139
+ NoId = 0000
140
+
141
+
142
+
143
+ while NoId <= 1000:
144
+
145
+
146
+
147
+ # 検索ボックスに「ID番号」を入力して、Enterキーを押す
148
+
149
+ driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys(str(NoId) + Keys.ENTER)
150
+
151
+
152
+
153
+ # [検索]ボタンをクリック
154
+
155
+ driver.find_element(By.ID, "search").click()
156
+
157
+
158
+
159
+ # 1秒待つ
160
+
161
+ time.sleep(1)
162
+
163
+
164
+
165
+ # アラートを消す
166
+
167
+ Alert(driver).accept()
168
+
169
+
170
+
171
+ #ページを更新して戻る
172
+
173
+ driver.refresh()
174
+
175
+
176
+
177
+ NoId += 1
178
+
179
+ ```
180
+
133
181
 
134
182
 
135
183
 
@@ -250,6 +298,12 @@
250
298
 
251
299
 
252
300
 
301
+ こちらのコードでは、アラートを消して次のID番号へと進んでいくのですが、アラートをが出なかった際に、情報取得の操作が実行されず、そこで止まってしまいます。
302
+
303
+
304
+
305
+
306
+
253
307
  良い条件分岐の方法があればご教示いただきたいです。
254
308
 
255
309
  その他以下も併せて指定したいです。

3

#コメントを一部修正

2021/02/05 15:36

投稿

mugen0905
mugen0905

スコア1

test CHANGED
File without changes
test CHANGED
@@ -142,7 +142,7 @@
142
142
 
143
143
 
144
144
 
145
- #for
145
+ #while
146
146
 
147
147
  while NoId <= 1000:
148
148
 
@@ -150,7 +150,7 @@
150
150
 
151
151
  # 検索ボックスに「ID番号」を入力して、Enterキーを押す
152
152
 
153
- driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
153
+ driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys(str(NoId) + Keys.ENTER)
154
154
 
155
155
 
156
156
 

2

#コメントを一部修正

2021/02/05 15:24

投稿

mugen0905
mugen0905

スコア1

test CHANGED
File without changes
test CHANGED
@@ -22,6 +22,126 @@
22
22
 
23
23
 
24
24
 
25
+ #while文
26
+
27
+ while NoId <= 1000:
28
+
29
+
30
+
31
+ # 検索ボックスに「ID番号」を入力して、Enterキーを押す
32
+
33
+ driver.find_element(By.ID, "j_id0:KeiyakuNoId").send_keys(str(NoId) + Keys.ENTER)
34
+
35
+
36
+
37
+ # [検索]ボタンをクリック
38
+
39
+ driver.find_element(By.ID, "search").click()
40
+
41
+ time.sleep(1)
42
+
43
+
44
+
45
+ #id属性を確認
46
+
47
+ if len(driver.find_elements_by_id("j_id0:j_id1"))>0:
48
+
49
+
50
+
51
+ #ID属性の指定
52
+
53
+ body = driver.find_element(By.ID, "keiyaku-itiran")
54
+
55
+
56
+
57
+ #dd要素の指定
58
+
59
+ links = driver.find_elements(By.TAG_NAME, "dd")
60
+
61
+
62
+
63
+ #リスト作成
64
+
65
+ data_list = []
66
+
67
+
68
+
69
+ for link in links:
70
+
71
+ link_text = link.text
72
+
73
+ data_list.append(link_text)
74
+
75
+
76
+
77
+ #エクセル出力
78
+
79
+ for data in data_list:
80
+
81
+ ws_new["A"+str(row_num)].value = data_list[3]
82
+
83
+ ws_new["B"+str(row_num)].value = data_list[5]
84
+
85
+ ws_new["C"+str(row_num)].value = data_list[6]
86
+
87
+ ws_new["D"+str(row_num)].value = data_list[7]
88
+
89
+
90
+
91
+ wb_new.save("管理情報.xlsx")
92
+
93
+
94
+
95
+ #ページを更新して戻る
96
+
97
+ driver.refresh()
98
+
99
+
100
+
101
+ NoId += 1
102
+
103
+
104
+
105
+ else:
106
+
107
+
108
+
109
+ # アラートを消す
110
+
111
+ Alert(driver).accept()
112
+
113
+
114
+
115
+ #ページを更新して戻る
116
+
117
+ driver.refresh()
118
+
119
+
120
+
121
+ NoId += 1
122
+
123
+ ```
124
+
125
+ 条件を満たす際は、if以降の操作を実行しますが、elseの際がエラーとなり以下のメッセージが表示されます。
126
+
127
+ > Message: unexpected alert open: {Alert text : 指定されたお客様の情報がございません。
128
+
129
+ 検索条件をご確認のうえ、再度操作してください。(処理結果コード 1:正常完了 業務処理結果コード 2:対象契約なしエラー)}
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+ パターン②if文でアラートを指定
138
+
139
+ ```python
140
+
141
+ NoId = 0000
142
+
143
+
144
+
25
145
  #for文
26
146
 
27
147
  while NoId <= 1000:
@@ -30,7 +150,7 @@
30
150
 
31
151
  # 検索ボックスに「ID番号」を入力して、Enterキーを押す
32
152
 
33
- driver.find_element(By.ID, "j_id0:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
153
+ driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
34
154
 
35
155
 
36
156
 
@@ -42,9 +162,29 @@
42
162
 
43
163
 
44
164
 
45
- #id属性を確認
165
+ #アラートを確認
46
-
166
+
47
- if len(driver.find_elements_by_id("j_id0:j_id1"))>0:
167
+ if driver.switch_to.alert:
168
+
169
+
170
+
171
+ # アラートを消す
172
+
173
+ Alert(driver).accept()
174
+
175
+
176
+
177
+ #ページを更新して戻る
178
+
179
+ driver.refresh()
180
+
181
+
182
+
183
+ NoId += 1
184
+
185
+
186
+
187
+ else:
48
188
 
49
189
 
50
190
 
@@ -100,150 +240,10 @@
100
240
 
101
241
  NoId += 1
102
242
 
103
-
104
-
105
- else:
106
-
107
-
108
-
109
- # アラートを消す
110
-
111
- Alert(driver).accept()
112
-
113
-
114
-
115
- #ページを更新して戻る
116
-
117
- driver.refresh()
118
-
119
-
120
-
121
- NoId += 1
122
-
123
243
  ```
124
244
 
125
245
  条件を満たす際は、if以降の操作を実行しますが、elseの際がエラーとなり以下のメッセージが表示されます。
126
246
 
127
- > Message: unexpected alert open: {Alert text : 指定されたお客様の情報がございません。
128
-
129
- 検索条件をご確認のうえ、再度操作してください。(処理結果コード 1:正常完了 業務処理結果コード 2:対象契約なしエラー)}
130
-
131
-
132
-
133
-
134
-
135
-
136
-
137
- パターン②if文でアラートを指定
138
-
139
- ```python
140
-
141
- NoId = 0000
142
-
143
-
144
-
145
- #for文
146
-
147
- while NoId <= 1000:
148
-
149
-
150
-
151
- # 検索ボックスに「ID番号」を入力して、Enterキーを押す
152
-
153
- driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
154
-
155
-
156
-
157
- # [検索]ボタンをクリック
158
-
159
- driver.find_element(By.ID, "search").click()
160
-
161
- time.sleep(1)
162
-
163
-
164
-
165
- #アラートを確認
166
-
167
- if driver.switch_to.alert:
168
-
169
-
170
-
171
- # アラートを消す
172
-
173
- Alert(driver).accept()
174
-
175
-
176
-
177
- #ページを更新して戻る
178
-
179
- driver.refresh()
180
-
181
-
182
-
183
- NoId += 1
184
-
185
-
186
-
187
- else:
188
-
189
-
190
-
191
- #ID属性の指定
192
-
193
- body = driver.find_element(By.ID, "keiyaku-itiran")
194
-
195
-
196
-
197
- #dd要素の指定
198
-
199
- links = driver.find_elements(By.TAG_NAME, "dd")
200
-
201
-
202
-
203
- #リスト作成
204
-
205
- data_list = []
206
-
207
-
208
-
209
- for link in links:
210
-
211
- link_text = link.text
212
-
213
- data_list.append(link_text)
214
-
215
-
216
-
217
- #エクセル出力
218
-
219
- for data in data_list:
220
-
221
- ws_new["A"+str(row_num)].value = data_list[3]
222
-
223
- ws_new["B"+str(row_num)].value = data_list[5]
224
-
225
- ws_new["C"+str(row_num)].value = data_list[6]
226
-
227
- ws_new["D"+str(row_num)].value = data_list[7]
228
-
229
-
230
-
231
- wb_new.save("管理情報.xlsx")
232
-
233
-
234
-
235
- #ページを更新して戻る
236
-
237
- driver.refresh()
238
-
239
-
240
-
241
- NoId += 1
242
-
243
- ```
244
-
245
- 条件を満たす際は、if以降の操作を実行しますが、elseの際がエラーとなり以下のメッセージが表示されます。
246
-
247
247
  > Message: no such alert
248
248
 
249
249
  (Session info: chrome=87.0.4280.141)

1

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

2021/02/05 15:23

投稿

mugen0905
mugen0905

スコア1

test CHANGED
File without changes
test CHANGED
@@ -10,153 +10,253 @@
10
10
 
11
11
 
12
12
 
13
- 管理番号を入力し検索・・・①
14
-
15
- 検索結果った際・・・②-A
13
+ if文などを使い、アラート出た際と出なかった際で条件分岐し、操作を指定したいのですが、条件分岐がうまくいきません。
16
-
14
+
15
+
16
+
17
- 検索結果がなかった際・・・②-B
17
+ パターン①if文でid属性を指定
18
-
19
-
20
-
21
- 現状、下記のようにコードを書いており
18
+
22
-
23
- 「①→②-A」や「①→②-B」がそれぞれ分かれた状態では
24
-
25
- 正常に動作しています。
26
-
27
-
28
-
29
-
30
-
31
- ①管理番号を入力し検索
32
-
33
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
34
-
35
- #「管理番号」を指定
19
+ ```python
36
20
 
37
21
  NoId = 0000
38
22
 
39
23
 
40
24
 
41
- #検索ボックスに「管理番号」を入力して、Enterキーを押す
42
-
43
- driver.find_element(By.ID, "j_id0:FORM:DataNoId").send_keys("x"+str(NoId) + Keys.ENTER)
44
-
45
-
46
-
47
- #[検索タンをクリック
48
-
49
- driver.find_element(By.ID, "search").click()
50
-
51
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
52
-
53
-
54
-
55
-
56
-
57
- ②-A:検索結果があった際の操作→情報を取得しエクセルへ入力、保存
58
-
59
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
60
-
61
- #ID属性の指定
62
-
63
- body = driver.find_element(By.ID, "ichiran")
64
-
65
-
66
-
67
- #dd要素の指定(取得したい要素)
68
-
69
- links = body.find_elements(By.TAG_NAME, "dd")
70
-
71
-
72
-
73
- #リスト作成
74
-
75
- data_list = []
76
-
77
- for link in links:
78
-
79
- link_text = link.text
80
-
81
- data_list.append(link_text)
82
-
83
-
84
-
85
- #エクセル出力
86
-
87
- for data in data_list:
88
-
89
- ws_new["A"+str(row_num)].value = data_list[3]
90
-
91
- ws_new["B"+str(row_num)].value = data_list[5]
92
-
93
- ws_new["C"+str(row_num)].value = data_list[6]
94
-
95
- ws_new["D"+str(row_num)].value = data_list[7]
96
-
97
-
98
-
99
- wb_new.save("管理情報.xlsx")
100
-
101
-
102
-
103
- #ページを更新して戻る
104
-
105
- driver.refresh()
106
-
107
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
108
-
109
-
110
-
111
- ②-B:検索結果がなかった際の操作→アラ消す
112
-
113
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
114
-
115
- #1秒待つ
116
-
117
- time.sleep(1)
118
-
119
-
120
-
121
- #アラートを消す
122
-
123
- Alert(driver).accept()
124
-
125
-
126
-
127
- #ページを更新して戻る
128
-
129
- driver.refresh()
130
-
131
- ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
132
-
133
-
134
-
135
-
136
-
137
- ②-A、②-Bの操作後に①へ戻り、管理番号に+1して検索を繰り返したいのですが、
138
-
139
- if文で②-Aと②-Bを区別する方法がわからず、組み合わせることができていません。
140
-
141
-
142
-
143
- つきましては、②-Aと②-Bを区別する条件指定
144
-
145
- 管理番号に+1して操作を繰り返す方法につ
146
-
147
- ご教示いただけると幸いです。
148
-
149
- その際、以下についても条件を指定したいです。
150
-
151
- ・管理番号の検索範囲を「0000~5000」など指定したい
152
-
153
- -A取得情報エクセル入力する際、1行ずつ下げていきたい
154
-
155
-
156
-
157
- その他ド素人が見様見真似で書いたコードですので
158
-
159
- 修正した方がいい箇所があればご指摘いただけますと幸いです。
25
+ #for
26
+
27
+ while NoId <= 1000:
28
+
29
+
30
+
31
+ # 検索ボックスに「ID番号」を入力して、Enterキーを押す
32
+
33
+ driver.find_element(By.ID, "j_id0:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
34
+
35
+
36
+
37
+ # [検索]ボタンをクリック
38
+
39
+ driver.find_element(By.ID, "search").click()
40
+
41
+ time.sleep(1)
42
+
43
+
44
+
45
+ #id属性を確認
46
+
47
+ if len(driver.find_elements_by_id("j_id0:j_id1"))>0:
48
+
49
+
50
+
51
+ #ID属性の指定
52
+
53
+ body = driver.find_element(By.ID, "keiyaku-itiran")
54
+
55
+
56
+
57
+ #dd要素の指定
58
+
59
+ links = driver.find_elements(By.TAG_NAME, "dd")
60
+
61
+
62
+
63
+ #リスト作成
64
+
65
+ data_list = []
66
+
67
+
68
+
69
+ for link in links:
70
+
71
+ link_text = link.text
72
+
73
+ data_list.append(link_text)
74
+
75
+
76
+
77
+ #エクセル出力
78
+
79
+ for data in data_list:
80
+
81
+ ws_new["A"+str(row_num)].value = data_list[3]
82
+
83
+ ws_new["B"+str(row_num)].value = data_list[5]
84
+
85
+ ws_new["C"+str(row_num)].value = data_list[6]
86
+
87
+ ws_new["D"+str(row_num)].value = data_list[7]
88
+
89
+
90
+
91
+ wb_new.save("管理情報.xlsx")
92
+
93
+
94
+
95
+ #ペ更新して戻る
96
+
97
+ driver.refresh()
98
+
99
+
100
+
101
+ NoId += 1
102
+
103
+
104
+
105
+ else:
106
+
107
+
108
+
109
+ # アラートを消す
110
+
111
+ Alert(driver).accept()
112
+
113
+
114
+
115
+ #ペジを更新して戻る
116
+
117
+ driver.refresh()
118
+
119
+
120
+
121
+ NoId += 1
122
+
123
+ ```
124
+
125
+ 条件を満たす際は、if以降の操作を実行しますが、elseの際がエラーとなり以下のメッセージが表示されます。
126
+
127
+ > Message: unexpected alert open: {Alert text : 指定されたお客様の情報がございません。
128
+
129
+ 検索条件をご確認のうえ、再度操作してくださ。(処理結果コード 1:正常完了 業務処理結果コード 2:対象契約なしエラー)}
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+ パターンif文アラート指定
138
+
139
+ ```python
140
+
141
+ NoId = 0000
142
+
143
+
144
+
145
+ #for文
146
+
147
+ while NoId <= 1000:
148
+
149
+
150
+
151
+ # 検索ボックスに「ID番号」を入力して、Enterキーを押す
152
+
153
+ driver.find_element(By.ID, "j_id0:FORM:KeiyakuNoId").send_keys("x"+str(NoId) + Keys.ENTER)
154
+
155
+
156
+
157
+ # [検索]ボタンをクリック
158
+
159
+ driver.find_element(By.ID, "search").click()
160
+
161
+ time.sleep(1)
162
+
163
+
164
+
165
+ #アラートを確認
166
+
167
+ if driver.switch_to.alert:
168
+
169
+
170
+
171
+ # アラートを消す
172
+
173
+ Alert(driver).accept()
174
+
175
+
176
+
177
+ #ページを更新して戻る
178
+
179
+ driver.refresh()
180
+
181
+
182
+
183
+ NoId += 1
184
+
185
+
186
+
187
+ else:
188
+
189
+
190
+
191
+ #ID属性の指定
192
+
193
+ body = driver.find_element(By.ID, "keiyaku-itiran")
194
+
195
+
196
+
197
+ #dd要素の指定
198
+
199
+ links = driver.find_elements(By.TAG_NAME, "dd")
200
+
201
+
202
+
203
+ #リスト作成
204
+
205
+ data_list = []
206
+
207
+
208
+
209
+ for link in links:
210
+
211
+ link_text = link.text
212
+
213
+ data_list.append(link_text)
214
+
215
+
216
+
217
+ #エクセル出力
218
+
219
+ for data in data_list:
220
+
221
+ ws_new["A"+str(row_num)].value = data_list[3]
222
+
223
+ ws_new["B"+str(row_num)].value = data_list[5]
224
+
225
+ ws_new["C"+str(row_num)].value = data_list[6]
226
+
227
+ ws_new["D"+str(row_num)].value = data_list[7]
228
+
229
+
230
+
231
+ wb_new.save("管理情報.xlsx")
232
+
233
+
234
+
235
+ #ページを更新して戻る
236
+
237
+ driver.refresh()
238
+
239
+
240
+
241
+ NoId += 1
242
+
243
+ ```
244
+
245
+ 条件を満たす際は、if以降の操作を実行しますが、elseの際がエラーとなり以下のメッセージが表示されます。
246
+
247
+ > Message: no such alert
248
+
249
+ (Session info: chrome=87.0.4280.141)
250
+
251
+
252
+
253
+ 良い条件分岐の方法があればご教示いただきたいです。
254
+
255
+ その他以下も併せて指定したいです。
256
+
257
+ ・管理番号の検索範囲を「0000~1000」など指定したい
258
+
259
+ ・取得情報をエクセル入力する際、1行ずつ下げていきたい
160
260
 
161
261
 
162
262