有没有办法使用Python Selenium在弹出窗口中选择图片?

时间:2016-01-11 03:32:20

标签: python-2.7 user-interface selenium popup

我可以使用Selenium完成所有基本的Web操作,但我想执行以下操作:

单击“选择图像”按钮,然后出现一个弹出窗口,然后我想在#1和#2中输入一些文本,然后单击#3。

enter image description here

版本:我试过的是在kijiji网站上,点击选择图片按钮后,我选择了两张图片(见图片),然后我向后找到这些图片夹并找到Xpath,然后我添加了以下代码(下面),但它似乎没有做任何事情,它给了我一些stacktrace消息,没有错误。

Yii::t('kvgrid', 'Reset Grid')

输出:

imageLoc = "C:\AbsolutePath\IMG_20150620_184908_Edited_sm.jpg"
imageHolderXpath = '(//div[@class="image"])[1]'
imageHolderElement = WebDriverWait(driver, 5).until(lambda driver: driver.find_element_by_xpath(imageHolderXpath))
imageHolderElement.send_keys(imageLoc)

enter image description here

1 个答案:

答案 0 :(得分:1)

无法通过selenium,上传文件对话框超出了selenium的覆盖范围。

无论如何,你应该首先避免打开这个弹出窗口。此问题的常见解决方案是找到相应的文件input元素,并将绝对路径发送到要上载的文件。样品:

element = driver.find_element_by_css_selector("input[type=file]")
element.send_keys("/absolute/path/to/a/file")

另见相关主题:

嗯,当然还有其他选项,例如使用AutoItSikuli,但它们实际上要么不可靠,要么复杂,慢,平台或浏览器相关(或全部)。< / p>

以下是一个示例工作代码:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.kijiji.ca/p-post-ad.html?categoryId=36")

driver.find_element_by_link_text("British Columbia").click()
driver.find_element_by_link_text("Cariboo Area").click()
driver.find_element_by_link_text("100 Mile House").click()
driver.find_element_by_id("LocUpdate").click()

driver.find_element_by_css_selector("#ImageUpload [type=file]").send_keys("/Users/user/Downloads/test.jpg")

产生:

enter image description here