抓取我们的网站以检查 Javascript 错误

Scraping our site to check for Javascript errors

我在这里有点绝望。 几天来,我一直在尝试创建一个网络抓取工具,它可以浏览我们的网站并检查 Java 脚本错误。

最大的问题是我只知道 Java 而且 GhostDriver 似乎不再维护了。 Ghostdriver 的那个人指的是 JbrowserDriver。 然而,JBrowserDriver 没有从控制台收集 Java 脚本错误的选项。

然后我尝试了 HTMLUnit,这是一种急于抛出错误的方法,与 javascript 无关。于是折腾了半天,就在HtmlUnit上认输了。

我可以恢复到普通的旧 WebDriver,但那样会涉及太多样板文件。

你们有什么建议吗?

您可以将一些 javascript 注入每个 window 的头部部分,以将所有错误记录到隐藏的 div 中。然后 Selenium 可以从此 div 获取文本并将其解析为页面上发生的所有错误的报告。

例如,给定以下页面布局:

<html>
    <head>
        <script>
            window.onerror = function(e) {
                document.getElementById("hidden-selenium-log").innerText += e.toString() + ";";
            }
        </script>
    </head>
    <body>

        <div id="hidden-selenium-log" style="display: none;">
        </div>

        <div id="broken-button" onclick="unknownFunction()">broken</div>

    </body>
</html>

head 标记中的脚本会将所有 javascript 错误写入 div hidden-selenium-log。单击 div broken-button 将触发错误事件处理程序并将其记录到隐藏的 selenium 日志中。

与页面交互后,您可以做一些简单的事情,例如:

Driver.FindElement(By.Id("hidden-selenium-log")).text.split(";");

这将获取隐藏的 selenium 日志中的文本,然后用分号分隔它,分号是我在记录每个错误后附加的字符。

默认禁用 javascript 的记录。您可以通过设置生成器启用它。

Settings settings = Settings.builder()
        .logJavascript(true)
        .build();
JBrowserDriver jBrowserDriver = new JBrowserDriver(settings);

jBrowserDriver.get("http://example.com");

Logs logs = jBrowserDriver.manage().logs();
LogEntries logEntries = logs.get("javascript");
logEntries.forEach(System.out::println);