Кнопка выбора селена и щелчок - PullRequest
3 голосов
/ 30 мая 2019

Я хочу автоматизировать перезапуск моего маршрутизатора с помощью Selenium на Python.Все работает нормально, за исключением последнего шага, который находит кнопку перезапуска и нажимает ее!

Я пытался найти ее по (id, css_selector, name, value, 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 ]

1 голос
/ 30 мая 2019

Требуемый элемент является JavaScript включенным элементом, чтобы найти его и click() на элементе, который вы должны заставить WebDriverWait , чтобы элемент был активным и вы можете использовать любую из следующих стратегий локатора :

  • Использование 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
    
0 голосов
/ 30 мая 2019

Поскольку целевая кнопка была включена в 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

0 голосов
/ 30 мая 2019

В качестве последнего решения для канавы вы можете указать Python нажать кнопку «Перезагрузить», предполагая, что вы можете найти координаты пикселей (X, Y) на экране, и при условии, что браузер Firefox не сдвигается при запуске сценария. Смотрите здесь .

0 голосов
/ 30 мая 2019

Твой этот:

reboot = driver.find_element_by_name("btnReboot")
reboot.click()
...