Python爬虫 Selenium驱动Chrome报错selenium.common.exceptions.WebDriverException: Message

本文介绍了一种常见的Selenium WebDriver异常问题及解决方法。当使用Selenium WebDriver与Chrome浏览器进行自动化测试时,可能会遇到WebDriverException错误,这通常是因为浏览器版本与驱动程序版本不匹配导致的。文中详细解释了如何检查Chrome浏览器版本、确定合适的ChromeDriver版本并进行更新,最终解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序代码:

from selenium import webdriver


url = "http://www.baidu.com"
driver = webdriver.Chrome()
driver.get(url=url)

执行后报错:

selenium.common.exceptions.WebDriverException: Message: unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData":{"frameId":"7A06D5022B2C8796268ABF79AE246C45","isDefault":true},"id":1,"name":"","origin":"://"}
  (Session info: chrome=69.0.3497.81)
  (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86_64)

浏览器截图:
这里写图片描述

出现这类报错大部分原因是浏览器和驱动版本不匹配

  1. 查看浏览器版本,最新的69版本
chrome://settings/help

这里写图片描述
2. 查看google驱动对应的版本关系

https://sites.google.com/a/chromium.org/chromedriver/downloads

这里写图片描述
3. 下载2.41版本的驱动,解压,放到chrome浏览器安装目录下即可

C:\Program Files (x86)\Google\Chrome\Application

再次运行程序代码:
这里写图片描述

<think>我们遇到了一个错误:`selenium.common.exceptions.NoSuchDriverException`,这通常表示Selenium无法找到ChromeDriver的可执行文件。解决方案包括:1.确保已正确下载并放置ChromeDriver。2.使用`webdriver-manager`自动管理浏览器驱动。这里我们采用第二种方案,使用`webdriver-manager`自动下载和管理驱动,避免手动配置路径的问题。修改后的代码(使用webdriver-manager):</think>### 解决 `NoSuchDriverException` 错误 这个错误表明 Selenium 无法找到 ChromeDriver 的可执行文件。以下是完整的解决方案和代码: ```python from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager # 自动管理驱动 from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import csv import time import re def init_driver(): """初始化浏览器驱动,使用webdriver_manager自动管理驱动""" chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--window-size=1920,1080") chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") # 使用webdriver_manager自动下载并管理ChromeDriver service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=chrome_options) return driver def clean_text(text): """清理文本中的多余空格和换行""" if text is None: return "" return re.sub(r'\s+', ' ', text).strip() def scrape_xining_attractions(): """爬取西宁景点数据""" driver = init_driver() url = "https://you.ctrip.com/sight/xining237.html" try: print("正在访问目标网页:", url) driver.get(url) # 等待页面加载完成 WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".card_item")) ) # 确保内容完全加载 time.sleep(3) print("正在解析景点数据...") attractions = [] # 获取所有景点卡片 attraction_cards = driver.find_elements(By.CSS_SELECTOR, ".card_item") print(f"找到 {len(attraction_cards)} 个景点卡片") for card in attraction_cards: try: # 景点名称 name_element = card.find_element(By.CSS_SELECTOR, ".name a") name = clean_text(name_element.text) # 景点链接 link = name_element.get_attribute('href') if name_element else "" # 景点评分 rating = "无评分" rating_elements = card.find_elements(By.CSS_SELECTOR, ".score strong") if rating_elements: rating = clean_text(rating_elements[0].text) # 评论数量 reviews = "0" review_elements = card.find_elements(By.CSS_SELECTOR, ".score a") if review_elements: reviews = clean_text(review_elements[0].text).replace('条点评', '') # 景点等级 level = "" level_elements = card.find_elements(By.CSS_SELECTOR, ".level") if level_elements: level = clean_text(level_elements[0].text) # 景点描述 description = "" desc_elements = card.find_elements(By.CSS_SELECTOR, ".intro") if desc_elements: description = clean_text(desc_elements[0].text) # 景点地址 address = "" address_elements = card.find_elements(By.CSS_SELECTOR, ".addr") if address_elements: address = clean_text(address_elements[0].text) attractions.append({ '景点名称': name, '链接': link, '评分': rating, '评论数': reviews, '等级': level, '描述': description, '地址': address }) except Exception as e: print(f"解析单个景点时出错: {e}") continue if attractions: # 保存为CSV filename = 'xining_attractions.csv' with open(filename, 'w', encoding='utf-8-sig', newline='') as f: fieldnames = ['景点名称', '链接', '评分', '评论数', '等级', '描述', '地址'] writer = csv.DictWriter(f, fieldnames=fieldnames) writer.writeheader() writer.writerows(attractions) print(f"成功爬取 {len(attractions)} 条景点数据,已保存到 {filename}") else: print("未找到任何景点数据") except Exception as e: print(f"爬取过程中出错: {e}") # 保存页面源代码供分析 with open('page_source.html', 'w', encoding='utf-8') as f: f.write(driver.page_source) print("已保存页面源代码到 page_source.html") finally: driver.quit() print("浏览器已关闭") if __name__ == "__main__": scrape_xining_attractions() ``` ### 错误原因及解决方案详解: **错误原因**: `NoSuchDriverException` 表示 Selenium 无法找到 ChromeDriver 可执行文件。常见原因: 1. ChromeDriver 未正确安装 2. ChromeDriver 路径配置错误 3. ChromeDriver 版本与 Chrome 浏览器不匹配 **解决方案**: 1. **使用 webdriver-manager 自动管理驱动**: - 安装库:`pip install webdriver-manager` - 代码中使用 `ChromeDriverManager().install()` 自动下载匹配的驱动 - 无需手动下载或配置路径 2. **确保 Chrome 浏览器已安装**: - `webdriver-manager` 会检测已安装的 Chrome 版本 - 下载对应版本的 ChromeDriver 3. **其他可能的解决方案**: ```python # 方案1:指定驱动路径(如果知道确切位置) # service = Service(executable_path='/path/to/chromedriver') # 方案2:添加驱动所在目录到系统PATH # import sys # sys.path.append('/path/to/driver/directory') ``` ### 安装和使用说明: 1. **安装必要库**: ```bash pip install selenium webdriver-manager csv ``` 2. **确保 Chrome 浏览器已安装**: - 如果没有安装 Chrome,可以从[官网下载](https://www.google.com/chrome/) - 或者使用以下命令安装: ```bash # Ubuntu sudo apt install google-chrome-stable # macOS (使用Homebrew) brew install --cask google-chrome ``` 3. **运行爬虫**: ```bash python xining_attractions.py ``` ### 预期输出: ``` 正在访问目标网页: https://you.ctrip.com/sight/xining237.html 找到 XX 个景点卡片 成功爬取 XX 条景点数据,已保存到 xining_attractions.csv 浏览器已关闭 ``` ### 常见问题处理: 1. **驱动下载失败**: - 检查网络连接 - 尝试设置代理: ```python os.environ['HTTP_PROXY'] = "http://your-proxy:port" os.environ['HTTPS_PROXY'] = "http://your-proxy:port" ``` 2. **浏览器版本不匹配**: - 更新 Chrome 浏览器到最新版 - `webdriver-manager` 会自动处理版本匹配 3. **页面元素加载失败**: - 增加等待时间:`WebDriverWait(driver, 30)` - 检查保存的 `page_source.html` 分析页面结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值