Selenium+Python+Chrome Driver调用send_keys报错的问题排查
提问:Selenium调用send_keys报错AttributeError: 'list' object has no attribute '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定位,结果都一样。麻烦帮忙指出错误,或者给相关讲解内容,谢谢。我的需求是输入登录信息进入上传文档的页面,这是整个流程里唯一需要键盘输入的步骤。
更新1:修改find_elements后出现新错误
感谢Prophet的回复,我把find_elements的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]
更新2:附页面截图
问题已解决:最终更新
Prophet提醒我可能需要等待页面完全加载,这正是我定位元素失败、调用send_keys报错的原因。添加等待后,脚本能正常定位到加载完成的元素,代码如下:
# 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)
内容的提问来源于stack exchange,提问作者JaceExton
相关产品推荐
相关产品推荐

