Драйвер Selenium, Python, Chrome -Send_Keys

Может кто-нибудь любезно указать мне, где я ошибаюсь, пожалуйста?

Я просмотрел документацию и подумал, что настроил ее правильно, но продолжаю получать ошибку:

line 29, in <module>
    username.send_keys(cred_username)
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'send_keys'

В настоящее время я могу:

  • Загрузить и получить доступ к странице
  • обойти стену безопасности, которую выбрасывает мой браузер
  • загрузите экран входа в систему, но я не могу ввести свои учетные данные.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

cred_username = "username"
cred_password = "password"

s_1=Service("my driver location")
driver = webdriver.Chrome(service=s_1)

driver.get("https:website")

# Hurdle 01 Start : get past security step.
advanced = driver.find_element(By.ID, "details-button")
advanced.click()

proceed = driver.find_element(By.ID, "proceed-link")
proceed.click()
# Hurdle 01 Finish : 

# Hurdle 02 Start : logging in
username = driver.find_elements(By.ID, "idUsername")
username.clear()
username.send_keys(cred_username)
password = driver.find_element(By.ID, "idPassword")
password.clear()
password.send_keys(cred_password)
password.send_keys(Keys.RETURN)

time.sleep(99)

Я попытался установить его как строку, но получил ту же ошибку. Я также пробовал вариант «send_keys_to_element(element, *keys_to_send)» Я также пытался установить xPATH, но получил те же результаты.

Если кто-нибудь может указать, где я ошибаюсь, или направить на веб-страницу, которая объясняет, где я ошибаюсь, я был бы очень признателен, спасибо, что посмотрели.

Я думал, что то, что я написал, позволит мне просто ввести свои данные для входа на этом этапе, чтобы затем я мог получить доступ к странице, которая позволила бы мне загрузить документ. Это единственная часть процесса, которая требует ввода с клавиатуры.

Обновление из ответа:

Спасибо за ответ [Пророк], я удалил букву «s», как вы предлагаете, и снова попытался использовать XPATH, но теперь возникла эта ошибка, я чувствую, что я близок, но есть что-то очевидное, что я упускаю.

  File "/Users/jace/Desktop/Filing_Cabinet/Python_Folder/my_phone_config01.py", line 27
    username = driver.find_element(By.XPATH, "//input[@id = "Username"]")
                                             ^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?
[Finished in 25ms with exit code 1]

Обновление из комментария: фото страницы осмотра

Решено, финальное обновление

Пророк указал, что мне, возможно, нужно дождаться полной загрузки страницы, поэтому мне было трудно найти элемент для отправки ключей.

Добавление ожидания позволило моему скрипту фактически загрузить элемент, чтобы найти его.

# Step 03 Start : logging in
try: 
    username = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located((By.XPATH, "//input[@id='idUsername']"))
    )
    username.send_keys(cred_username)
 
    password = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located((By.XPATH, "//input[@id='idPassword']"))
    )
    password.send_keys(cred_password)
    password.send_keys(Keys.RETURN)
# Step 03 End : need to add wait commands/let the page load.
finally:
    time.sleep(30)

Это буква 's' в driver.find_elements(By.ID, "idUsername"), она должна быть в find_element

Jaydeep Devda 21.11.2022 16:12
Мутабельность и переработка объектов в Python
Мутабельность и переработка объектов в Python
Объекты являются основной конструкцией любого языка ООП, и каждый язык определяет свой собственный синтаксис для их создания, обновления и...
Другой маршрут в Flask Python
Другой маршрут в Flask Python
Flask - это фреймворк, который поддерживает веб-приложения. В этой статье я покажу, как мы можем использовать @app .route в flask, чтобы иметь другую...
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
Проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
1
1
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша ошибка здесь: username = driver.find_elements(By.ID, "idUsername") Вам нужно использовать метод find_element, а не find_elements, поскольку find_element возвращает объект веб-элемента, поэтому вы можете применить к нему метод send_keys, а find_elements возвращает список веб-элементов, и вы не можете применить метод send_keys к списку. UPD Что касается вашего доп.выпуска. Следующее выражение XPath можно исправить следующим образом:

username = driver.find_element(By.XPATH, "//input[@id='Username']")

Или

username = driver.find_element(By.XPATH, '//input[@id = "Username"]')

Правило простое: если вы заключаете строку в ", внутренние строки должны быть заключены в ' и наоборот.

Привет, Пророк, могу я побеспокоить вас и получить ваши два цента за мое обновление, пожалуйста?

JaceExton 22.11.2022 23:09

Конечно. Но завтра

Prophet 22.11.2022 23:19

Спасибо, Пророк, похоже, я не могу найти элемент, если он не является списком, когда я удаляю «s», я получаю сообщение об ошибке, говорящее, что элемент не найден, но когда я сохраняю «s», он дает мне то же сообщение раньше, как вы объяснили, я не могу отправлять ключи в список, но я не могу найти элемент, если он не является таковым.

JaceExton 23.11.2022 15:02

Что ж, это означает, что вы используете неправильный локатор или страница все еще не загружена. Мы не можем отладить эту проблему, так как вы не поделились ссылкой

Prophet 23.11.2022 15:08

Это вообще помогает? это доступ к телефону в моей сети, поэтому я не думал, что будет полезно поделиться сайтом, поскольку никто не может получить доступ извне.

JaceExton 23.11.2022 15:13

ААААА!! Мне нужно было добавить команду сна!! ты был прав!

JaceExton 23.11.2022 15:15

Спасибо! извините за то, что новичок в этом! Я добавил 5-секундные команды сна, прежде чем шаг регистрации мог быть продолжен, и он нашел его!

JaceExton 23.11.2022 15:16

Верно. Но лучше использовать WebDriverWait expected_conditions явное ожидание, а не жестко заданный сон

Prophet 23.11.2022 15:19

Я добавлю это в свой сценарий, я думаю, что видел учебник, показывающий мне это, еще раз спасибо за вашу помощь. :)

JaceExton 23.11.2022 15:23

Пожалуйста. Если у вас есть еще проблемы - не стесняйтесь спрашивать здесь. Просто предоставьте как можно больше подробностей о вашем коде, об ошибке, с которой вы столкнулись, и т. д.

Prophet 23.11.2022 15:24

Другие вопросы по теме