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

