javascript - document.querySelectorAll 的结果不一致
问题描述
我打开了 Chrome 开发控制台窗格并评估了这个表达式:
Array.from(document.querySelectorAll("div.fc-event-inner")).filter(e => {
let r = e.getBoundingClientRect();
return (r.left < 1354) && (r.top < 531) && (r.right > 1167) && (r.bottom > 487);})
它返回一个空数组。
然后我使用开发窗格中的“在页面中选择一个元素以检查它”按钮单击一个元素并在元素列表中查看我的元素展开。然后我重新评估了相同的表达式,它返回了一个包含 2 个元素的数组,即使页面上没有任何内容移动。为什么我得到不一致的结果?
顺便说一句,我可能应该简化这个问题。我认为当我简单地评估时也是如此
document.querySelectorAll("div.fc-event-inner")
编辑:我试图在运行我的目标 querySelectorAll 之前评估每个 IFrame 的内容。当我评估这个表达式时,一切正常,但我仍然没有得到任何更新的结果:
document.querySelectorAll("iframe")[0].contentWindow.document.childElementCount
但是当我尝试评估这种情况时:
document.querySelectorAll("iframe")[1].contentWindow
Chrome 有一个相当严重的错误(STATUS_BREAKPOINT):
我可以使用 eval 来规避这个错误,但我发现 iframe 的内容是空白的:
eval("document.querySelectorAll(\"iframe\")[1].contentWindow.document.body.outerHTML")
结果:“<body></body>”
解决方案
访问 IFrame 中的内容带来了独特的挑战。要从 JavaScript 访问内容,首先需要访问正确的 IFrame。例如:
eval("document.querySelector(\"iframe\").contentDocument.querySelector(\"iframe\").contentWindow.document.querySelectorAll(\".fc-event-inner\")")
有eval
必要避免在您键入时一旦开发工具窗格尝试评估和突出显示内框,就会发生 Chrome 错误。eval
防止实时评估和突出显示。
如果使用 Selenium,这似乎对我有用:
var f = switchTo.frame(0)
var banners = f.findElements(By.cssSelector("div.fc-event-inner"))
Utilities.actionLog("Banners: " + banners.size)
推荐阅读
- flutter - 如何将单个小部件与多个提供程序一起使用?
- python - Bokeh 未渲染,卡在 Loading BokehJS
- python - 如何确保子进程 Popen 在 Windows 中以优化的方式将创建的实例分布在多个 CPU 内核上?
- python-3.x - pyxl 中有没有办法保留现有的宏?
- javascript - 当javascript中有未定义的值时无法解析json
- performance - 使用 elasticsearch 优化服务器操作:解决低磁盘水印
- r - 如何为每个变量创建一个具有相同分母的条形图?
- python - 使用正则表达式在文本python中使用缩写的第一个字母匹配相邻的单词
- copy - 如何从 ADF 复制数据活动中获取给定列的最大值
- reactjs - 如何在反应中使用 videojs-airplay 插件?