硒按钮选择器,然后单击

时间:2019-05-30 14:03:49

标签: python selenium xpath css-selectors webdriverwait

我想在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页面的屏幕截图:

HTML Page

谢谢大家的帮助。

4 个答案:

答案 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