Python和Selenium如何向页面添加JS函数?
我正在尝试向页面添加一些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
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