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