Нужно получить исходный код HTML в виде строки CEFPython
Я пытаюсь получить исходный HTML-код в виде строки из веб-URL с помощью CEFPython, который я хочу MainFrame
исходный контент для сканирования и получения строки в
def save_screenshot(browser):
# Browser object provides GetUserData/SetUserData methods
# for storing custom data associated with browser. The
# "OnPaint.buffer_string" data is set in RenderHandler.OnPaint.
buffer_string = browser.GetUserData("OnPaint.buffer_string")
if not buffer_string:
raise Exception("buffer_string is empty, OnPaint never called?")
mainFrame = browser.GetMainFrame()
print("Main frame is ", mainFrame)
# print("buffer string" ,buffer_string)
# visitor object
visitorObj = cef_string()
temp = mainFrame.GetSource(visitorObj).GetString()
print("temp : ", temp)
visitorText = mainFrame.GetText(temp)
siteHTML = mainFrame.GetSource(visitorText)
print("siteHTML is ", siteHTML)
Проблема: код ничего не возвращает для siteHTML
1 ответ
Ваш mainframe.GetSource(visitor)
асинхронный Поэтому вы не можете позвонить GetString()
от него.
Это способ сделать, к сожалению, вам нужно думать асинхронно:
class Visitor(object)
def Visit(self, value):
print("This is the HTML source:")
print(value)
myvisitor = Visitor()
mainFrame = browser.GetMainFrame()
mainFrame.GetSource(myvisitor)
Еще одна вещь, которую нужно остерегаться: объект посетителя myvisitor
в приведенном выше примере передается GetSource()
в слабой ссылке. Другими словами, вы должны поддерживать этот объект, пока источник не будет передан обратно. Если вы поместили последние три строки в приведенном выше фрагменте в функцию, вы должны убедиться, что функция не вернется, пока работа не будет завершена.