如何通过IWebBrowser2接口来将该IE窗口打开的网页内容实现另存为(网页,全部*.htm;*.html)操作

Becomly 2013-05-21 02:07:07
通过IShellWindows接口找到对应的IE窗口,从而获得IWebBrowser2接口。
代码如下:
CComPtr<IShellWindows> spShellWin;
HRESULT hr = spShellWin.CoCreateInstance(CLSID_ShellWindows);
CComPtr<IDispatch> spDispIE;
hr = spShellWin->Item(CComVariant(i), &spDispIE);
...
//当该窗口是指定的ie窗口时,获得IWebBrowser2
CComQIPtr<IWebBrowser2> spBrowser = spDispIE;

如何通过IWebBrowser2接口来将该IE窗口打开的网页内容实现另存为(网页,全部*.htm;*.html)操作。
就是将网页保存为带css样式的html文件
...全文
326 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Becomly 2013-05-21
  • 打赏
  • 举报
回复
谢谢 yfqvip 满衣兄 你的方法只能获取body里面的内容。 请问有没有方法获取整个网页里面的内容。 相当于IE窗口的 查看->源文件 里面的内容。谢谢!
满衣兄 2013-05-21
  • 打赏
  • 举报
回复
引用 3 楼 Becomly 的回复:
谢谢 yfqvip 满衣兄 不过你的方法是获取DOM对象里面的html内容,里面的内容已经没有css样式了。这样的话获得的html内容太大。 请问有没有其他方式实现IE浏览器的另存为(网页,全部*.htm;*.html)的功能?
这个就不知道了,找了几个,你看看有没有帮助: http://bbs.csdn.net/topics/10450810 http://bbs.csdn.net/topics/10294635 http://bbs.csdn.net/topics/70168367
Becomly 2013-05-21
  • 打赏
  • 举报
回复
谢谢 yfqvip 满衣兄 不过你的方法是获取DOM对象里面的html内容,里面的内容已经没有css样式了。这样的话获得的html内容太大。 请问有没有其他方式实现IE浏览器的另存为(网页,全部*.htm;*.html)的功能?
满衣兄 2013-05-21
  • 打赏
  • 举报
回复
整理一下
IWebBrowser2* m_pWebBrowser2; //浏览器指针
//取得所有内容
HRESULT GetInnerHTML(CString &strContext)
{
	if (m_pWebBrowser2)
	{
		CComPtr<IHTMLDocument2> pHtmlDoc2 = NULL;
		HRESULT hr = m_pWebBrowser2->get_Document((IDispatch**)&pHtmlDoc2);
		if(SUCCEEDED(hr) && pHtmlDoc2)
		{
			CComPtr<IHTMLElement> pBody = NULL;
			hr = pHtmlDoc2->get_body(&pBody);
			if (SUCCEEDED(hr) && pBody)
			{
				BSTR pbBodyHtml = NULL;
				hr = pBody->get_innerHTML(&pbBodyHtml);   //类似的还有put_innerTEXT //put_innerHTML
				strContext = pbBodyHtml;
				if(pbBodyHtml)
				{
					::SysFreeString( pbBodyHtml );
				}
				return S_OK;
			}
		}
	}
	return S_FALSE;
}
满衣兄 2013-05-21
  • 打赏
  • 举报
回复
IWebBrowser2* m_pWebBrowser2; //浏览器指针 //取得所有内容 HRESULT GetInnerHTML(CString &strContext) { if (m_pWebBrowser2) { CComPtr<IHTMLDocument2> pHtmlDoc2 = NULL; HRESULT hr = m_pWebBrowser2->get_Document((IDispatch**)&pHtmlDoc2); if(SUCCEEDED(hr) && pHtmlDoc2) { CComPtr<IHTMLElement> pBody = NULL; hr = pHtmlDoc2->get_body(&pBody); if (SUCCEEDED(hr) && pBody) { BSTR pbBodyHtml = NULL; hr = pBody->get_innerHTML(&pbBodyHtml); //类似的还有put_innerTEXT //put_innerHTML strContext = pbBodyHtml; if(pbBodyHtml) { ::SysFreeString( pbBodyHtml ); } return S_OK; } } } return S_FALSE; }

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧