python - 在 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
解决方案
按照本 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">
推荐阅读
- c++ - 调用接收派生类列表的方法不能在 C++ 中编译
- python - 如何每 n 秒运行一次函数但不中断其他代码?也许在后台运行?
- docker - docker - 如何禁用分离键,--detach-keys="" 不起作用
- python - python中的2dof质量弹簧阻尼系统,odeint错误
- postgresql - 在 HikariCP 中闲置一段时间后断开所有连接
- owin - 如何向 log4net 上下文添加一些按请求 (OWIN) 值?
- ios - iOS - UICollectionView 动态高度
- java - Spring data mongo db group by _class
- javascript - 无法在 javascript (calc) 中应用样式 maxHeight
- sql - 使用 tableA 中的当前数据选择 tableB 中的下一个数据顺序