如何使用 Selenium 控制浏览器文件上传对话框?

问题描述 投票:0回答:2

我正在开发一个使用 Selenium 和 ChromeDriver 自动将文件提交到网站的工具。

通常使用 Selenium 上传文件很容易,因为您只需将信息提供给

<input type="file">
元素即可。但是,在这种情况下,我正在使用一个具有自定义文件上传按钮的网站,页面上的任何位置都没有
<input type="file">
,并且在文件上传对话框中选择文件后立即进行上传(如下所示):

因此,我唯一的选择是让 Selenium 单击自定义上传按钮并控制文件对话框。但我不知道该怎么做。如何使用 Selenium 控制操作系统/浏览器文件上传对话框?

我已经看到这个SO问题,这似乎不适用于我,因为他们在页面上有

<input type="file">
并试图触发上传对话框,但我没有该元素,我没有问题触发对话框,我的问题是在对话框打开后控制它。我还阅读了有关上传多个文件的几个问题,但没有一个问题可以帮助我的情况。

selenium file-upload upload selenium-chromedriver
2个回答
0
投票

我找到了这个解决方案,我希望这也适合你:
您可以使用 JavaScript 设置输入字段的值。考虑到字段的 id 为

fileName
,以下示例将设置文件的输入值
C:\temp\file.txt
:

String script = "document.getElementById('fileName').value='" + "C:\\\\temp\\\\file.txt" + "';";
((IJavaScriptExecutor)driver).ExecuteScript(script);

在此示例中,

driver
是您的 WebDriver 实例。

请注意,对于类似 Windows 的路径,您必须使用四个反斜杠 (

\
),因为您需要将双反斜杠传递给 JavaScript,因此您必须使用两个附加斜杠来转义这两个反斜杠。另一种选择是使用正斜杠(例如
"C:/tmp/file.txt"
),这也应该有效。
感谢作者


0
投票

尽管我使用 rust Fantoccini 和 Edge Webdriver,尝试将文件上传到共享点,但我也遇到了同样的情况。 只有一个“上传”按钮可以触发操作系统上传对话框。 然而我发现点击“上传”按钮后,一个不可见的输入元素被添加到 dom 中,该元素可以由网络驱动程序发送_key。 这样我就成功上传了文件,尽管我不知道如何关闭操作系统对话框。

在点击上传按钮之前 enter image description here

点击上传按钮后 enter image description here

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.