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

向Selenium驱动注入CSS时Linux出现JavaScript错误 macOS无异常

问题根源

你出现报错的核心原因是手动拼接JavaScript字符串时,CSS里的单引号破坏了JS的语法结构:
你拼接的JS代码里用单引号包裹CSS内容:style.innerHTML = '{css}';,如果CSS文件中存在单引号(比如你遇到的format('woff2')、font-family: 'serif'),这个单引号会提前把JS的字符串边界闭合,后面的CSS内容就变成了非法的JS token,自然抛出Invalid or unexpected token错误。

为什么你觉得Python变量里的单引号允许?

这是误解:只要是未转义的单引号,不管是Python变量里直接写的,还是从文件读的,都会触发这个问题。你之前测试变量里的单引号没出问题,要么是你当时无意中做了转义,要么是测试用的字符串结构刚好没有触发语法断裂。

为什么仅Linux环境报错,macOS正常?

两个核心原因:

  • 浏览器/驱动的容错差异:不同平台的浏览器及Selenium驱动的语法容错逻辑不同,macOS上的浏览器版本对这种轻微的语法错误做了自动修复,而Linux上的浏览器版本严格遵循ECMAScript规范直接抛出错误。
  • 文件读取差异:Path.read_text()在不同系统的默认编码、换行符处理逻辑有细微差异,虽然你替换了\n,但部分特殊控制字符可能在Linux环境下没有被正确处理,进一步放大了语法问题。

正确预处理方法

不要手动拼接JS字符串,直接把CSS作为参数传给execute_script,Selenium会自动完成所有特殊字符的转义,完全规避语法问题:

def injectCSS(driver, file):
    css = Path(file).read_text()
    # 不需要手动处理换行、引号等特殊字符,Selenium会自动转义
    execute = '''
    var style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = arguments[0];
    document.head.appendChild(style);
    '''
    try:
        driver.execute_script(execute, css)
        time.sleep(1)
        print('CSS injection done')
    except Exception as e:
        print(str(e))

如果你一定要手动拼接字符串,就把CSS里所有的单引号做转义处理:css = css.replace("'", "\\'"),但这种方法容易漏处理其他特殊字符,不如传参方案稳妥。

内容的提问来源于stack exchange,提问作者Madamadam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:51:03