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
相关产品推荐
相关产品推荐

