从 URL 而不是本地文件上传 Selenium 文件

Selenium File upload from URL instead of local file

正在尝试通过 Selenium/ChromeDriver 上传带有 HTML 输入元素的文件。

如果文件是本地文件,一切正常。

但我需要从 URL 上传。在这种情况下,驱动程序会抛出错误。

如果我手动上传带有 chrome 的 URL(点击“Select 文件”并将 URL 粘贴为文件名并点击确定),上传的效果如下预期。

HTML:

<input type="file" name="file1">

C#代码:

var driver = new ChromeDriver();
driver.Navigate().GoToUrl("<URL HERE>");
var input = driver.FindElement(By.Name(name));
ele.SendKeys("C:\pic.png"); //works because local file exists
ele.SendKeys("https://wikipedia.org/static/favicon/wikipedia.ico"); //fails

异常: OpenQA.Selenium.WebDriverException: "无效参数:找不到文件:https://wikipedia.org/static/favicon/wikipedia.ico (会话信息:chrome=92.0.4515.131)“

我发现抛出异常是因为驱动程序 DefaultFileDetector 无法将其解析为文件。

所以我尝试实现自己的 FileDetector 并将其分配给驱动程序:

var allowsDetection = driver as IAllowsFileDetection;
if (allowsDetection != null)
{
   allowsDetection.FileDetector = new DummyFileDetector();
}

虚拟文件检测器:

class DummyFileDetector : IFileDetector
{

    public bool IsFile(string keySequence)
    {
        return true;
    }
}

但是DummyFileDetector.IsFile从来没有被调用过(似乎allowsDetection.FileDetector = new DummyFileDetector()没有改变驱动的FileDetector)

我不想先下载文件再上传(如果可能的话)。如前所述,在文件选择对话框中手动设置 URL 可以解决问题,但对于 Selenium 则不行。

有什么想法吗?

我以前从未使用过 C#,但我认为解决此问题的一个非常简单的方法是下载文件,重新上传,然后删除它。我相信你可以在 C# 中做到这一点。我知道在 selenium python 中做到这一点非常简单,但我认为 python 代码在这里不会有帮助 (lol)

我在这里和其他 Internet 资源上搜索了很多问题,发现使用 driver.SendKeys() 方法从外部 URL 上传文件的唯一方法是先将其下载到本地磁盘,然后然后用 driver.SendKeys()
上传