0

0

使用 Selenium 上传本地文件到网站的正确方法

聖光之護

聖光之護

发布时间:2025-07-10 19:16:01

|

846人浏览过

|

来源于php中文网

原创

使用 selenium 上传本地文件到网站的正确方法

本文档旨在指导开发者如何使用 Selenium WebDriver 在网页上上传本地文件。我们将通过一个实际示例,详细讲解如何定位文件上传元素,并使用 send_keys() 方法模拟文件上传操作。避免常见的 ElementNotInteractableException 错误,确保文件成功上传。

理解 ElementNotInteractableException

ElementNotInteractableException 错误通常发生在 Selenium 尝试与一个在当前状态下无法交互的元素进行交互时。这可能是因为元素被遮挡、被禁用,或者尚未完全加载。在文件上传的场景中,常见的原因是文件上传的 input 元素被隐藏或未启用。

解决方案:清晰的元素定位和显式等待

解决这个问题的关键在于:

  1. 准确的元素定位:使用合适的定位策略(如 ID、CLASS_NAME、XPATH 等)找到文件上传的 input 元素。
  2. 显式等待:使用 WebDriverWait 结合 expected_conditions,确保元素在执行 send_keys() 之前是可见且可点击的。
  3. 避免变量复用:不要在不同的等待条件中使用相同的变量,这可能导致逻辑错误。

示例代码

以下是一个使用 Chrome WebDriver 上传文件的示例代码,针对 https://www.freeformatter.com/convert-file-encoding.html 网站的文件上传功能:

手机在线人工冲值
手机在线人工冲值

说明:我不知道这个系统还能用到什么地方!他的运作方式是这样的,客户在其他地方比如掏宝购买了 你得卡,然后在你的网站进行冲值,你得有人登陆并看着后台,如果有人冲值,就会刷出记录,手工冲值完毕后,你得点击 [冲值完毕],客户的页面 就会返回 冲值信息!安装:上传所有文件,倒入(sql.txt)mysql数据库,使用myphpadminphplib 777phplib/sys.php 777phplib

下载
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化 Chrome WebDriver
driver = webdriver.Chrome()
driver.get("https://www.freeformatter.com/convert-file-encoding.html")

# 设置显式等待
wait = WebDriverWait(driver, 30)

# 确保文件上传元素存在并且可点击
wait.until(EC.presence_of_element_located((By.ID, "file")))
wait.until(EC.element_to_be_clickable((By.ID, "file")))

# 找到文件上传元素
file_field = driver.find_element(By.ID, "file")

# 使用 send_keys() 方法上传文件
# 请将 "file.xml" 替换为你的文件路径
file_field.send_keys("file.xml")

# 关闭浏览器
driver.quit()

代码解释:

  • webdriver.Chrome(): 初始化 Chrome WebDriver。
  • driver.get(...): 打开目标网页。
  • WebDriverWait(driver, 30): 创建一个显式等待对象,最大等待时间为 30 秒。
  • EC.presence_of_element_located((By.ID, "file")): 期望条件,检查 ID 为 "file" 的元素是否存在于 DOM 中。
  • EC.element_to_be_clickable((By.ID, "file")): 期望条件,检查 ID 为 "file" 的元素是否可见且可点击。
  • driver.find_element(By.ID, "file"): 找到 ID 为 "file" 的元素。
  • file_field.send_keys("file.xml"): 将本地文件路径发送到文件上传元素。 请务必替换 file.xml 为你的实际文件路径。
  • driver.quit(): 关闭浏览器

注意事项

  • 文件路径:send_keys() 方法需要的是文件的绝对路径或相对路径。确保路径正确,并且 Selenium 进程有权访问该文件。
  • 元素定位:使用开发者工具检查网页结构,选择最合适的元素定位方式。如果 ID 不可用,可以尝试 NAME、CLASS_NAME 或 XPATH。
  • 隐式等待 vs 显式等待:尽量使用显式等待,因为它更精确,可以避免不必要的等待时间。
  • 浏览器兼容性:不同的浏览器对文件上传的处理方式可能略有不同。建议在多个浏览器上进行测试。
  • 文件类型限制:确保上传的文件类型符合网站的要求。

总结

通过准确的元素定位、显式等待和正确的文件路径,可以有效地解决 Selenium 文件上传过程中遇到的 ElementNotInteractableException 错误。 本教程提供了一个清晰的示例代码和详细的注意事项,帮助开发者成功实现文件上传功能。 记住,耐心调试和理解错误信息是解决问题的关键。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

833

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

744

2023.11.06

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1900

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2091

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1067

2024.11.28

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

3338

2024.08.14

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.11.24

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2083

2024.08.16

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

0

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

TypeScript全面解读课程
TypeScript全面解读课程

共26课时 | 5.1万人学习

前端工程化(ES6模块化和webpack打包)
前端工程化(ES6模块化和webpack打包)

共24课时 | 5.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号