gpt4 book ai didi

python - 使用 Pillow + WebDriver 上传带有内存流的图像以进行输入?

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:26 25 4
gpt4 key购买 nike

我正在使用 Pillow 从 URL 获取图像,并创建一个流 (BytesIO/StringIO)。

r = requests.get("http://i.imgur.com/SH9lKxu.jpg")
stream = Image.open(BytesIO(r.content))

因为我想使用 <input type="file" /> 上传此图像使用 Selenium WebDriver。我可以这样做来上传文件:

self.driver.find_element_by_xpath("//input[@type='file']").send_keys("PATH_TO_IMAGE")

我想知道是否可以从流上传该图像而不必弄乱文件/文件路径...我试图避免文件系统读/写。并在内存中或使用临时文件进行同样的操作。我还想知道是否可以将该流编码为 Base64,然后上传并将字符串传递给您可以在上面看到的 send_keys 函数:$

PS:希望你喜欢这张图片:P

最佳答案

您似乎在这里问了多个问题。

<小时/>

首先,如何在不下载到文件的情况下转换 JPEG?您已经这样做了,所以我不知道您在这里问什么。

<小时/>

接下来,“并在内存中或使用临时文件进行同样的操作。”我不知道这意味着什么,但是您可以使用 stdlib 中的 tempfile 库使用临时文件来完成此操作,也可以在内存中执行此操作;两者都很简单。

<小时/>

接下来,您想了解如何使用请求进行流式上传。简单的方法可以做到这一点,如 Streaming Uploads 中所述。 ,就是“简单地为你的 body 提供一个类似文件的对象”。这可以是一个临时文件,但也可以很容易是一个 BytesIO。由于您已经在问题中使用了一个,我假设您知道如何做到这一点。

(顺便说一句,当请求已经为您提供了一种使用响应的方式时,我不确定为什么您要使用BytesIO(r.content)对象作为类似文件的对象,甚至可以通过按需流式传输来实现,而不是等到完整内容可用,但这与这里无关。)

如果您想使用 selenium 而不是 requests 上传它......那么您确实需要一个临时文件。 Selenium 的全部意义在于它为 Web 浏览器编写脚本。您不能仅在上传表单中在网络浏览器中输入一堆字节,您必须在文件系统上选择一个文件。因此,selenium 需要假装您在文件系统上选择了一个文件。对于 tempfile.NamedTemporaryFile 来说,这是一项完美的工作。

<小时/>

最后,“我也想知道该流是否可以编码为 Base64”。

当然可以。由于您只是在内存中转换图像,因此您可以使用例如 base64.b64encode 对其进行编码。或者,如果您愿意,您可以将 BytesIO 包装在 codecs 包装器中,以动态进行 Base-64 编码。但我不确定你为什么要在这里这样做。

关于python - 使用 Pillow + WebDriver 上传带有内存流的图像以进行输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27323103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com