Чтобы автоматически заполнить страницу входа, я создал код, который указывает python пробовать разные имена пользователей из внешнего списка, пока не будет найдено правильное. Но когда я запускаю код, он пробует только первое имя пользователя из списка, а затем останавливается. то есть он не пытается использовать оставшиеся значения имени пользователя. Пожалуйста, помогите мне заставить скрипт работать так, как я хочу. Спасибо.
from selenium import webdriver
PATH = "C:\Program Files (x86)\chromedriver.exe"
webdriver = webdriver.Chrome(PATH)
webdriver.get("https://examplewebsite.com/login/index.php")
password = webdriver.find_element_by_id("password")
password.send_keys("Helloworld1@")
username = webdriver.find_element_by_id("username")
usernamefile = open("list.txt", "r")
for i in usernamefile:
username.send_keys(i)
submit = webdriver.find_element_by_id("loginbtn")
submit.submit()
Обновлено: это ошибка, которую показывает python. Я не знаю, как это исправить.
File "C:\Users\Ranjhaaa\Desktop\test.py", line 23, in <module>
username.send_keys(i)
File "C:\Users\Ranjhaaa\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webelement.py", line 477, in send_keys
self._execute(Command.SEND_KEYS_TO_ELEMENT,
File "C:\Users\Ranjhaaa\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:\Users\Ranjhaaa\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\Ranjhaaa\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
(Session info: chrome=87.0.4280.88)
@furas, не могли бы вы показать эти дополнения в исходном коде? На самом деле, будучи новичком в кодировании, я немного запутался в том, как и где внести эти полезные изменения, предложенные вами. Спасибо
Я добавил это как ответ ниже
так что вы можете пометить мой ответ как принятый, а позже вы можете проголосовать за него.
@furas Ваш ответ помечен как принятый, и вскоре за него проголосуют
всякий раз, когда имя пользователя указано неправильно, требуется некоторое время для загрузки следующей страницы, если она дает вам ошибку не найти типы элементов, что означает, что вам просто нужно использовать некоторое время сна до последней части кода, чтобы сделать это правильно
Я новичок в кодировании. Не могли бы вы проиллюстрировать свое предложение, внеся исправления в код? Спасибо
selenium
сохраняет ваш объект password
и username
как ссылку на элементы на текущей странице, и когда вы нажимаете кнопку submit
, он загружает новую страницу, и все ссылки теряются - и это дает ваше сообщение об ошибке "element is not attached to the page document"
.
После каждой перезагрузки страницы вам нужно снова использовать find_element_by_id
, чтобы получить доступ к полям password
и username
- так что вам придется делать это внутри for
-цикла
usernamefile = open("list.txt", "r")
for i in usernamefile:
password = webdriver.find_element_by_id("password")
password.send_keys("Helloworld1@")
username = webdriver.find_element_by_id("username")
username.send_keys(i)
submit = webdriver.find_element_by_id("loginbtn")
submit.submit()
from selenium import webdriver
PATH = "C:\Program Files (x86)\chromedriver.exe"
usernamefile = open("list.txt", "r")
for i in usernamefile:
webdriver = webdriver.Chrome(PATH)
webdriver.get("https://examplewebsite.com/login/index.php")
username = webdriver.find_element_by_id("username")
password = webdriver.find_element_by_id("password")
password.send_keys("Helloworld1@")
username.send_keys(i)
submit = webdriver.find_element_by_id("loginbtn")
submit.submit()
driver.quit()
если имя пользователя правильное и он входит в систему, то поля пароля и имени пользователя больше не доступны. Вы можете выйти из драйвера и начать снова в цикле
из веб-драйвера импорта селена
file_path = "ваш путь к исполняемому файлу для chromedriver"
Имена пользователей = открыть ("list.txt", "r")
для я в именах пользователей: браузер = webdriver.Chrome(file_path)
browser.get("https://examplewebsite.com/login/index.php")
username = webdriver.find_element_by_id("username")
username.send_keys(i)
password = webdriver.find_element_by_id("password")
password.send_keys("Helloworld1@")
submit = webdriver.find_element_by_id("loginbtn")
submit.submit()
# then close the driver and start again the loop
browser.close()
# also you can use the refresh function
стек сохраняет ссылку на элементы на текущей странице, и когда вы нажимаете кнопку
submit
, он загружает новую страницу, и все ссылки теряются - и это дает ваше сообщение об ошибке. После каждой перезагрузки вам придется снова использоватьfind_element_by_id
, чтобы получить доступ к полюpassword
иusername
- так что вам придется делать это внутриfor i in usernamefile: