我可以使用Selenium将文件上传到远程服务器,但即使上传文件,文件选择器对话框仍然存在。 The Selenium FAQ notes that,"您无法直接与原生操作系统文件浏览器对话框进行交互,但我们会做一些魔术,以便......"考虑到使用"魔法"在这里,我得到的行为在边缘有点粗糙并不奇怪。但似乎有解决方法。从this answer获取我的提示我有以下代码:
import contextlib, time
from selenium import webdriver
import selenium.webdriver.common.action_chains as action_chains
with contextlib.closing(webdriver.Chrome()) as driver:
driver.get("http://www.bing.com/images")
driver.find_element_by_id("sbi_t").click()
driver.find_element_by_id("sbi_file").click()
driver.find_element_by_id("sbi_file_upload").send_keys("//Loch Ness Monster.jpg")
print driver.current_url # Still `http://www.bing.com/images` :(
file_upload = driver.find_element_by_id("sbi_file_upload")
action_chains.ActionChains(driver).click(file_upload).perform() # https://stackoverflow.com/a/16864547/2829764
但最后,文件上传窗口仍然存在。我怀疑我需要一个略有不同的解决方法,因为我在Mac上。有人可以帮忙吗?
答案 0 :(得分:3)
根本不要点击上传按钮。
通过send_keys()
设置文件名并单击“开始”(已测试并适用于我):
element = driver.find_element_by_id("sbi_file_upload")
element.send_keys('/Path/to/file.jpeg')
driver.find_element_by_css_selector('div#sbi_sb_ipt span[name=go]').click()