Selenium操作谷歌搜索框遇两类报错:AttributeError与TypeError求助
Selenium谷歌搜索代码报错解决方案
先解决你遇到的两个核心错误:
AttributeError: 'WebDriver' object has no attribute 'send_keys'
send_keys是网页元素的专属方法,不能直接用在driver对象上。你得先定位到谷歌搜索框元素,再调用这个方法。另外你的finally块逻辑有误——不管try里有没有成功找到元素,finally都会执行,这里应该把输入文本的操作放到try内部,finally用来处理浏览器关闭的收尾工作。TypeError: presence_of_element_located() takes 1 positional argument but 2 were given
presence_of_element_located()要求传入一个元组参数,你需要把By.NAME和"gLFyf"包裹在括号里,写成(By.NAME, "gLFyf")再传进去。
额外适配Selenium新版本(4.x+)的改动
Selenium 4.x开始已经弃用了executable_path参数,需要用Service类来指定ChromeDriver路径,避免后续版本兼容问题。
修正后的完整代码:
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.chrome.service import Service # 指定ChromeDriver路径 service = Service("C:\\Program Files (x86)\\chromedriver.exe") driver = webdriver.Chrome(service=service) driver.get("https://www.google.com/") try: # 等待搜索框元素加载完成,注意参数是元组格式 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located( (By.NAME, "gLFyf") ) ) # 给搜索框输入文本 element.send_keys("Selenium") # 可选:按回车提交搜索 element.send_keys(Keys.ENTER) finally: # 操作完成后关闭浏览器,释放资源 driver.quit()
关键改动说明:
- 引入
Service类,替换旧的executable_path参数,适配Selenium 4.x+版本 - 调整
EC.presence_of_element_located的参数为元组格式 - 将
send_keys调用移到try内部,作用于定位到的搜索框元素element finally块里用driver.quit()关闭浏览器,避免资源占用
内容的提问来源于stack exchange,提问作者Sujal Bhattarai
相关产品推荐
相关产品推荐

