Python 在Selenium上上载图像/文件

Python 在Selenium上上载图像/文件,python,python-2.7,selenium,Python,Python 2.7,Selenium,我有点纠结于如何越过这个障碍。我正在尝试为Kijiji制作一个reposter,我被困在Mac上时如何处理文件上传。我试着去做 driver.find_element_by_id('ImageUploadButton').send_keys(image) 但这似乎没有任何作用,我相信这可能是因为kijiji的特殊文件上传,但我不知道如何克服这个障碍 以前有人这样做过吗 “查看源代码”页面上的代码: 至少添加一张照片。使用“更多”显示不同的角度和细节 拖放 拖放可更改图片的顺序 通过上传图像获

我有点纠结于如何越过这个障碍。我正在尝试为Kijiji制作一个reposter,我被困在Mac上时如何处理文件上传。我试着去做

driver.find_element_by_id('ImageUploadButton').send_keys(image)
但这似乎没有任何作用,我相信这可能是因为kijiji的特殊文件上传,但我不知道如何克服这个障碍

以前有人这样做过吗

“查看源代码”页面上的代码:


至少添加一张照片。使用“更多”显示不同的角度和细节

拖放 拖放可更改图片的顺序

通过上传图像获得至少两倍的回复数 您最多可以上传10张照片,宽度或高度至少为300px(我们建议至少为1000px)

选择图像
您需要针对“文件”
输入
元素,而不是按钮:

image_input = driver.find_element_by_id("FileUploadInput")
现在,问题是,这个元素是隐藏的,发送密钥将无法正常工作。要解决此问题,需要首先使元素可见:

我用c#编写了我的代码,但语言格式可以更改为工作。对于kijiji图像发布,我必须使用以下内容:

js.ExecuteScript("arguments[0].setAttribute('style', arguments[1])", driver.FindElement(By.XPath("//input[@type='file']")), "0");
driver.FindElement(By.XPath("//input[@type='file']")).SendKeys("path of file and filename");

注意:对每个要上传的图像重复最后一行。

为文件输入元素提供
HTML
code这里是它的屏幕截图。我很确定您不能将文本发送到类型为
按钮
的元素。检查页面中的元素

driver.execute_script("arguments[0].type = 'file';", image_input)
image_input.send_keys(image)
js.ExecuteScript("arguments[0].setAttribute('style', arguments[1])", driver.FindElement(By.XPath("//input[@type='file']")), "0");
driver.FindElement(By.XPath("//input[@type='file']")).SendKeys("path of file and filename");