未知错误:在seleniumChromeDriver

时间:2018-03-24 20:46:35

标签: javascript python-3.x selenium selenium-webdriver selenium-chromedriver

我正在尝试在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命令都已正确执行。

2 个答案:

答案 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 运行,您使用的二进制文件之间的主要问题似乎是版本兼容性,如下所示:

  • 您正在使用 chromedriver = 2.35
  • chromedriver=2.35的发行说明明确提及以下内容:
  

支持 Chrome v62-64

  • 您正在使用 chrome = 65.0
  • ChromeDriver v2.37的发行说明明确提及以下内容:
  

支持 Chrome v64-66

因此 ChromeDriver 版本( v2.35 )与 Chrome浏览器版本( v65)之间存在明显的不匹配。 0

解决方案

  • ChromeDriver 升级到ChromeDriver v2.37级别。
  • Chrome 版本保留在 Chrome v65.x 级别。 (as per ChromeDriver v2.37 release notes
  • 通过 IDE 清理您的项目工作区仅使用所需的依赖项重建项目
  • 使用CCleaner工具清除执行测试套件之前和之后的所有操作系统杂务。
  • 如果您的基本 Web客户端版本太旧,请通过Revo Uninstaller将其卸载并安装最新的GA和已发布的 WebClient 版本。
  • 执行@Test

答案 1 :(得分:0)

我会使用Python的多行字符串,所以我也可以在我的代码中使用精确的JavaScript

driver.execute_script("""

var JS={"abc": "def"}

console.log(JSON.stringify(JS));
""")

这将确保没有逃避问题