Selenium Python出现TypeError: 'str' object is not callable错误求助
问题描述
用Python编写Selenium代码时触发TypeError: 'str' object is not callable错误。
原代码:
email = driver.find_element(By.ID("email-input")).getAttribute("id")
尝试修改后的代码:
email = driver.find_element(By.ID("email-input")).text
问题仍未解决,报错信息:
Traceback (most recent call last): File "C:\Users\user\Desktop\LAB AUTOMATION\LAB.py", line 42, in email = driver.find_element(By.ID, "email-input").getAttribute("id") File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 855, in find_element return self.execute(Command.FIND_ELEMENT, { File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 428, in execute self.error_handler.check_response(response)
错误原因及修复方案
核心错误点
- 元素定位写法错误:
By.ID是字符串常量,不是函数,不能用By.ID("email-input")这种调用方式,必须把By.ID作为第一个参数,元素ID值作为第二个参数传入find_element。 - 属性获取方法名错误:Python版Selenium中获取元素属性的方法是
get_attribute()(小写开头),而非Java风格的getAttribute()。
正确代码示例
场景1:获取元素的id属性
email = driver.find_element(By.ID, "email-input").get_attribute("id")
场景2:获取元素的文本内容
email = driver.find_element(By.ID, "email-input").text
额外建议(处理动态元素)
如果目标元素是动态加载的,建议添加显式等待避免元素未加载完成就执行操作:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,直到元素出现 email_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "email-input")) ) # 获取id属性 email_id = email_element.get_attribute("id") # 或者获取文本 email_text = email_element.text
内容的提问来源于stack exchange,提问作者Syed Asad Haider

