大家好我试图在控制台上打印网址的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)
我在文档中看到我需要赋予函数参数StringVisitor
(https://github.com/cztomczak/cefpython/blob/master/api/Frame.md#gettext)
什么是StringVisitor
以及如何解决此问题?
答案 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()
方法。这也意味着你需要在程序的流程中考虑另一种方式。