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

Tkinter选文件路径传入Selenium send_keys提示文件不存在求助

问题原因
  • 你手动给文件路径前后添加了多余的双引号,send_keys 会将双引号识别为路径的一部分,最终查找的是带双引号的错误路径,导致文件找不到报错
  • 手动替换路径分隔符的操作属于多余操作,filedialog.askopenfilename 返回的路径格式可直接被Selenium正常识别,不需要额外转换
修复方案

删除路径处理的多余逻辑,直接使用文件选择器返回的原始路径即可,修改后的代码如下:

filename = filedialog.askopenfilename(initialdir = "/", title = "Select a File",filetypes = (("jpg",".jpg"),("png",".png"),("jpeg",".jpeg")))
# 直接使用原始路径,不要加引号、不要替换分隔符
filepath = filename

# 可选:新增路径存在校验,提前定位问题
import os
if not os.path.exists(filepath):
    raise FileNotFoundError(f"所选文件不存在:{filepath}")

options = webdriver.FirefoxOptions()
options.headless = True
browser = webdriver.Firefox(executable_path=r"geckodriver.exe", options=options)
browser.get('url')
# 确保此处定位的元素是type="file"的input标签
browser.find_element_by_xpath('/html/body/center/form/table/tbody/tr[3]/td[1]/input[2]').send_keys(filepath)

WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="b_upload"]'))).click()
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="b_getsmiles"]'))).click()
smiles = browser.find_element_by_xpath('/html/body/center/form/table/tbody/tr[3]/td[2]/input[1]').get_property('value')
print(smiles)
browser.close()
其他优化建议
  • WebDriverWait的超时单位为秒,你原代码中设置的10000秒超时无实际意义,常规场景设置10~30秒即可
  • 尽量使用更稳定的元素定位方式,避免使用完整层级的绝对xpath,页面结构变动时很容易失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:24:01