Selenium元素选择异常及VSCode相关问题求助(基于《Python自动化》第12章)
问题描述
尝试复现《Automate the Boring Stuff》第12章中的Selenium代码:
from selenium import webdriver browser = webdriver.Firefox() browser.get('https://inventwithpython.com') try: elem = browser.find_element_by_class_name(' cover-thumb') print('Found <%s> element with that class name!' % (elem.tag_name)) except: print('Was not able to find an element with that name.')
在Mac系统的VSCode中运行时遇到以下问题:
find_element_by_class_name方法无法被识别,移除try-except后报错:elem = browser.find_element_by_class_name(' cover-thumb') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'WebDriver' object has no attribute 'find_element_by_class_name'- 每次运行代码后IntelliCode提示会被禁用
- 无法在Chrome中运行,会导致浏览器崩溃(已配置ChromeDriver路径但无效)
解决方案
1. 修复方法不存在的错误
Selenium 4.x版本已废弃find_element_by_*这类旧API,需改用新定位方式:
- 导入
By类 - 类名参数去掉前置空格(原代码
' cover-thumb'的空格会导致定位失败) - 使用
find_element(By.CLASS_NAME, 类名)替代旧方法
修改后的代码:
from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Firefox() browser.get('https://inventwithpython.com') try: elem = browser.find_element(By.CLASS_NAME, 'cover-thumb') print(f'找到该类名对应的元素:<{elem.tag_name}>') except: print('无法找到该类名对应的元素。') finally: browser.quit()
2. 恢复IntelliCode提示
- 终止残留的Python进程:在终端执行
ps aux | grep python找到进程ID,再用kill <进程ID>结束 - 重启VSCode的Python语言服务:按下
Cmd+Shift+P打开命令面板,输入Python: Restart Language Server并执行 - 更新Selenium到最新稳定版:终端执行
pip install --upgrade selenium
3. 解决Chrome崩溃问题
- 确保Chrome浏览器与ChromeDriver版本完全匹配(主版本号必须一致,比如Chrome是118.x,ChromeDriver也要用118.x)
- 改用Selenium 4.6+的自动驱动管理功能,无需手动配置路径:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service # 自动下载匹配的ChromeDriver service = Service() browser = webdriver.Chrome(service=service) browser.get('https://inventwithpython.com') try: elem = browser.find_element(By.CLASS_NAME, 'cover-thumb') print(f'找到该类名对应的元素:<{elem.tag_name}>') except: print('无法找到该类名对应的元素。') finally: browser.quit() # 确保浏览器正常关闭,避免残留进程 - 代码末尾必须调用
browser.quit(),避免进程残留导致后续崩溃
内容的提问来源于stack exchange,提问作者Danny Nguyen
相关产品推荐
相关产品推荐

