首页 > 解决方案 > 在 Selenium 中获取文件选择器对话框的 ID 或其他句柄

问题描述

SO上有很多关于如何在Selenium中使用文件选择器的帖子,但他们似乎都认为你引用了代表文件选择器对话框的元素,通常是因为你知道元素的ID。你怎么找到这个?我使用“检查元素”的常规方法不起作用,因为无法在打开文件选择器对话框的情况下打开检查元素。

有问题的页面是 images.bing.com。当您单击相机(“使用图像搜索”)然后单击浏览时,会出现文件选择器。

这是我尝试过的。我编写了这个函数来获取所有可见元素的列表,以便在单击链接以调出文件选择器后查看哪些元素可见,但之前不可见。这个过程识别了三个这样的元素,但是当我运行它们时它们都没有 IDelem.get_attribute("id")elem.get_property("id").

def get_visible_elements(self):
    result = set()
    for elem in self.driver.find_elements_by_css_selector("*"):
        try:
            if elem.is_displayed():
                result.add(elem)
        except StaleElementReferenceException:
            pass
    return result

标签: pythonseleniumselenium-webdriver

解决方案


按照本 Selenium 教程 中给出的步骤,要上传文件,您不是在寻找对话框元素本身,而是在寻找<input type="file">生成它的 HTML 元素。

要找到它,通常您可以检查打开文件选择对话框的按钮。如果没有,请检查它附近的东西并查看附近的 HTML。

在这种情况下,对于 images.bing.com,我检查了显示 的按钮"Drag an image here or browse",并在附近找到了应该工作的元素:

<input id="sb_fileinput" class="fileinput" type="file" accept="image/gif, image/jpeg, image/png, image/webp">

推荐阅读