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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:08:24