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

