Selenium ChromeDriver执行JavaScript时Runtime.evaluate未知错误求助
嘿,我来帮你捋捋这个问题——你遇到的Runtime.evaluate错误,大概率是因为JavaScript代码的格式或者转义处理出了问题,尤其是你在$.ajax的data里嵌套的那段类Python代码,很可能破坏了JS的语法结构。之前你看的Unexpected token var的解决方案不适用,是因为你的问题根源不一样。
下面是几个具体的修复方向,你可以一步步试:
1. 先把嵌套字符串的转义问题搞定
你原来的代码里,data中的code值包含了换行、双引号这些特殊字符,在JS字符串里如果转义不当,直接会让解析器报错。我建议你用JS的**模板字符串(反引号`)**来包裹这段Python代码,这样就不用反复转义双引号和换行,可读性和正确性都更高。
比如把你的代码改成这样:
$.ajax({ type: "POST", data: { "code": `a=input(""); printf("Part A\n"); SA=6*a**2; // 这里提醒下:Python里^是按位异或,幂运算要用**哦 printf("SA = %d\n",SA); r1=(6*a**2/(4*pi))**(1/2); printf...` }, // 别忘了补全url、回调函数这些必填项! url: "你的接口地址", success: function(res) { console.log("请求成功:", res); }, error: function(err) { console.error("请求炸了:", err); } });
2. 确保Selenium执行JS的姿势正确
在Selenium里执行JS,一定要用execute_script()方法,而且要保证传递的JS是完整可独立运行的。另外,如果你的目标页面没引入jQuery,直接用$会报错,这时候可以换成原生的fetch API,不用依赖jQuery:
用jQuery的Python代码示例
from selenium import webdriver driver = webdriver.Chrome() driver.get("你的目标页面URL") # 先加载页面,确保jQuery已引入 # 完整的JS代码 js_code = ''' $.ajax({ type: "POST", url: "https://your-api-url.com", data: { "code": `a=input(""); printf("Part A\\n"); SA=6*a**2; printf("SA = %d\\n",SA); r1=(6*a**2/(4*Math.PI))**(1/2); printf("r1 = %f\\n",r1);` }, dataType: "json", success: function(res) { console.log(res); }, error: function(xhr, status, err) { console.error(err); } }); ''' driver.execute_script(js_code)
用原生fetch的替代方案(无jQuery依赖)
js_code = ''' fetch("https://your-api-url.com", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: new URLSearchParams({ "code": `a=input(""); printf("Part A\n"); SA=6*a**2; printf("SA = %d\n",SA); r1=(6*a**2/(4*Math.PI))**(1/2); printf...` }) }) .then(res => res.json()) .then(data => console.log(data)) .catch(err => console.error(err)); ''' driver.execute_script(js_code)
3. 检查ChromeDriver和浏览器版本兼容性
如果上面的格式都改对了还是报错,那大概率是版本不兼容的锅——Chrome浏览器和ChromeDriver的版本必须对应,差太多就会出现各种奇怪的Runtime错误。建议你把ChromeDriver升级到和当前Chrome浏览器完全匹配的版本。
最后给你个小技巧:先在Chrome开发者工具的Console面板里把你的JS代码跑一遍,确认能正常执行后再放到Selenium里,这样能快速排除代码本身的问题,定位是Selenium的配置还是JS的问题。
内容的提问来源于stack exchange,提问作者Aditya Jyoti Paul

