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

Selenium XenForo文件上传脚本在Windows失效,疑为路径问题

解决Windows下XenForo文件上传脚本无限循环问题

1. 修复Windows路径格式问题

你打印的路径混用了反斜杠与正斜杠:C:\Users\username\Desktop\files/tmp/asda1213sdfa/27082024.txt,Windows系统要求路径统一使用反斜杠,可通过Python内置模块自动生成适配系统的路径,避免手动拼接出错:

import os
upload_file = os.path.join(meta['base_dir'], 'tmp', meta['uuid'], f"{meta['clean_name']}.txt")

也可以直接替换路径中的正斜杠:

upload_file = upload_file.replace('/', '\\')

2. 解决geckodriver兼容性问题

你遇到的WinError 216是32位geckodriver在64位Windows上的兼容性故障,建议:

  • 重新下载与Firefox 129匹配的64位geckodriver(v0.35.0版本是对应Firefox 129的正确版本,若之前下载的包损坏,重新解压即可)
  • 将geckodriver.exe加入系统PATH,或在脚本中直接指定驱动路径:
from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'C:\your\path\to\geckodriver.exe')

3. 优化异常处理,终止无意义无限循环

当前代码捕获所有异常但无重试限制和间隔,容易陷入无效循环,建议修改为:

from selenium.common.exceptions import NoSuchElementException, ElementNotInteractableException
import time

max_retries = 5
retry_count = 0
while retry_count < max_retries:
    try:
        e = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
        # 用os.path生成合规路径
        import os
        upload_file = os.path.join(meta['base_dir'], 'tmp', meta['uuid'], f"{meta['clean_name']}.txt")
        print(e)
        print(upload_file)
        e.send_keys(upload_file)
        break
    except (NoSuchElementException, ElementNotInteractableException) as ex:
        print(f"上传失败,重试中: {ex}")
        retry_count += 1
        time.sleep(2)
    except Exception as ex:
        print(f"未知错误: {ex}")
        break
if retry_count >= max_retries:
    print("达到最大重试次数,上传失败")

4. 额外排查项

  • 确认目标文件存在且有读取权限:
import os
if not os.path.exists(upload_file):
    print(f"文件不存在: {upload_file}")
if not os.access(upload_file, os.R_OK):
    print(f"无文件读取权限: {upload_file}")
  • 非无头模式下,检查是否有弹窗、元素遮挡等情况导致send_keys无法生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:05:06