【问题标题】:Finding async scripts using "//script[contains (@src, 'blah')"使用 "//script[contains (@src, 'blah')" 查找异步脚本
【发布时间】:2015-07-13 04:47:13
【问题描述】:

所以有几篇关于如何通过xpath查询dom来查找元素的帖子。我找到了一个帖子,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 中开发用户脚本,并且必须将脚本保留为异步,否则我将删除异步属性。

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

谢谢!

【问题讨论】:

    标签: javascript google-chrome asynchronous xpath


    【解决方案1】:

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

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

    【讨论】:

    • 你打败了我 :) 虽然这似乎适用于我的简单测试页面,但它在生产中返回 null。奇怪的。还在戳。
    • 我想我找到了问题所在。被引用的脚本是一个coffeescript,而不是核心js。因此,您的解决方案适用于所提出的问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多