Может кто-нибудь любезно указать мне, где я ошибаюсь, пожалуйста?
Я просмотрел документацию и подумал, что настроил ее правильно, но продолжаю получать ошибку:
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)
Ваша ошибка здесь: 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"]')
Правило простое: если вы заключаете строку в ", внутренние строки должны быть заключены в ' и наоборот.
Привет, Пророк, могу я побеспокоить вас и получить ваши два цента за мое обновление, пожалуйста?
Конечно. Но завтра
Спасибо, Пророк, похоже, я не могу найти элемент, если он не является списком, когда я удаляю «s», я получаю сообщение об ошибке, говорящее, что элемент не найден, но когда я сохраняю «s», он дает мне то же сообщение раньше, как вы объяснили, я не могу отправлять ключи в список, но я не могу найти элемент, если он не является таковым.
Что ж, это означает, что вы используете неправильный локатор или страница все еще не загружена. Мы не можем отладить эту проблему, так как вы не поделились ссылкой
Это вообще помогает? это доступ к телефону в моей сети, поэтому я не думал, что будет полезно поделиться сайтом, поскольку никто не может получить доступ извне.
ААААА!! Мне нужно было добавить команду сна!! ты был прав!
Спасибо! извините за то, что новичок в этом! Я добавил 5-секундные команды сна, прежде чем шаг регистрации мог быть продолжен, и он нашел его!
Верно. Но лучше использовать WebDriverWait expected_conditions явное ожидание, а не жестко заданный сон
Я добавлю это в свой сценарий, я думаю, что видел учебник, показывающий мне это, еще раз спасибо за вашу помощь. :)
Пожалуйста. Если у вас есть еще проблемы - не стесняйтесь спрашивать здесь. Просто предоставьте как можно больше подробностей о вашем коде, об ошибке, с которой вы столкнулись, и т. д.
Это буква 's' в driver.find_elements(By.ID, "idUsername"), она должна быть в find_element