t.me/atinfo_chat Telegram группа по автоматизации тестирования

Python + Selenium не находит может найти элемент

xpath
locators
infrastructure
chrome
selenium
webdriver
Теги: #<Tag:0x00007fb2f33d2298> #<Tag:0x00007fb2f33d2158> #<Tag:0x00007fb2f33d2018> #<Tag:0x00007fb2f33d1ed8> #<Tag:0x00007fb2f33d1d98> #<Tag:0x00007fb2f33d1c58>

(Vitaliy) #1

Добрый день.
Пытаюсь автоматизировать вход на устройства и выполнение типовых настроек.
2 модели оборудования, с одной все отлично отрабатывает, со второй Селениум не может найти элемент.
Пробовал искать по селектору, XPath, пробовал в разных браузерах - безуспешно.

Код на python:

from selenium import webdriver
from time import sleep

ip = input('Введите ip: ')

browser=webdriver.Chrome()
browser.get(f'http://{ip}')
browser.implicitly_wait(10)

textarea=browser.find_element_by_css_selector('#username')
textarea.send_keys('admin')

textarea = browser.find_element_by_css_selector('#password')
textarea.send_keys('password')

Так отображается исходный код:

<!DOCTYPE html>
<html>
<head>
<title>
</title>
<META http-equiv="Content-Type" content="text/html;charset=utf-8">
<META http-equiv="Pragma" content="no-cache">
<META http-equiv="Cache-Control" content="no-cache">
<META http-equiv="Expires" content="0">
<style type="text/css">
html, body{height: 100%;margin: 0px;overflow: hidden;}
</style>
<script type="text/javascript">
function release(){document.frames['banner'].release();}
</script>
</head>
<body>
<iframe name="banner" 
id="banner" hideFocus="hideFocus" marginwidth="0" marginheight="0" 
src=" ../index.htm?clientIpAddr=10.0.0.1&IsRemote=0" 
frameborder="0" width="100%" height="100%">
</iframe>
</body>
</html>

Так отображается в консоли разработчика:
html

В результате выполнение получаю ошибку:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“css selector”,“selector”:"#password"}

В этом деле новичок, буду признателен за помощь и замечания.


(Vitaliy) #2

Проблема была в том, что основной документ в фреме.
Помогло browser.switch_to.frame(“banner”)