【发布时间】:2022-01-22 11:38:21
【问题描述】:
我在使用 Selenium 自动执行任务时遇到了这个问题。
代码执行过程是怎样的?
首先seleniumtest.py 内部有两个函数:
getGateway() 和 restartRouter()。
让我们关注restartRouter() 函数,因为它包含与硒相关的代码,而getGateway() 函数只是我在restartRouter() 中使用的函数,就像这样:driver.get(getGateway())。
首先,发生的事情如下:
-
启动浏览器并打开提供的网址;
-
查找元素用户名和密码
-
输入用户名和密码;
-
查找登录元素
-
点击登录;
-
找到另一个按钮
-
点击另一个按钮
...
有什么问题?
所以,问题开始出现在第 6 步,就在单击登录按钮后(参见代码执行过程,第 6 步)。
点击登录按钮后,它会加载新页面(它不会在新标签中打开它),然后它就不想工作了。
您为解决问题做了什么尝试
我想到的第一件事是在单击登录后使用driver.wait(5),但这不起作用。
我还尝试检查该页面上的任何其他元素是否会导致操作.click()
在那之后,我尝试了等待 - 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() 之前在该页面上找不到任何元素?
Selenium 等待和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()
【问题讨论】:
标签: python python-3.x selenium selenium-webdriver selenium-chromedriver