2017-05-02 15 views
2

の値を設定しません。 )。試してみるbrowser.ExecuteJavascript( "document.getElementsByName( 'q')[0] .value = 24;")何も起こりません。だから、私はExecuteJavascriptが動作していることを知っていますが、入力要素の値を設定しようとすると、入力要素は変更されません。私が試しているコードは、誰かがその特定のJavascriptがなぜ実行されないのかについてのアイデアがあれば、私はとても感謝しています。CEFのPython ExecuteJavascriptは、入力要素

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() 

答えて

3

ブラウザが作成された直後にDOMが準備されていません。マウスのコンテキストメニューを使用してDeveloper Toolsウィンドウを開くと、エラーが表示されます。 LoadHandlerを使用して、ウィンドウがWebページの読み込みを終了したときや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") 
  • LoadHandler.OnLoadStartを実装し、実際に実行するイベントリスナーDOMContentLoadedを追加JSコードを注入コード。
  • 参照チュートリアル>クライアントハンドラ: https://github.com/cztomczak/cefpython/blob/master/docs/Tutorial.md#client-handlers

    もLoadHandlerのAPIリファレンスを参照してください。