Функция GetText() в Cefpython
Привет всем, я пытаюсь вывести на консоль HTML-адрес URL. Я взял код из 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)
Я видел в документации, что мне нужно дать параметр функции StringVisitor
( https://github.com/cztomczak/cefpython/blob/master/api/Frame.md#gettext)
Что StringVisitor
и как я могу решить эту проблему?
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()
асинхронный
Вам нужно использовать StringVisitor
в cefpython
потому что многие функции CEF являются асинхронными, а именно, немедленно возвращаются без завершения того, что вы хотите, чтобы они делали. Они будут вызывать ваши функции обратного вызова, когда фактическая работа будет выполнена. В вашем примере, когда текст подготовлен GetText()
готов, он будет называть Visit()
метод в вашем StringVisitor
объект. Это также означает, что вам нужно думать по-другому в потоке вашей программы.
(Я ответил на аналогичный вопрос в " Требуется получить исходный код HTML в виде строки CEFPython")