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

Selenium使用find_element_by_css_selector报错原因及修复方案咨询

报错核心原因

1. Selenium版本API不兼容

你使用的应该是Selenium 4.0及以上版本,该版本已经完全移除了find_element_by_css_selector、find_element_by_id这类旧版定位API,直接调用就会触发方法不存在的报错。同时你写的browser.find_elements('input[type=email]')参数缺失,不符合新版定位规则。

2. 代码逻辑错误

  • find_elements返回的是匹配到的元素列表,你直接对列表对象调用send_keys方法会触发属性不存在报错,需要先从列表中取出对应元素再操作。
  • driver.maximize_window未加括号,方法未实际执行,可能导致部分页面元素不在可视区域,定位失败。
  • 获取视频缩略列表时,你用了返回单个元素的find_element方法,后续用索引thumbnails[index]访问单个元素会直接报错。
  • 用固定索引定位按钮(如next_button[2]、confirm_button[1])稳定性极差,YouTube页面结构动态变化,索引值随时会失效,同时固定sleep的等待方式很容易出现元素未加载完成就执行定位的情况。
修复步骤
  1. 先导入定位依赖类
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
  1. 替换所有旧版定位API,统一使用新版写法:
旧写法新写法
find_element_by_css_selector(xxx)find_element(By.CSS_SELECTOR, xxx)
find_elements_by_css_selector(xxx)find_elements(By.CSS_SELECTOR, xxx)
find_element_by_id(xxx)find_element(By.ID, xxx)
  1. 修正逻辑错误:
  • 邮箱输入框定位修改为:email_input = browser.find_elements(By.CSS_SELECTOR, 'input[type=email]')[0]
  • 窗口最大化修改为:driver.maximize_window()
  • 视频列表获取修改为:thumbnails = driver.find_elements(By.CSS_SELECTOR, "ytd-video-renderer")
  1. 建议将固定sleep替换为显式等待,提升定位稳定性,示例:
# 等待邮箱输入框加载完成最多10秒,超时才报错
email_input = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[type=email]')))
额外注意事项

YouTube有严格的反爬机制,该类自动登录、自动评论的操作很容易触发人机验证,就算代码逻辑完全正确也大概率无法正常完成登录操作。

内容的提问来源于stack exchange,提问作者Seagulls

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:45:04