0

我正在尝试使用 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

4

1 回答 1

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()弱引用传递给的。换句话说,您必须保持该对象处于活动状态,直到源被传回。如果将上述代码段的最后三行放入函数中,则必须确保函数在工作完成之前不会返回。

于 2018-02-16T18:13:25.707 回答