Selenium 大佬们,我想知道 selenium 遇到上传文件选择的窗口如何让 python 实现在窗口中选择文件的功能。有大佬可以指导下么?

autogG · 2023年03月21日 · 最后由 autogG 回复于 2023年03月23日 · 7366 次阅读

上传文件的窗口:

我如何使用 python 代码来进行文件选择?

共收到 17 条回复 时间 点赞
autogG 关闭了讨论 03月24日 09:38
七街老酒 回复

我解决了,就是使用 autoit 编译一个 exe 文件出来,当 UI 自动化打开文件上传窗口后直接执行脚本,他会完成选择文件的操作。太牛了,谢谢你,因为有你,温暖了四季。😊

跟着网上的文章抄出来的,忘记是什么文章了

我 win32gui 模块上传的,这个我封装的函数,原理是什么我已忘记了,反正能用就行

大拇指 回复

七街老酒 回复

非常感谢,今天就研究下。

DTung 回复

感谢

当使用 Selenium 时,可以通过模拟浏览器的行为来上传文件,具体的步骤如下:

1.找到上传文件的 input 标签并点击它。可以使用 Selenium 的 find_element_by_*() 方法来找到该标签,然后使用 click() 方法来模拟点击它。

2.切换到文件选择窗口。点击上传文件的 input 标签后,通常会弹出一个文件选择窗口,此时需要切换到该窗口,以便后续操作。

3.通过 AutoIT 或 pywinauto 等工具来选择文件。由于 Selenium 不能直接操作本地文件系统,因此需要借助其他工具来实现在文件选择窗口中选择文件的功能。AutoIT 和 pywinauto 是两个常用的工具,它们可以模拟键盘或鼠标操作,从而实现在文件选择窗口中选择文件的功能。

4.上传文件。选择文件后,需要将文件的路径填入上传文件的 input 标签中,然后提交表单,即可完成文件上传。

下面是一个示例代码,演示了如何使用 AutoIT 来选择文件并上传:
from selenium import webdriver
import os

启动浏览器

driver = webdriver.Chrome()

打开上传页面

driver.get("http://xxx/upload")

找到上传文件的 input 标签并点击它

upload_input = driver.find_element_by_xpath("//input[@type='file']")
upload_input.click()

切换到文件选择窗口

autoit = 'D:\autoit\AutoIt3.exe'
upload_window_title = '打开'
os.system('{} "{}"'.format(autoit, 'upload_file.exe'))
# 根据上传窗口的标题切换到该窗口
driver.switch_to.window(upload_window_title)

选择文件

file_path = 'C:\test\test.txt'
os.system('{} "{}" "{}"'.format(autoit, 'choose_file.exe', file_path))

将文件的路径填入上传文件的 input 标签中

upload_input.send_keys(file_path)

提交表单

submit_button = driver.find_element_by_xpath("//button[@type='submit']")
submit_button.click()

关闭浏览器

driver.quit()

需要注意的是,上述代码需要借助 AutoIT 工具来选择文件,因此需要提前安装 AutoIT 并编写好选择文件的脚本。另外,上传文件的 input 标签的位置和名称可能会因网站而异,需要根据实际情况进行调整。

大拇指 回复

先看这种比较靠谱

仅楼主可见

Windows 下可以用 pywin32 库实现, 用了两年了感觉挺稳定的

autoit 可以用 不过他只能在 windows 环境运行 无头模式也不能用 限制比较大 所以实际场景中作用有限

能用 js 注入直接从原生组件上传最好,如果用楼上说的包括其他第三方库,那在想用无头浏览器模式跑脚本的话就用不了了

看看上传的标签是啥,要是 input 的话,直接定位到这里,用输入方法就可以上传了。

一般可以用 AutoIt 做,但是个人觉得非常鸡肋

DTung 回复

给你贴一个我很久之前做的笔记,现在可能有变化了

先用 autoit 实现文件上传的脚本,测试到这步的时候调用脚本,网上很多教程

新打开的是原生页面了,需要另外一个原生的 driver 了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册