我想在Python上使用Selenium自动重启路由器。除了最后一步,所有操作都正常,最后一步是找到重新启动按钮,然后单击它!
我试图通过(id,css_selector,名称,值,xpath)找到它,但是似乎没有任何作用。
这是我的代码:
driver = webdriver.Firefox()
driver.get('http://192.168.100.1')
english = driver.find_element_by_id("English")
english.click()
usr = "username"
pwd = "password"
usrname_box = driver.find_element_by_id("txt_Username")
usrname_box.send_keys(usr)
pwd_box = driver.find_element_by_id("txt_Password")
pwd_box.send_keys(pwd)
submit_ = driver.find_element_by_id("button")
submit_.click()
sleep(1)
resetit = driver.find_element_by_name("maindiv_reset")
resetit.click()
sleep(1)
# This is the one I want to locate
reboot = driver.find_element_by_xpath("//input[@id='btnReboot']")
reboot.click()
这是目标按钮的HTML代码:
<input class="ApplyButtoncss buttonwidth_150px" name="btnReboot" id="btnReboot" type="button" onclick="Reboot()" bindtext="s0603" value="Restart">
尝试任何操作时,都会出现错误:
NoSuchElementException: Message: Unable to locate element: (WHATEVER I TRY)
HTML页面的屏幕截图:
谢谢大家的帮助。
答案 0 :(得分:1)
所需元素是启用了JavaScript的元素,因此要在元素上定位click()
,必须诱使 WebDriverWait 使元素可点击,您可以使用以下任一Locator Strategies:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ApplyButtoncss.buttonwidth_150px#btnReboot[value='Restart']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ApplyButtoncss buttonwidth_150px' and @id='btnReboot'][@value='Restart']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
答案 1 :(得分:0)
您的这个:
reboot = driver.find_element_by_name("btnReboot")
reboot.click()
答案 2 :(得分:0)
由于目标按钮包含在iframe
中,因此我使用以下方法解决了该问题:
iframe = driver.find_element_by_id("frameContent")
driver.switch_to.frame(iframe)
driver.find_element_by_id('btnReboot').click()
alert = driver.switch_to_alert()
alert.accept()
非常感谢每个尝试提供帮助的人,尤其是DebanjanB
答案 3 :(得分:-1)
作为最后一个解决方案,您可以告诉Python单击“重新启动”按钮,前提是您可以在屏幕上找到像素(X,Y)坐标,并且假设Firefox浏览器在运行脚本时没有移动。参见here。