1

我需要通过外部 url 上传图片,我发现的示例仅显示了如何上传本地存储的图片。这是我尝试过的,但没有奏效。

driver.find_element_by_id("attachFile_nPaintUploadAll").send_keys("http://bdfjade.com/data/out/89/5941587-natural-image-download.jpg")

错误信息:

selenium.common.exceptions.InvalidArgumentException: Message: File not found: http://bdfjade.com/data/out/89/5941587-natural-image-download.jpg
4

2 回答 2

2

尝试先获取文件,然后上传:

import urllib

urllib.urlretrieve("http://bdfjade.com/data/out/89/5941587-natural-image-download.jpg", "5941587-natural-image-download.jpg")
driver.find_element_by_id("attachFile_nPaintUploadAll").send_keys("5941587-natural-image-download.jpg")

要在 Python 3.X 中检索文件,您可以尝试

urllib.request.urlretrieve("http://bdfjade.com/data/out/89/5941587-natural-image-download.jpg", "5941587-natural-image-download.jpg")

或者

import requests

with open("5941587-natural-image-download.jpg", "wb") as f:
    f.write(requests.get("http://bdfjade.com/data/out/89/5941587-natural-image-download.jpg").content)

您可以删除该文件,然后

import os

os.remove("5941587-natural-image-download.jpg")
于 2018-07-20T05:33:51.930 回答
1

发送键(*值)

根据send_keys()模拟输入元素的文档。

  • send_keys(*value)
  • 参数:

    value - A string for typing. For setting file inputs, this could be a local file path.
    
  • 使用它来设置文件输入:

    driver.find_element_by_id("attachFile_nPaintUploadAll").send_keys("path/to/profilepic.gif")
    

但是根据您的代码试验,因为您将url作为字符串传递,因此您会看到错误:

selenium.common.exceptions.InvalidArgumentException: Message: File not found: http://bdfjade.com/data/out/89/5941587-natural-image-download.jpg

解决方案

如果您的用是使用Selenium进行文件上传,则必须在本地系统中下载文件并将文件的绝对路径作为send_keys()方法中的参数传递。


替代方案(urllib.request.urlretrieve)

作为替代方案,您还可以使用Python 3.xurlretrieve中的方法,如下所示:

urllib.request.urlretrieve(url,文件名=无,reporthook=无,数据=无)

  • 将由 URL 表示的网络对象复制到本地文件。如果 URL 指向本地文件,除非提供文件名,否则不会复制对象。返回一个元组 (filename, headers),其中 filename 是可以在其中找到对象的本地文件名,而 headers 是返回的对象的 info() 方法urlopen()(对于远程对象)。例外情况与 for 相同urlopen()

  • 代码块:

    import urllib.request
    
    urllib.urlretrieve("http://andrew.com/selfie.jpg", "andrew_selfie.jpg")
    driver.find_element_by_id("attachFile_nPaintUploadAll").send_keys("andrew_selfie.jpg")
    
于 2018-07-20T15:40:05.247 回答