我正在尝试在python的selenium Chromedriver中执行Javascript。我已经尝试过研究此链接nknown error: Runtime.evaluate threw exception: SyntaxError: Unexpected token var中建议的未知错误,其中接受的解决方案涉及正确格式化js,这在我的案例中不起作用
我的脚本如下:
$.ajax({
type: "POST",
data: {
"code": "a=input(\"\");\nprintf(\"Part A\\n\");\nSA=6*a^2;\nprintf(\"SA = %d\\n\",SA);\nr1=(6*a^2/(4*pi))^(1/2);\nprintf(\"Radius = %.2f\\n\",r1);\nprintf(\"Part B\\n\");\nv=a^3;\nr2=(3*v/(4*pi))^(1/3);\nprintf(\"Radius = %.2f\\n\",r2);\n",
"input": "",
},
url: "code.evaluate.abc.php",
dataType: "json",
});
由于无法将此类型作为字符串键入driver.execute_script(javascript_string),因此删除了换行符以生成这一行:
$.ajax({type: "POST",data: {"code": "a=input(\"\");\nprintf(\"Part A\\n\");\nSA=6*a^2;\nprintf(\"SA = %d\\n\",SA);\nr1=(6*a^2/(4*pi))^(1/2);\nprintf(\"Radius = %.2f\\n\",r1);\nprintf(\"Part B\\n\");\nv=a^3;\nr2=(3*v/(4*pi))^(1/3);\nprintf(\"Radius = %.2f\\n\",r2);\n","input": "",},url: "code.evaluate.abc.php",dataType: "json"});
这个单行是正确的,因为当复制粘贴到浏览器的开发人员选项控制台时,它按预期工作,但是当我从driver.execute_script内部执行它时,它会产生以下错误:
WebDriverException:未知错误:Runtime.evaluate引发异常:SyntaxError:无效或意外的令牌 (会话信息:chrome = 65.0.3325.162) (驱动信息:chromedriver = 2.35.528139(47ead77cb35ad2a9a83248b292151462a66cd881),platform = Linux 4.13.0-37-generic x86_64)
P.S。:Console.log,警报和小型javascript命令以及其他webdriver命令都已正确执行。
答案 0 :(得分:0)
正如您所提到的,以下 JavaScript 在浏览器的开发者控制台中完美运行:
$.ajax({type: "POST",data: {"code": "a=input(\"\");\nprintf(\"Part A\\n\");\nSA=6*a^2;\nprintf(\"SA = %d\\n\",SA);\nr1=(6*a^2/(4*pi))^(1/2);\nprintf(\"Radius = %.2f\\n\",r1);\nprintf(\"Part B\\n\");\nv=a^3;\nr2=(3*v/(4*pi))^(1/3);\nprintf(\"Radius = %.2f\\n\",r2);\n","input": "",},url: "code.evaluate.abc.php",dataType: "json"});
但无法通过 ChromeDriver 运行,您使用的二进制文件之间的主要问题似乎是版本兼容性,如下所示:
支持 Chrome v62-64
支持 Chrome v64-66
因此 ChromeDriver 版本( v2.35 )与 Chrome浏览器版本( v65)之间存在明显的不匹配。 0 )
@Test
。答案 1 :(得分:0)
我会使用Python的多行字符串,所以我也可以在我的代码中使用精确的JavaScript
driver.execute_script("""
var JS={"abc": "def"}
console.log(JSON.stringify(JS));
""")
这将确保没有逃避问题