需要将HTML源代码作为字符串CEFPython

时间:2017-06-27 19:28:10

标签: python python-2.7 cefpython

我正在尝试使用CEFPython从Web URL获取HTML源代码 我希望抓取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 个答案:

答案 0 :(得分:2)

您的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()。换句话说,您必须保持该对象存活,直到源被传回。如果将上面代码片段中的最后三行放在函数中,则必须确保在作业完成之前函数不会返回。