python - Selenium 文件上传使文件选择器窗口保持打开状态(OS/X 和 Python)

标签 python macos selenium file-upload selenium-webdriver

我可以使用 Selenium 将文件上传到远程服务器,但即使文件上传后,文件选择器对话框仍然存在。 The Selenium FAQ notes that ,“您无法直接与 native 操作系统文件浏览器对话框交互,但我们做了一些魔法,以便......”考虑到这里使用“魔法”,我得到的行为有点粗糙也就不足为奇了边缘。但似乎有解决方法。从 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。有人可以帮忙吗?

最佳答案

根本不要点击上传按钮。

通过send_keys()设置文件名,然后单击“Go”(经过测试并且适用于我):

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

关于python - Selenium 文件上传使文件选择器窗口保持打开状态(OS/X 和 Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28799333/

相关文章:

python - 使用递归从嵌套列表中获取绝对值

python - 如何解析多个子页面、合并/追加并向上传递到父级?

c - struct sockaddr.sa_data 似乎太小

macos - 在 Mac OS X 中忽略 xargs 的空结果

swift - Xcode 添加自定义目录,不显示在 TreeView 中

java - 如何使用命令提示符运行 testng.xml

python - 如何使用 python selenium 将文本添加到页面?

python - 如何在 python 中使用 selenium 从 RadioButtons 中进行选择?

Python TA-lib安装错误,如何解决?

python - 使用 sympy.diffgeom.CoordSystem 连接两个坐标系