Cefpython GetText()函数

时间:2018-01-18 09:19:53

标签: python python-3.x chromium cefpython

大家好我试图在控制台上打印网址的html。我从open source中获取了免费的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())

当我运行代码时,我得到一个ERROR按摩:

  

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

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

什么是StringVisitor以及如何解决此问题?

1 个答案:

答案 0 :(得分: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()函数返回后保持该对象存活的众多方法之一,原因是{{1} 1}}是异步的。

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

(我在Need to get HTML source as string CEFPython

中回答了类似的问题