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

質問編集履歴

4

該当箇所のコードを抜粋

2021/11/30 23:07

投稿

katahik
katahik

スコア79

title CHANGED
File without changes
body CHANGED
@@ -8,8 +8,15 @@
8
8
  time.sleepを使った方法だと、処理自体はできたのですが、time.sleepを使うと処理結果が不安定になってしまうので、コンテンツを基準にした待機を実装したいところです。
9
9
 
10
10
  皆様のお知恵をお貸しいただければ、幸いです。
11
+ ##### 該当箇所
12
+ ```
13
+ # time.sleepを使っていたら処理ができたのですが、WebDriverWaitを使うと下記エラーが表示
14
+ WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)
15
+ # time.sleep(20)
16
+ ```
11
17
 
18
+
12
- ##### code
19
+ ##### code全文
13
20
  ```
14
21
  # ライブラリをインポート
15
22
  from selenium import webdriver

3

コード全文掲載

2021/11/30 23:07

投稿

katahik
katahik

スコア79

title CHANGED
File without changes
body CHANGED
@@ -16,26 +16,73 @@
16
16
  from selenium.webdriver.common.by import By
17
17
  from selenium.webdriver.support.ui import WebDriverWait
18
18
  from selenium.webdriver.support import expected_conditions as EC
19
- from selenium.webdriver.support.select import Select
20
19
  import time
21
20
  import datetime
22
21
  # ドライバーを指定
22
+ from selenium.webdriver.support.select import Select
23
23
  driver = webdriver.Chrome('./chromedriver')
24
24
 
25
+ # 対象のWebサイトのURL
26
+ URL = 'http://localhost/login'
27
+
28
+ # 暗黙的な待機
29
+ driver.implicitly_wait(10)
30
+
31
+ # 最大の読み込み時間を設定 今回は最大30秒待機できるようにする
32
+ wait = WebDriverWait(driver=driver, timeout=30)
33
+
25
34
  try:
35
+ EXEC_TIME = datetime.datetime.now()
36
+ MAIL_ADDRESS = 'hogehoge@gmail.com'
37
+ PASSWORD = 'Password'
38
+
39
+ print('実行日時 ' + str(EXEC_TIME))
40
+
26
-
41
+ ## ログイン
42
+ driver.get(URL)
43
+
44
+ login_action = webdriver.common.action_chains.ActionChains(driver)
45
+
46
+ # メールアドレス入力
47
+ email_box = driver.find_element_by_xpath('/html/body/div[1]/main/div/div[2]/form/div[1]/div/input')
48
+ login_action.move_to_element_with_offset(email_box, 5, 5)
49
+ login_action.click()
50
+ login_action.send_keys(MAIL_ADDRESS)
51
+
27
-
52
+ # パスワード入力
53
+ password_box = driver.find_element_by_xpath('//*[@id="input-password"]')
54
+ login_action.move_to_element_with_offset(password_box, 5, 5)
55
+ login_action.click()
56
+ login_action.send_keys(PASSWORD)
57
+
28
-
58
+ # ログインボタン押下
59
+ login_btn = driver.find_element_by_xpath('/html/body/div[1]/main/div/div[2]/form/div[3]/button')
60
+ login_action.move_to_element_with_offset(login_btn, 5, 5)
61
+ login_action.click()
62
+
63
+ # 貯めていたキューを実行
64
+ login_action.perform()
65
+
29
-      # 画面が表示されるまで待機
66
+ # 画面が表示されるまで待機
67
+ # wait.until(EC.presence_of_all_elements_located)
30
68
  WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)
31
69
  # time.sleep(20)
70
+
71
+ # サイドメニューを開くボタンを押下
32
72
  side_menu_btn = driver.find_element_by_xpath('/html/body/div[1]/div[1]/label')
33
73
  if side_menu_btn.is_displayed():
34
- print(side_menu_btn.is_displayed()) # => True
74
+ print(side_menu_btn.is_displayed()) # => True
35
75
  side_menu_btn.click()
36
76
  else:
37
77
  print(side_menu_btn.is_displayed())
78
+
38
79
  print("表示されてないのでクリックできない")
80
+
81
+ print("正常終了します。")
82
+ # エラーが発生した時はエラーメッセージを吐き出す。
83
+ except Exception as e:
84
+ print(e)
85
+ print("エラーが発生しました。")
39
86
 
40
87
  ```
41
88
 

2

if文を追加

2021/11/30 23:03

投稿

katahik
katahik

スコア79

title CHANGED
File without changes
body CHANGED
@@ -30,7 +30,12 @@
30
30
  WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)
31
31
  # time.sleep(20)
32
32
  side_menu_btn = driver.find_element_by_xpath('/html/body/div[1]/div[1]/label')
33
+ if side_menu_btn.is_displayed():
34
+ print(side_menu_btn.is_displayed()) # => True
33
- side_menu_btn.click()
35
+ side_menu_btn.click()
36
+ else:
37
+ print(side_menu_btn.is_displayed())
38
+ print("表示されてないのでクリックできない")
34
39
 
35
40
  ```
36
41
 

1

Add a processing part to click.

2021/11/30 22:39

投稿

katahik
katahik

スコア79

title CHANGED
File without changes
body CHANGED
@@ -29,6 +29,8 @@
29
29
       # 画面が表示されるまで待機
30
30
  WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)
31
31
  # time.sleep(20)
32
+ side_menu_btn = driver.find_element_by_xpath('/html/body/div[1]/div[1]/label')
33
+ side_menu_btn.click()
32
34
 
33
35
  ```
34
36