WinError 193错误排查与Selenium外汇市场爬取逻辑验证
一、[WinError 193] 错误排查方案
既然ChromeDriver在其他Selenium脚本里能正常运行,问题大概率出在当前脚本的特定配置上,按以下步骤逐一排查:
- 校验ChromeDriver路径:确认脚本里指定的驱动路径是绝对路径,且无空格/特殊字符。如果路径带空格(比如
C:\Program Files\chromedriver.exe),要么给路径加引号,要么把驱动移到脚本同目录直接写chromedriver.exe。 - 检查位数匹配:Python版本(32/64位)必须和ChromeDriver位数完全一致——哪怕Chrome是64位,32位Python也得用32位驱动,这是WinError193的高发原因。
- 排查误调用文件:仔细核对代码里
webdriver.Chrome()的路径参数,别不小心指向了非exe文件(比如txt、dll)。 - 确认版本对应:当前环境的Chrome浏览器版本,要和ChromeDriver小版本完全匹配(比如Chrome 118.x对应Driver 118.x),哪怕其他脚本能用,也要确保当前环境的版本对齐。
- 权限排查:试试以管理员身份运行脚本,或者把ChromeDriver移到非系统盘(比如D盘根目录),避免系统权限拦截。
二、爬取逻辑校验与优化
针对你的需求(抓取market_open_row类的London/New York市场数据,New York需判断开盘3小时后),以下是逻辑校验点和优化建议:
1. 核心筛选逻辑校验
- 精准定位市场名称:不要直接取行的文本,要从行内的指定元素(比如特定
<td>)提取市场名,避免无关干扰。示例代码:market_name = row.find_element(By.XPATH, "./td[1]").text.strip() - 模糊匹配处理:判断市场名时,先用
strip()去除首尾空格,避免页面文本带空格导致匹配失败:if market_name.strip() in ["London", "New York"]: # 执行后续逻辑
2. New York开盘时间判断逻辑
这部分要重点处理时区和时间格式问题:
- 时区对齐:New York用的是美国东部时间(EST/EDT),必须把开盘时间和当前时间统一到同一时区再计算差。示例代码(用
pytz处理时区):from datetime import datetime, timedelta import pytz # 假设从页面提取的开盘时间是"09:30" open_time_str = "09:30" ny_tz = pytz.timezone('America/New_York') # 拼接当天日期,生成带时区的开盘时间对象 today = datetime.now(ny_tz).date() open_time = ny_tz.localize(datetime.combine(today, datetime.strptime(open_time_str, "%H:%M").time())) # 获取当前纽约时间 current_ny_time = datetime.now(ny_tz) # 判断是否超过3小时 if (current_ny_time - open_time) >= timedelta(hours=3): # 符合条件,执行数据抓取 - 跨天问题处理:如果是凌晨爬取,要确认页面显示的开盘时间是当天还是前一天的(比如纽约收盘可能到次日凌晨),需结合页面实际逻辑调整日期拼接规则。
3. 代码健壮性优化
- 替换强制等待:把
time.sleep()换成显式等待,确保元素加载完成后再操作:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待所有开盘行加载完成 rows = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, "market_open_row")) ) - 添加异常捕获:定位元素时用
try-except包裹,避免单个元素找不到导致脚本崩溃:for row in rows: try: market_name = row.find_element(By.XPATH, "./td[1]").text.strip() # 后续逻辑 except Exception as e: print(f"处理行时出错: {e}") continue
内容的提问来源于stack exchange,提问作者francois de koker
相关产品推荐
相关产品推荐

