有没有办法使用 Python Selenium 在弹出窗口中显示 select 图片?

Is there a way to select pictures in a pop-up using Python Selenium?

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

点击一个"select image"按钮,然后弹出一个窗口,然后我想在#1和#2中输入一些文字,然后点击#3。

版本:我在kijiji网站上试过,点击select图片按钮后,我select两张图片(见图),然后我向后定位这些图片持有者并找到Xpath,然后我添加了以下代码(下方),但它似乎没有做任何事情,它给了我一些堆栈跟踪消息并且没有错误。

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)

输出:

Message: 
Stacktrace:
    at FirefoxDriver.prototype.findElementInternal_ (file:///c:/users/kubik/appdata/local/temp/tmp_sthxl/extensions/fxdriver@googlecode.com/components/driver-component.js:10659)
    at FirefoxDriver.prototype.findElement (file:///c:/users/kubik/appdata/local/temp/tmp_sthxl/extensions/fxdriver@googlecode.com/components/driver-component.js:10668)
    at DelayedCommand.prototype.executeInternal_/h (file:///c:/users/kubik/appdata/local/temp/tmp_sthxl/extensions/fxdriver@googlecode.com/components/command-processor.js:12534)
    at DelayedCommand.prototype.executeInternal_ (file:///c:/users/kubik/appdata/local/temp/tmp_sthxl/extensions/fxdriver@googlecode.com/components/command-processor.js:12539)
    at DelayedCommand.prototype.execute/< (file:///c:/users/kubik/appdata/local/temp/tmp_sthxl/extensions/fxdriver@googlecode.com/components/command-processor.js:12481)
[Finished in 30.3s]

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

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

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

另请参阅相关主题:

  • How to upload file ( picture ) with selenium, python
  • selenium webdriver upload file

嗯,当然还有其他选择,比如使用 AutoItSikuli,但它们实际上要么不可靠,要么复杂、缓慢、依赖于平台或浏览器(或全部) .


这是一个示例工作代码:

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")

产生: