Selenium报错:'WebDriver'无find_elemen_by_css_selector属性,求正确用法
解决AttributeError: 'WebDriver' object has no attribute 'find_elemen_by_css_selector'错误
问题根源
你遇到的错误是因为方法名拼写错误:find_elemen_by_css_selector少了一个字母t,且要获取多个元素用于遍历,正确的方法名是find_elements_by_css_selector(注意末尾的s)。
另外,如果你使用的是Selenium 4.x及以上版本,官方更推荐使用统一的find_elements()方法配合By类来定位元素,这种写法更规范且兼容性更好。
修正后的代码
写法1:修复拼写的传统写法
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome() url = "http://github.com/" driver.get(url) search_input = driver.find_element("name", "q") time.sleep(1) search_input.send_keys("python") time.sleep(3) search_input.send_keys(Keys.ENTER) time.sleep(1) # 修复拼写错误,使用find_elements_by_css_selector获取元素列表 result = driver.find_elements_by_css_selector(".repo-list-item h3 a") for element in result: # 建议打印元素文本或链接,而非元素对象本身 print(element.text, element.get_attribute("href")) driver.close()
写法2:Selenium 4.x+推荐写法
需要额外导入By类:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome() url = "http://github.com/" driver.get(url) # 使用By.NAME定位搜索框 search_input = driver.find_element(By.NAME, "q") time.sleep(1) search_input.send_keys("python") time.sleep(3) search_input.send_keys(Keys.ENTER) time.sleep(1) # 使用By.CSS_SELECTOR定位结果元素 result = driver.find_elements(By.CSS_SELECTOR, ".repo-list-item h3 a") for element in result: print(element.text, element.get_attribute("href")) driver.close()
额外提示
- 尽量避免使用
time.sleep()固定等待,推荐使用WebDriverWait结合expected_conditions进行显式等待,让代码更稳定:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待搜索结果加载完成 result = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".repo-list-item h3 a")) )
内容的提问来源于stack exchange,提问作者İbrahim Gündoğmuş
相关产品推荐
相关产品推荐

