Нужно получить исходный код 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() в слабой ссылке. Другими словами, вы должны поддерживать этот объект, пока источник не будет передан обратно. Если вы поместили последние три строки в приведенном выше фрагменте в функцию, вы должны убедиться, что функция не вернется, пока работа не будет завершена.

Другие вопросы по тегам