1

大家好,我正在尝试将 url 的 html 打印到控制台。我从 tutorial.py 中获取了开源中免费的代码。那是类:

class LoadHandler(object):
    def OnLoadingStateChange(self, browser, is_loading, **_):
        """Called when the loading state has changed."""
        if not is_loading:
            # Loading is complete. DOM is ready.
            # js_print(browser, "Python", "OnLoadingStateChange", "Loading is complete")
            print('ready')
            print(browser.GetMainFrame().GetText())

我添加了最后两行:

print('ready')
print(browser.GetMainFrame().GetText())

当我运行代码时,我得到一个错误消息:

TypeError: GetText() 只接受一个参数(给定 0)

我在文档中看到我需要给函数参数StringVisitorhttps://github.com/cztomczak/cefpython/blob/master/api/Frame.md#gettext

什么是,StringVisitor我该如何解决这个问题?

4

1 回答 1

1

StringVisitor是实现Visit()方法的类的对象。以下是您想要执行的操作:

class Visitor(object)
    def Visit(self, value):
        print(value)
myvisitor = Visitor()
class LoadHandler(object):
    def OnLoadingStateChange(self, browser, is_loading, **_):
        """Called when the loading state has changed."""
        if not is_loading:
            # Loading is complete. DOM is ready.
            print('ready')
            browser.GetMainFrame().GetText(myvisitor)

myvisitor放在函数之外看起来很奇怪,但它是在函数返回OnLoadingStateChange()后保持该对象存活的众多方法之一,因为它是异步的。GetText()GetText()

您需要使用StringVisitorincefpython因为许多 CEF 函数是异步的,即在没有完成您希望它们执行的操作的情况下立即返回。当实际工作完成时,他们会调用你的回调函数。在您的示例中,当准备好的文本准备GetText()好时,它将调用Visit()StringVisitor对象中的方法。这也意味着您需要在程序流程中换一种方式思考。

(我在Need to get HTML source as string CEFPython中回答了一个类似的问题)

于 2018-02-18T04:27:34.283 回答