我在使用 Selenium 自動執行任務時遇到了這個問題。
代碼執行程序是怎樣的?

所以首先里面有兩個函式seleniumtest.py:
getGateway()和restartRouter().
讓我們關注restartRouter()函式,因為它包含與 selenium 相關的代碼,而getGateway()函式只是我使用的函式,restartRouter()就像這樣:driver.get(getGateway()).
首先,發生的事情如下:
啟動瀏覽器并打開提供的網址;
查找元素用戶名和密碼
輸入用戶名和密碼;
查找登錄元素
點擊登錄;
查找另一個按鈕
單擊另一個按鈕
...
問題是什么?
因此,問題開始出現在第 6 步,就在單擊登錄按鈕后(參見代碼執行程序,第 6 步)。
單擊登錄按鈕后,它會加載新頁面(它不會在新選項卡中打開它),然后它就不想作業了。
你試圖做什么來解決這個問題
我想到的第一件事是driver.wait(5)在單擊登錄后立即使用,這不起作用。我還嘗試檢查該頁面上的任何其他元素是否會導致操作.click()
之后,我嘗試了 Waits - SELENIUM WAITS;這也沒有用。我嘗試了兩種可能的選擇:driver.implicitly_wait(10)和WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,"//*[@id=\"mmManagDiag\"]")). 它還給了我錯誤,我的 USB 設備在使用顯式等待時無法正常作業。
這些都不起作用。
什么對我有用?
在解決它之后,我想到了嘗試,time.sleep(3)突然它起作用了。
我的最后一個問題 所以,我想知道為什么 Selenium 在我使用 time.sleep() 之前在該頁面上找不到任何元素?
硒等待不是和time.sleep()幾乎一樣的東西嗎?
代碼
driver = webdriver.Chrome('./chromedriver')
driver.get(getGateway())
#Frm_Username
username = driver.find_element(By.NAME,'Frm_Username')
username.clear()
username.send_keys("user")
#Frm_Password
passwrd = driver.find_element(By.NAME,"Frm_Password")
passwrd.clear()
passwrd.send_keys("user")
#passwrd.send_keys(Keys.RETURN)
driver.find_element(By.XPATH,"//*[@id=\"LoginId\"]").click()
time.sleep(3)
driver.find_element(By.XPATH,"//*[@id=\"mmManagDiag\"]").click()
time.sleep(3)
driver.find_element(By.XPATH,"//*[@id=\"mmManagDevice\"]").click()
time.sleep(3)
driver.find_element(By.XPATH,"//*[@id=\"Btn_restart\"]").click()
time.sleep(3)
driver.find_element(By.XPATH,"//*[@id=\"confirmOK\"]").click()
driver.quit()
uj5u.com熱心網友回復:
等待元素存在可能不足以點擊它。
嘗試等待元素可點擊。
WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "your xpath value"))
).click()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/418974.html
標籤:
