Selenium Python报错:'NoneType'对象无'send_keys'属性求解决
Selenium Python输入评论时出现AttributeError问题解决
问题现象
使用Selenium Python定位评论框并输入内容时,程序抛出以下错误:
AttributeError: 'NoneType' object has no attribute 'send_keys'
原代码如下:
no_show = driver.find_element(By.XPATH,"xpath") no_show.click() notes = WebDriverWait(driver,60).until(EC.element_to_be_clickable(("id","the id"))) time.sleep(2) notes = driver.find_element("id", "__area0-inner").click() # 代码在此处出错 notes.send_keys("test") print("test passed")
尝试过的其他方法:
- 使用
presence_of_element_located显式等待:element2 = WebDriverWait(driver,60).until(EC.presence_of_element_located(("id","the id"))) - 调用
notes.clear(),均无效。
错误原因分析
核心问题出在这一行:
notes = driver.find_element("id", "__area0-inner").click()
Selenium的.click()方法返回值是None,执行这行代码后,notes变量被覆盖为None,后续调用notes.send_keys("test")自然会触发NoneType没有send_keys属性的错误。
另外,可能存在元素定位混淆:你先用显式等待定位了"the id"元素,之后又去定位"__area0-inner",需要确认哪个才是真正可以输入的文本框元素——通常可输入的元素是<input>或<textarea>标签,而__area0-inner可能是文本框的内部容器,并非实际接收输入的元素。
修正方案
- 拆分点击和元素赋值操作,不要把
.click()的返回值赋值给变量 - 确认并定位到真正可输入的文本框元素,再执行输入操作
修正后的代码示例:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import time # 关闭弹窗(假设no_show是关闭按钮) no_show = driver.find_element(By.XPATH,"xpath") no_show.click() # 显式等待可输入的文本框元素(替换成实际可输入元素的定位方式) # 优先用ID,若__area0-inner不是输入框,改用"the id"或其他定位器 notes = WebDriverWait(driver, 60).until( EC.element_to_be_clickable((By.ID, "the id")) # 确保这是实际接收输入的元素 ) # 点击激活输入框(可选,部分输入框需要点击才能激活) notes.click() # 清除原有内容(可选,若输入框有默认文本) notes.clear() # 输入内容 notes.send_keys("test") print("test passed")
额外注意事项
- 避免用
time.sleep()代替显式等待:显式等待会在元素出现时立即执行,比固定等待更高效可靠 - 确认元素定位的正确性:打开浏览器开发者工具(F12),检查目标元素的标签类型,确保是
<input>或<textarea>,且send_keys方法适用于该元素 - 若遇到iframe嵌套:如果评论框在iframe内部,需要先切换到iframe再定位元素:
driver.switch_to.frame("iframe_id_or_name") # 之后再定位并操作元素 # 操作完成后切回主文档 driver.switch_to.default_content()
内容的提问来源于stack exchange,提问作者user22022205
相关产品推荐
相关产品推荐

