実現したいこと
seleniumを利用して機器(switch)にログイン、操作をしたい
前提
いつもお世話になっております。seleniumを使用して検証を行っています。seleniumのヘッドレスモードで機器にログインし、その画面のスクリーンショットまでは撮る事が出来たのですが画面遷移後にメニューをクリックしようとするとTimeOutエラーが出てしまいます。対処方法・コードの修正箇所等ご存じの方がいらっしゃればアドバイス等よろしくお願いします。Python初心者になります。
関数と要素の指定にはXPathを使用しています。
参考にしたサイト
https://nprogram.hatenablog.com/entry/2019/10/17/231930
※ログイン後は下記の画面になり、下の図のように管理をクリックしメニューを表示させたい
※XPath
▶→//[@id="img_management"] 管理→//[@id="span_management"]
上記どちらを指定してもだめでした。(フルパス指定でも)
発生している問題・エラーメッセージ
[root@localhost TEST]# python sample5.py Traceback (most recent call last): File "sample5.py", line 63, in <module> click_menu_button_using_XPath('//*[@id="img_management"]') File "sample5.py", line 54, in click_menu_button_using_XPath EC.visibility_of_element_located((By.XPATH, element_XPath)) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/support/wait.py", line 80, in until raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:
該当のソースコード
Python
1import time 2from selenium import webdriver 3from selenium.webdriver.chrome.options import Options 4from selenium.webdriver.support.ui import WebDriverWait 5from selenium.webdriver.support import expected_conditions as EC 6from selenium.webdriver.common.by import By 7from selenium.webdriver.common.keys import Keys 8from webdriver_manager.chrome import ChromeDriverManager 9 10#Chrome Optionsの設定 11options = webdriver.ChromeOptions() 12#ヘッドレスモード使用 13options.add_argument('--headless') 14#サンドボックス無効化 15options.add_argument('--no-sandbox') 16driver = webdriver.Chrome(options=options) 17#指定したURLへ遷移 18url = "http://192.168.1.1/usrlogin.asp" 19driver.get(url) 20 21#指定された要素が現れるまで待機 22MAX_WAIT_TIME_SEC = 100 23 24#XPathを用いて、ユーザー名入力 25def input_login_using_XPath(element_XPath: str, send_code: str): 26 element = WebDriverWait(driver, MAX_WAIT_TIME_SEC).until( 27 EC.visibility_of_element_located((By.XPATH, element_XPath)) 28 ) 29 element.send_keys(send_code) 30 31 return element 32#XPathを用いて、パスワード入力 33def input_login_using_XPath(element_XPath: str, send_code: str): 34 element = WebDriverWait(driver, MAX_WAIT_TIME_SEC).until( 35 EC.visibility_of_element_located((By.XPATH, element_XPath)) 36 ) 37 element.send_keys(send_code) 38 39 return element 40#XPathを用いてログインボタンクリック 41def click_button_using_XPath(element_XPath: str): 42 element = WebDriverWait(driver, MAX_WAIT_TIME_SEC).until( 43 EC.visibility_of_element_located((By.XPATH, element_XPath)) 44 ) 45 element.click() 46 47 return element 48#time.sleep(10) 49#XPathを用いて管理メニューをクリック 50def click_menu_button_using_XPath(element_XPath: str): 51 element = WebDriverWait(driver, MAX_WAIT_TIME_SEC).until( 52 EC.visibility_of_element_located((By.XPATH, element_XPath)) 53 ) 54 element.click() 55 56 return element 57 58input_login_using_XPath('//*[@id="UserName"]', "admin").send_keys(Keys.TAB) 59input_login_using_XPath('//*[@id="UserPassword"]', "password").send_keys(Keys.TAB) 60click_button_using_XPath('//*[@id="btnLogin"]') 61click_menu_button_using_XPath('//*[@id="img_management"]') 62time.sleep(2) 63driver.save_screenshot('test.png') 64driver.quit()
試したこと
time.sleepの秒数増加
補足情報(FW/ツールのバージョンなど)
CentOS7
Python3.6.8
回答2件
あなたの回答
tips
プレビュー