【发布时间】:2023-03-06 17:32:01
【问题描述】:
我正在尝试使用 CasperJS 抓取网站,但 casper.waitForSelector() 函数总是超时,这意味着它永远找不到我需要的给定元素。
然后我在谷歌浏览器中做了这些步骤:
- 打开网页和 Chrome DevTools 控制台。
- 等待页面上的元素出现在我的眼前。
- 在控制台中输入:
document.querySelector(".dropdown-menu")。 - Chrome 提供
null(元素不存在)。
但是,当我切换到 Elements (DevTools),然后在 Inspect Element Mode(或其子项之一)中单击所需的元素时,Chrome 会使用相同的 document.querySelector(".dropdown-menu") 命令在控制台中返回该元素。
我怀疑该页面包含无效的 HTML 代码(未闭合的标签)。
当我在检查元素模式下单击元素时,Chrome 会修复 HTML DOM,这意味着 JavaScript 现在会按预期返回元素。
如果这是真的,我可以在 CasperJS 中做些什么来触发相同的 DOM 修复事件吗?
如果这不是真的,那可能是什么?
【问题讨论】:
-
您能否发布相关页面,以便我们可以使用minimal reproducible example?
-
恐怕我做不到。该网站是私人网站,需要登录。如果不是这种情况,我很乐意发布它。
-
如果您无法发布该网站,是否可以复制重现该问题的 HTML?有点难以解决问题而无法看到问题出在哪里
-
浏览器确实会修复无效的 HTML,但它们会在页面加载时进行,而不是在您打开“元素”选项卡时进行。
-
也许您应该使用 HTML 验证器来尝试找出结构中的问题。
标签: javascript google-chrome phantomjs casperjs