You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium获取script标签src属性时仅返回完整URL,无法捕获相对路径URL的解决方法

Selenium获取script标签src属性时仅返回完整URL,无法捕获相对路径URL的解决方法

我完全懂你的困扰——你想抓取HTML源码里原本的相对路径src(比如/cdn/script.js),但用Selenium的get_attribute("src")拿到的总是浏览器解析后的完整URL,导致代码里判断相对路径的逻辑根本触发不了,对吧?

问题根源

Selenium的get_attribute("src")方法默认会返回浏览器解析后的绝对URL,而不是HTML里写的原始属性值。举个例子:哪怕HTML里的script标签写的是<script src="/cdn/script.js"></script>,用这个方法拿到的也是https://example.com/cdn/script.js,自然匹配不上你代码里的startswith("/")判断。

解决方法:获取原始属性值

要拿到HTML里的原始路径,我们可以直接调用浏览器的JavaScript来获取属性的原始值,绕过Selenium的自动解析。具体来说,用execute_script执行JS代码,获取元素的getAttributeNode("src").value:

修改后的代码示例

def GetScriptArray():
    ScriptArray = []  # 建议在函数内初始化数组,避免全局变量冲突
    ScriptElements = Driver.find_elements(By.TAG_NAME, 'script')
    for x, Script in enumerate(ScriptElements, start=1):
        # 通过JS获取原始src属性值,不经过Selenium的URL解析
        ScriptSource = Driver.execute_script('return arguments[0].getAttributeNode("src")?.value;', Script)
        ScriptSourceAlt = Driver.execute_script('return arguments[0].getAttributeNode("data-original-src")?.value;', Script)
        
        if ScriptSource:
            if ScriptSource.startswith("http"):
                ScriptArray.append(ScriptSource)
            elif ScriptSource.startswith("//"):
                print(f"SPECIAL 1 : {ScriptSource}")
                ScriptArray.append(ScriptSource)  # 按需决定是否加入数组
            elif ScriptSource.startswith("/"):
                print(f"SPECIAL 2 : {ScriptSource}")
                ScriptArray.append(ScriptSource)  # 把相对路径加入结果数组
        else:
            print(f"SCRIPT NUM {x} HAS NO SRC")
    return ScriptArray  # 返回收集到的所有src

关键修改点说明

  1. 替换属性获取方式:用execute_script调用JS的getAttributeNode("src").value,直接拿到HTML里的原始路径,不管是绝对路径、相对路径还是//开头的协议相对路径。
  2. 完善数组收集逻辑:原来的代码只收集了http开头的URL,现在可以根据需求把相对路径和//开头的路径也加入数组。
  3. 代码优化:用f-string简化打印语句,函数内初始化数组避免全局变量问题。

这样修改后,你就能捕获到所有类型的src路径,包括你想要的/cdn/script.js这类相对路径了。

备注:内容来源于stack exchange,提问作者B Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 16:03:02