【问题标题】:CEF Python ExecuteJavascript will not set value of a input elementCEF Python ExecuteJavascript 不会设置输入元素的值
【发布时间】:2017-05-02 21:47:40
【问题描述】:

当我尝试 browser.ExecuteJavascript("alert('ExecuteJavaScript works!');") 时它工作正常(在创建浏览器时弹出警报) .当我尝试 browser.ExecuteJavascript("document.getElementsByName('q')[0].value = 24;") 没有任何反应。所以我知道 ExecuteJavascript 正在工作,但是当我尝试设置输入元素的值时,为什么输入元素没有改变?我正在尝试的代码如下,如果有人知道为什么那个特定的 Javascript 不会执行,我将不胜感激。

from cefpython3 import cefpython as cef
import platform
import sys

def main():
    sys.excepthook = cef.ExceptHook
    cef.Initialize()
    browser = cef.CreateBrowserSync(url="https://www.google.com", window_title="Hello World!")
    browser.ExecuteJavascript("document.getElementsByName('q')[0].value = 24")
    cef.MessageLoop()
    cef.Shutdown()

if __name__ == '__main__':
    main()

【问题讨论】:

    标签: javascript python chromium-embedded cefpython


    【解决方案1】:

    浏览器刚刚创建后,DOM 还没有准备好。使用鼠标上下文菜单打开开发人员工具窗口,您将看到错误。您应该使用 LoadHandler 来检测窗口何时完成网页加载或 DOM 何时准备就绪。选项:

    1. 实现 LoadHandler.OnLoadingStateChange:
    
        main():
            browser.SetClientHandler(LoadHandler())
    
        class LoadHandler(object):
            def OnLoadingStateChange(self, browser, is_loading, **_):
                if not is_loading:
                    browser.ExecuteJavascript("document.getElementsByName('q')[0].value = 24")
    
    1. 实现 LoadHandler.OnLoadStart 并注入添加事件侦听器 DOMContentLoaded 的 js 代码,该事件侦听器将执行实际代码。

    参见教程 > 客户端处理程序: https://github.com/cztomczak/cefpython/blob/master/docs/Tutorial.md#client-handlers

    另请参阅 LoadHandler 的 API 参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 2018-12-11
      相关资源
      最近更新 更多