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

Python Selenium爬虫报错:无法从selenium.webdriver.support.ui导入expected_conditions

问题排查与解决

1. ImportError 错误根源与修复

这个报错的核心原因是Selenium版本迭代导致的导入路径变更:

  • Selenium 3.x及更早版本:from selenium.webdriver.support.ui import expected_conditions as EC
  • Selenium 4.0+版本:expected_conditions已从ui模块移出,正确导入方式为:
    from selenium.webdriver.support import expected_conditions as EC
    

你卸载重装后默认安装了最新的Selenium 4.x,但代码仍沿用旧版本的导入语句,因此触发报错。直接修改导入行即可解决。

额外核对:确保ChromeDriver版本与Chrome浏览器大版本完全匹配(如Chrome 118对应ChromeDriver 118.x),可通过chromedriver --version命令验证。

2. 带JS验证的登录页替代工具推荐

针对JS渲染的登录页,推荐几个更易用的工具:

  • Playwright:微软推出的自动化工具,对React/Vue等现代JS框架支持极佳,内置智能等待机制,无需手动编写等待条件,代码更简洁。安装命令:pip install playwright,再运行playwright install安装浏览器驱动。
  • Pyppeteer:Python版Chrome官方无头浏览器工具Puppeteer,轻量专注,适合快速开发JS页面爬虫。
  • Selenium 4.x 原生优化写法:无需依赖expected_conditions,可直接用lambda表达式实现等待,示例:WebDriverWait(driver, 10).until(lambda d: d.find_element(By.ID, "username").is_displayed())

修正后的Selenium 4.x代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
# 修正后的导入语句
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("目标登录页URL")

# 示例:等待用户名输入框加载完成并输入内容
wait = WebDriverWait(driver, 10)
username_input = wait.until(EC.presence_of_element_located((By.ID, "username")))
username_input.send_keys("你的用户名")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:35:16