【发布时间】:2019-01-17 14:18:31
【问题描述】:
在 SO 上有很多关于如何在 Selenium 中使用文件选择器的帖子,但他们似乎都认为您引用了代表文件选择器对话框的元素,通常是因为您知道元素的 ID。你怎么找到这个?我使用“检查元素”的常规方法不起作用,因为无法在打开文件选择器对话框的情况下打开检查元素。
相关页面是 images.bing.com。当您单击相机(“使用图像搜索”)然后单击浏览时,会出现文件选择器。
这是我尝试过的。我编写了这个函数来获取所有可见元素的列表,以便在单击链接以调出文件选择器后查看哪些元素是可见的,而不是之前。这个过程识别了三个这样的元素,但是当我运行 elem.get_attribute("id") 或 elem.get_property("id") 时,它们都没有 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
【问题讨论】:
-
你得到了什么结果?
-
文件选择器对话框是原生元素,Selenium无法与之交互
-
@MosheSlavin,
get_visible_elements返回 788 个元素,其中 3 个在我单击“浏览”之前不可见。这 3 个都没有 ID,我不确定要在它们上运行哪些其他查询。 -
@DebanjanB,我希望不是这样,但可能是这样。 StackOverflow 上还有其他答案,人们可以使用
send_keys与这些对话框进行交互。 -
@kuzzooroo
send_keys只能在 type 属性设置为 file 的相关<input>标签上调用
标签: python selenium selenium-webdriver