使用“//script[contains (@src, 'blah')”查找异步脚本

Finding async scripts using "//script[contains (@src, 'blah')"

所以有几个 post 是关于如何通过 xpath 查询 dom 来查找元素的。我找到了一个 post、Is there a way to get element by XPath using JavaScript in Selenium WebDriver?,基本可以满足我的需求。我的问题源于我试图定位的元素是一个脚本,而该脚本需要异步加载。这似乎打破了使用

找到它的路径
var path = "//script[contains (@src, 'locationOfScript')]";

我认为根本原因可能是 Chrome 将异步脚本加载延迟到页面完成之后:Chrome delays load of script with async attribute.

我正在 Chrome 中开发用户脚本,并且必须将脚本保留为异步,否则我将删除异步属性。

有什么方法可以在文档中查询在完成其他所有操作后才会加载的脚本?

谢谢!

async 属性将导致脚本不阻塞,因此您无法确定它何时加载。但是,您可以确定 DOM 何时完成加载并使用以下代码:

document.onreadystatechange = function () {
    if (document.readyState === "complete") {
        var path = "//script[@src='locationOfScript']";
        // etc...
    }
}