MFC CHtmlView 获取html页面text内容
时间: 2023-08-05 15:06:54 浏览: 97
得到网页中HTML内容
MFC的CHtmlView类提供了获取HTML页面文本内容的方法。你可以使用以下步骤:
1.首先,你需要在HTML页面加载完成后获取页面文本内容。你可以在CHtmlView类的OnDocumentComplete() 方法中获取页面内容。
2.在OnDocumentComplete() 方法中,你可以使用IHTMLDocument2接口获取HTML页面的文本内容。
3.使用IHTMLDocument2的body属性获取页面的body元素。然后使用body元素的innerHTML属性获取页面的HTML代码。
4.使用CString类将HTML代码转换为纯文本内容。
以下是示例代码:
```
// 在OnDocumentComplete() 方法中获取HTML页面的文本内容
void CHtmlViewTestView::OnDocumentComplete(LPCTSTR lpszURL)
{
CHtmlView::OnDocumentComplete(lpszURL);
// 获取HTML页面的文本内容
IHTMLDocument2* pDoc = GetHtmlDocument();
if (pDoc)
{
// 获取页面的body元素
IHTMLElement* pBody = NULL;
HRESULT hr = pDoc->get_body(&pBody);
if (SUCCEEDED(hr) && pBody)
{
// 获取body元素的innerHTML属性,即页面的HTML代码
BSTR bstrHtml = NULL;
hr = pBody->get_innerHTML(&bstrHtml);
if (SUCCEEDED(hr) && bstrHtml)
{
// 将HTML代码转换为纯文本内容
CString strHtml = bstrHtml;
CString strText;
HtmlToText(strHtml, strText);
// 处理页面文本内容...
// 释放资源
SysFreeString(bstrHtml);
}
pBody->Release();
}
pDoc->Release();
}
}
// 将HTML代码转换为纯文本内容
void CHtmlViewTestView::HtmlToText(LPCTSTR lpszHtml, CString& strText)
{
// 使用IHTMLDocument2接口将HTML代码转换为纯文本内容
IHTMLDocument2* pDoc = NULL;
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, (void**)&pDoc);
if (SUCCEEDED(hr) && pDoc)
{
BSTR bstrHtml = SysAllocString(lpszHtml);
VARIANT varName;
VariantInit(&varName);
varName.vt = VT_BSTR;
varName.bstrVal = bstrHtml;
pDoc->put_charset(L"utf-8");
pDoc->write(varName);
pDoc->close();
IHTMLElement* pBody = NULL;
hr = pDoc->get_body(&pBody);
if (SUCCEEDED(hr) && pBody)
{
BSTR bstrText = NULL;
hr = pBody->get_innerText(&bstrText);
if (SUCCEEDED(hr) && bstrText)
{
strText = bstrText;
SysFreeString(bstrText);
}
pBody->Release();
}
SysFreeString(bstrHtml);
pDoc->Release();
}
CoUninitialize();
}
```
以上代码中使用了HtmlToText()方法将HTML代码转换为纯文本内容。该方法使用CoCreateInstance()方法创建IHTMLDocument2对象,使用write()方法将HTML代码写入该对象,然后使用get_innerText()方法获取纯文本内容。最后使用SysFreeString()方法释放资源。
阅读全文