有没有办法使用 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
嗯,当然还有其他选择,比如使用 AutoIt
或 Sikuli
,但它们实际上要么不可靠,要么复杂、缓慢、依赖于平台或浏览器(或全部) .
这是一个示例工作代码:
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")
产生:
我可以使用 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
嗯,当然还有其他选择,比如使用 AutoIt
或 Sikuli
,但它们实际上要么不可靠,要么复杂、缓慢、依赖于平台或浏览器(或全部) .
这是一个示例工作代码:
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")
产生: