selenium调试JS时,返回结果为None,如何解决

想用execute_script调js接口,输出一些内容,直接在浏览器console上输入 map.getAllLayers() 可以获得返回结果,但用如下python脚本执行,打印结果是None,请问如何解决呢

img

帮你搜了一下资料,请参考一下,应该可以解决你的问题。
在使用 execute_script 调用 JavaScript 接口时,需要注意以下几点:

  1. 确认 JavaScript 代码本身是否正确且能够在浏览器中正常运行。
  2. 确认 JavaScript 代码所依赖的库或插件是否已经被加载。如果没有加载,则需要先进行加载操作,例如通过 execute_script 加载脚本文件或调用函数进行加载。
  3. 调用 execute_script 方法时,需要传入完整的 JavaScript 代码字符串。

在你提供的情况下,可能出现如下问题:

  1. JavaScript 代码本身存在语法错误或逻辑问题。你可以在 Python 中打印完整的 JavaScript 代码字符串,然后在浏览器控制台中检查是否存在问题。
  2. JavaScript 代码中依赖的库或插件没有被加载。你可以在执行 JavaScript 代码之前,通过 execute_script 方法加载相关的库或插件,确保它们已经被成功加载。
  3. execute_script 方法返回的结果是 JavaScript 代码执行的结果。如果 JavaScript 代码本身不返回任何值或返回一个没有值的 undefined 变量,则 Python 中打印的结果也会是 None。你可以在 JavaScript 代码中手动添加 console.log() 语句,将需要输出的结果打印到浏览器控制台中,然后通过 Python 调用控制台输出,获取 JavaScript 代码执行结果。

例如,你可以尝试如下代码来测试:

# 加载 leaflet.js 库
driver.execute_script('''
    var script = document.createElement('script');
    script.src = 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js';
    document.head.appendChild(script);
''')

# 调用 getAllLayers() 方法并将结果打印到控制台
result = driver.execute_script('''
    console.log(map.getAllLayers());
''')
print(result)

这里我假设你使用的是 Leaflet.js 库,并且已经正确加载。在上述代码中,我先使用 execute_script 方法加载了 Leaflet.js 库,然后在 JavaScript 代码中手动添加了 console.log() 语句,将 getAllLayers() 方法的返回值打印到了浏览器控制台中。最终,通过 execute_script 方法获取控制台输出,并将其打印到 Python 控制台中。需要注意的是,在这个例子中,Python 中打印的结果实际上是 None,因为 JavaScript 不会返回任何值。你需要在浏览器中查看控制台输出来获取 getAllLayers() 方法的返回值。

如果问题解决或者对你有帮助,请采纳我 的回答,谢谢~。