Selenium(Python)中send_key调用报错,求问题排查与解决方法
解决Selenium触发谷歌搜索时的AttributeError问题
嘿,我看到你遇到的问题啦,其实这个报错的原因很简单——你写错了一个方法名!
错误根源
你代码里的 driver.find_element_by_name("btnK").send_key(Keys.RETURN) 这一行,send_key 应该是 send_keys(注意末尾的s)。Selenium的WebElement方法是复数形式的send_keys,单数的send_key并不存在,所以才会抛出AttributeError。
另外还有个小细节:你输入文本的地方//The piece of text没有加引号,实际运行时会报语法错误,需要改成带引号的字符串,比如"要搜索的内容"。
修复后的代码
下面是修正后的完整代码,同时给你优化了几个小细节:
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome('C:\\Anaconda3\\Lib\\idlelib\\chromedriver.exe') driver.set_page_load_timeout(10) # 这里直接传数字更规范,不用加引号 driver.get("http://google.com") # 找到搜索框,输入文本后直接发送回车键完成搜索(这种方式比点击按钮更稳定) search_box = driver.find_element_by_name("q") search_box.send_keys("你的搜索内容") search_box.send_keys(Keys.RETURN) # 如果你还是想用点击搜索按钮的方式,修正拼写后可以这样写: # driver.find_element_by_name("btnK").send_keys(Keys.RETURN) time.sleep(4) driver.quit() # 记得最后关闭浏览器哦
额外实用建议
- 尽量避免用
time.sleep(),可以改用Selenium的显式等待,这样能让代码更高效稳定,不会因为网络慢导致元素找不到:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 等待搜索框加载完成后再操作 search_box = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME, "q")) )
- 现在Selenium 4+版本更推荐用
find_element(By.NAME, "q")这种新写法,替代旧的find_element_by_name,不过旧方法暂时也还能正常使用。
内容的提问来源于stack exchange,提问作者NotMyName
相关产品推荐
相关产品推荐

