如何将Python读取的CSV变量传入脚本执行的JavaScript代码中
问题解决方法
你的原有写法存在两处错误:
- Python的
str.format()方法写在了JS字符串的内部,Python不会解析字符串内部的方法调用,占位符无法被替换为实际变量值 - JS代码中拼接a标签的逻辑遗漏了
<a href="前缀,会导致生成的a标签格式错误
快速修复方案(仅适用于变量无特殊字符的场景)
将format方法移到三引号字符串外部,按顺序传入变量即可:
js = """ var search = "{}"; var replacement = "{}"; var replacementTag = '<a href="'+replacement+'" target="_blank">'+search+'</a>'; document.body.innerHTML = document.body.innerHTML.split(search).join(replacementTag); """.format(mystring, mylink) driver.execute_script(js)
推荐最优方案(无需处理转义,兼容所有合法变量值)
Selenium的execute_script原生支持向JS执行环境传参,不需要手动做字符串拼接,直接按顺序传入Python变量,在JS中通过arguments对象按索引读取即可:
js = """ var search = arguments[0]; var replacement = arguments[1]; var replacementTag = '<a href="'+replacement+'" target="_blank">'+search+'</a>'; document.body.innerHTML = document.body.innerHTML.split(search).join(replacementTag); """ # 按顺序传递Python变量,无需处理任何转义字符 driver.execute_script(js, mystring, mylink)
注意事项
直接修改document.body.innerHTML会清除页面原有DOM绑定的事件监听,如果业务需要保留原有事件,可以改为遍历文本节点做精准替换。
内容的提问来源于stack exchange,提问作者bostjan jaro
相关产品推荐
相关产品推荐

