На веб-странице я хотел бы сделать автоматический вход в систему, передавая пользователя и пароль через Python. Я использую этот код:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("http://10.50.20.10/")
time.sleep(5)
username = driver.find_element(By.ID,"Username")
password = driver.find_element_by_id(By.ID,"Password")
username.send_keys("admin")
password.send_keys("pass$")
driver.find_element(By.NAME,"Login").click()
с помощью этого кода я вижу, что веб-страница открыта правильно, но код выдает ошибку при попытке ввести/найти имя пользователя:
Traceback (most recent call last):
File "C:\python\test.py", line 18, in <module>
username = driver.find_element(By.ID,"Username")
File "C:\Users\Utente\AppData\Local\Programs\Python\Python312\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 741, in find_element
return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
File "C:\Users\Utente\AppData\Local\Programs\Python\Python312\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 347, in execute
self.error_handler.check_response(response)
File "C:\Users\Utente\AppData\Local\Programs\Python\Python312\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id = "Username"]"}
(Session info: chrome=123.0.6312.122); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
Stacktrace:
GetHandleVerifier [0x00007FF7C0E47032+63090]
(No symbol) [0x00007FF7C0DB2C82]
(No symbol) [0x00007FF7C0C4EC65]
(No symbol) [0x00007FF7C0C9499D]
(No symbol) [0x00007FF7C0C94ADC]
(No symbol) [0x00007FF7C0CD5B37]
(No symbol) [0x00007FF7C0CB701F]
(No symbol) [0x00007FF7C0CD3412]
(No symbol) [0x00007FF7C0CB6D83]
(No symbol) [0x00007FF7C0C883A8]
(No symbol) [0x00007FF7C0C89441]
GetHandleVerifier [0x00007FF7C12425AD+4238317]
GetHandleVerifier [0x00007FF7C127F70D+4488525]
GetHandleVerifier [0x00007FF7C12779EF+4456495]
GetHandleVerifier [0x00007FF7C0F20576+953270]
(No symbol) [0x00007FF7C0DBE54F]
(No symbol) [0x00007FF7C0DB9224]
(No symbol) [0x00007FF7C0DB935B]
(No symbol) [0x00007FF7C0DA9B94]
BaseThreadInitThunk [0x00007FFF415A7344+20]
RtlUserThreadStart [0x00007FFF42DC26B1+33]
Я не понимаю, где ошибка. Веб-страница выглядит следующим образом:
это HTML-код, который у меня есть:
<html><head>
<meta charset = "UTF-8">
<meta name = "author" content = "Christoph Lukas Lindtner">
<meta name = "designer" content = "Christoph Lukas Lindtner">
<meta name = "description" content = "eiCAB - This is 4G">
<link rel = "manifest" href = "manifest.json">
<link rel = "icon" href = "/img/app/icons/favicon.png" type = "image/png">
<meta name = "robots" content = "noindex, nofollow">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name = "mobile-web-app-capable" content = "yes">
<title>HMI8462-TW • C0118828</title>
<link rel = "stylesheet" href = "cbd179784e6e85707d5d648d84e84f25732d1e7e1594916ea75f3de455036850.css" type = "text/css">
<script type = "application/javascript" src = "4fa2c0563949d618857f54c5c23b5e66caad69ba2dc66ccaeeeb0e3fc7b622df.js"></script>
<script src = "blob:http://10.80.100.10/616fc941-ae19-4977-8979-c8633be146e3"></script></head>
<body class = "st connected login" role = "application" id = "madpenguin"><div role = "progressbar" class = "orbit" aria-hidden = "true" style = "display: none;"><canvas width = "80" height = "80"></canvas></div><div class = "ui-workplace-overlay"></div><div role = "main" style = "height: 901px; width: 1365px;"><div role = "toolbar" class = "action-bar" aria-hidden = "true" style = "width: 869px; display: none;"><div role = "button" class = "action-control-box"><div class = "label" aria-hidden = "true" style = "display: none;"></div><div role = "img" class = "action-back" style = "transform: translate3d(0px, 0px, 0px);"><svg xmlns = "http://www.w3.org/2000/svg" version = "1.1" x = "0" y = "0" width = "24" height = "24" viewBox = "0 0 24 24" xml:space = "preserve"><path d = "M18.5 12.5H7.3l5.2 5.4 -0.6 0.7L5.5 12l6.3-6.5 0.6 0.7 -5.2 5.4h11.2V12.5z" fill = "#878787"></path></svg></div><div role = "img" class = "action-bar-icon"></div><div role = "img" class = "action-drawer-control" style = "transform: translate3d(24px, 0px, 0px);"><svg xmlns = "http://www.w3.org/2000/svg" version = "1.1" x = "0" y = "0" width = "24" height = "24" viewBox = "0 0 24 24" enable-background = "new 0 0 24 24" xml:space = "preserve"><path fill = "#95A5A6" d = "M18.5 13h-13v-2h13V13zM18.5 17h-13v2h13V17zM18.5 5h-13v2h13V5z"></path></svg></div></div><div class = "action-bar-title" role = "heading" aria-level = "1"></div><div role = "menu" class = "action-menu"></div><div class = "notification-bar"><div role = "button" class = "widget link online"><div class = "label"></div></div><div role = "button" class = "widget-notifications widget"><div class = "label" aria-hidden = "true" style = "display: none;"></div></div></div></div><div class = "application-background"></div><div style = "height: 901px; width: 1365px;"><div class = "login-layout vertical" style = "height: 901px; width: 1365px;"><div role = "form" class = "login-box" style = "left: 443px; top: 192px;"><div class = "logo vertical"></div><div class = "device-name vertical">HMI8462-TW</div><div class = "input-block vertical"><div role = "textbox" aria-owns = "n7ai" class = ""><div class = "label" id = "93u8" style = "">Username</div><input autocomplete = "off" aria-labelledby = "93u8" type = "text"><textarea autocomplete = "off" aria-labelledby = "93u8" style = "display: none;"></textarea></div><div role = "textbox" aria-owns = "1ir5" class = ""><div class = "label" id = "uui4" style = "">Password</div><input autocomplete = "off" aria-labelledby = "uui4" class = "hidden" type = "text"><textarea autocomplete = "off" aria-labelledby = "uui4" class = "hidden" style = "display: none;"></textarea></div><div role = "combobox" aria-haspopup = "true" aria-expanded = "false" aria-owns = "3ao1" class = ""><div class = "label" id = "v6mg" style = "">Select language</div><input type = "text" autocomplete = "off" aria-labelledby = "v6mg" style = "display: none;"><div class = "value">English</div><div role = "img" class = "arrow"><svg xmlns = "http://www.w3.org/2000/svg" version = "1.1" x = "0" y = "0" width = "24" height = "24" viewBox = "0 0 24 24" xml:space = "preserve"><path fill = "#9E9E9E" d = "M17 9.5l-4.4 4.9L12 15l-0.6-0.6L7 9.5 7.7 9l4.3 4.7L16.3 9 17 9.5z"></path></svg></div></div></div><div role = "button" class = "action-login vertical" style = "left: 165px;"><div role = "img" class = "icon"><svg xmlns = "http://www.w3.org/2000/svg" version = "1.1" baseProfile = "tiny" x = "0" y = "0" width = "24" height = "24" viewBox = "0 0 24 24" xml:space = "preserve"><path fill = "#95a5a6" d = "M15.4 8.3h-1.6c0-1.4-0.8-2.6-1.8-2.6 -1 0-1.8 1.2-1.8 2.6H8.6c0-2.6 1.5-4.8 3.4-4.8C13.9 3.5 15.4 5.6 15.4 8.3zM17.1 9.8H6.9C6.3 10.4 6 11.3 6 12.2v4.8c0 2 1.6 3.6 3.6 3.6h4.8c2 0 3.6-1.6 3.6-3.6v-4.8C18 11.3 17.7 10.4 17.1 9.8zM10.4 17.2l1-1.7c-0.4-0.2-0.7-0.6-0.7-1.1 0-0.7 0.5-1.2 1.2-1.2 0.7 0 1.2 0.5 1.2 1.2 0 0.5-0.3 0.9-0.7 1.1l1 1.7H10.4z"></path></svg></div><div class = "label" style = "">Login</div></div><div class = "login-status vertical"></div></div><div role = "img" class = "copyright" style = "bottom: 40px; left: 683px;"><svg xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" version = "1.1" id = "Ebene_1" x = "0px" y = "0px" width = "100px" height = "24px" viewBox = "0 0 100 24" enable-background = "new 0 0 100 24" xml:space = "preserve" style = "width: 0px; height: 0px;">
Инфо-ХабДиспетчер баз данныхНастройкиОбновление ПОУправление пользователямиВыход нулевой
Чао, у меня была та же мысль. Я прикрепил изображение html. Я пробовал с by.Id, указав в качестве исследования «93u8», и с by.Name, указав «Имя пользователя», но ясно, что я делаю ошибку .
Не делитесь HTML как изображением, делитесь им как текстом. Почему мне не следует загружать изображения кода/данных/ошибок?
отредактировано с помощью кода.
Замените driver.find_element(By.ID,"Username")
на driver.find_element(By.ID,"93u8")
из идентификатора HTML-элемента.
username = driver.find_element(By.ID,"Username")
Приведенный выше код неверен. Атрибут ID
со значением «Имя пользователя» отсутствует. Измените строку, как показано ниже, которая использует стратегию локатора XPath.
# For username
username = driver.find_element(By.XPATH,"//div[text()='Username']//following::input[1]")
# For password
password = driver.find_element(By.XPATH,"//div[text()='Password']//following::input[1]")
# For Login button
driver.find_element(By.XPATH,"//div[text()='Login']").click()
ОБНОВЛЕНИЕ: Благодаря разметке HTML, указанной в вопросе, описанная выше стратегия XPath должна найти элемент. Если он по-прежнему не находит и выдает исключение no such element
, проверьте наличие IFRAME
.
Обратитесь к этому ответу - https://stackoverflow.com/a/75865161/7598774
Я пробовал, и это не работает
Проверьте обновленный ответ. Кроме того, поделитесь еще немного HTML, а не только этим конкретным элементом.
добавил больше кода. извините, но я новичок в html/кодировании
Проверьте ответ и попробуйте прямо сейчас. Я изменил выражение XPath, чтобы найти узел input
, а не div
node.
Пожалуйста, отредактируйте свое сообщение, включив в него исходный код HTML этой веб-страницы. Я предполагаю, что идентификатор элемента на самом деле не является «Именем пользователя», как он отображается на отображаемой веб-странице.