我可以使用Selenium完成所有基本的Web操作,但我想执行以下操作:
单击“选择图像”按钮,然后出现一个弹出窗口,然后我想在#1和#2中输入一些文本,然后单击#3。
版本:我试过的是在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)
答案 0 :(得分:1)
无法通过selenium
,上传文件对话框超出了selenium的覆盖范围。
无论如何,你应该首先避免打开这个弹出窗口。此问题的常见解决方案是找到相应的文件input
元素,并将绝对路径发送到要上载的文件。样品:
element = driver.find_element_by_css_selector("input[type=file]")
element.send_keys("/absolute/path/to/a/file")
另见相关主题:
嗯,当然还有其他选项,例如使用AutoIt
或Sikuli
,但它们实际上要么不可靠,要么复杂,慢,平台或浏览器相关(或全部)。< / 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")
产生: