You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:40:20