0

下面的 python (v. 3.9.7) 函数将从标准 CSS 文件加载的 CSS 样式注入到 selenium 驱动程序对象中。虽然在 macOS (11.5.2, homebrew) 中正确应用了样式,但在 Linux (Ubuntu 20.04) 中没有应用样式并且此消息被抛出:javascript error: Invalid or unexpected token

那么字符串的哪一部分导致了问题,我如何在发送之前对字符串进行预处理?

def injectCSS(driver, file):
    css = Path(file).read_text()
    css = css.replace('\n', '')
    execute = rf'''
    var style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = '{css}';
    document.head.appendChild(style);
    '''
    try:
        driver.execute_script(execute)
        time.sleep(1)
        print('CSS injection done')
    except Exception as e:
        print(str(e))

更新:我缩小了有问题的字符串:它不是 Python 变量中的字符串,它位于加载的 CSS 文件本身内,它是包含规则中src属性的行@font-face

@font-face {
    font-family: "myfont";
    src: url(http://my.font.com/font.woff2) format('woff2');
}

更新 2:好吧,感谢@cruisepandey,我发现了 CSS 中有问题的标记:它是 CSS 文件中的单引号,例如font-family: 'serif';. 用双引号替换它们可以解决问题。为什么允许在变量中使用单引号,但在 CSS 文件本身中却不允许?另外:为什么问题出现在 linux 而不是 macOS 中?

4

0 回答 0