CEF Python ExecuteJavascript 不会设置输入元素的值
CEF Python ExecuteJavascript will not set value of a input element
当我尝试 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()
DOM浏览器刚刚创建后还没有准备好。使用鼠标上下文菜单打开 Developer Tools window,您将看到错误。您应该使用 LoadHandler 来检测 window 何时完成网页加载或 DOM 何时准备就绪。选项:
- 实施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 并注入添加事件侦听器的 js 代码 DOMContentLoaded 将执行实际代码。
参见教程 > 客户端处理程序:
https://github.com/cztomczak/cefpython/blob/master/docs/Tutorial.md#client-handlers
另请参阅 LoadHandler 的 API 参考。
当我尝试 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()
DOM浏览器刚刚创建后还没有准备好。使用鼠标上下文菜单打开 Developer Tools window,您将看到错误。您应该使用 LoadHandler 来检测 window 何时完成网页加载或 DOM 何时准备就绪。选项:
- 实施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 并注入添加事件侦听器的 js 代码 DOMContentLoaded 将执行实际代码。
参见教程 > 客户端处理程序: https://github.com/cztomczak/cefpython/blob/master/docs/Tutorial.md#client-handlers
另请参阅 LoadHandler 的 API 参考。