Python和Selenium如何向页面添加JS函数?

Python和Selenium如何向页面添加JS函数?,python,selenium,Python,Selenium,我正在尝试向页面添加一些JS函数,但不确定如何在不将函数分配给窗口对象的情况下进行添加 以下工作将起作用: driver.execute_script("console.log('lalala');") driver.execute_script("function momo(){console.log('lalala')};momo();") 但要努力做到: driver.execute_script("function momo(){console.log('lalala')};") dr

我正在尝试向页面添加一些JS函数,但不确定如何在不将函数分配给窗口对象的情况下进行添加

以下工作将起作用:

driver.execute_script("console.log('lalala');")
driver.execute_script("function momo(){console.log('lalala')};momo();")
但要努力做到:

driver.execute_script("function momo(){console.log('lalala')};")
driver.execute_script("momo();")
将失败:

WebDriverException: Message: unknown error: momo is not defined
我知道将函数分配给窗口:

driver.execute_script("window.momo = function(){console.log('lalala')};")
这会解决问题,但也许还有别的办法


谢谢

您试图将新元素引入窗口dom,因此出现错误:

WebDriverException:消息:未知错误:未定义momo

除非您尝试操作现有元素,否则您的解决方案可能是唯一的解决方案

换句话说,您可以向页面上已有的任何元素添加JS函数

这就是窗口dom范围的概念


你可以通过阅读这篇文章了解更多。

也许这就回答了这个问题:

driver.execute_script("window.momo = () => console.log('lalala');")

我只是用更现代的语法来重写它。

也许您可以创建
脚本
元素

driver.execute_script("""
(function(){
    s = document.createElement('script');
    s.textContent = 'function momo(){console.log("lalala")};';
    document.body.appendChild(s);
})();
""")
driver.execute_script("momo();")

将函数添加到窗口是一个优雅的解决方案。你有什么特别的问题吗?这和问题中的功能是一样的。但要优雅得多。。。我仍然认为没有办法避免在脚本中使用
window