想用IHTMLDOCUMENT3接口取一个网页上的数据,试了N种方法都取不到,求破! 本帖最后由 andy41020955 于 2014-05-24 21:38:38 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 getElementById应该是可以的,这个页面网址是多少?贴出来我们帮你看一下 网址:http://fast.1000.com/帐号密码:test1000 test1000在此谢谢了 这个<input>文本框是在一个id为mainframe的iframe框架内的,你之前获得的IHTMLDocument3是整个页面的文档指针,但不包括iframe框架内的文档。所以得先获取这个iframe元素,再获取其内部文档的IHTMLDocument3指针,然后再getElementById获取input元素。 CComQIPtr<IHTMLDocument3> spDoc = GetHtmlDocument(); CComPtr<IHTMLElement> spElem; CComQIPtr<IHTMLIFrameElement3> spIfeameElem; CComQIPtr<IHTMLInputElement> spInputElem; CComDispatchDriver spDispatch; CComBSTR bstrValue; spDoc->getElementById(CComBSTR(L"mainframe"), &spElem); spDoc.Release(); spIfeameElem = spElem; spElem.Release(); spIfeameElem->get_contentDocument(&spDispatch); spDoc = spDispatch; spDoc->getElementById(CComBSTR(L"mobileNo"), &spElem); spInputElem = spElem; spInputElem->get_value(&bstrValue); MessageBox(bstrValue); 谢谢关注这个问题。很高兴这个问题能解决了。但是你说的这个 iframe 是在哪边看到的啊?我在网页上右键,查看源文件,好像没有这个iframe 的元素啊 , 是不是还有其它的方法来查看源代码的 ? 在Chrome浏览器里右键-审查元素就可以找到了,这个看到的是当前已经加载完整的DOM树。IE右键-查看源码,要看你在哪里点右键,要在框架外部的区域点才行,你在框架内部点,得到的就是框架内的源码,并且看到的内容不包括AJAX异步加载的内容。 哦,谢谢我试了下,好像是在不同的区域点查看源代码看到的源码不同,这个以前没注意过。另外再问下,我用的VS2010,貌似没有 IHTMLIFrameElement3 ,只有IHTMLIFrameElement我按你这个思路再试试。 我的也是VS2010,有 IHTMLIFrameElement3如果你的真没有的话,可能是我打过VS2010的SP1补丁才有的。但获取框架内文档指针也不一定要用 IHTMLIFrameElement3,还有其他方法,百度一下 VC 如何获取到内存信息,内存的参数! picture控件 属性 全部送完:各位大虾谁能解决?!有关数据库,vc的问题 VC60中DataGrid 如何合并单元格啊? 进程间通讯 共享内存 问题 基本的问题请教了,生成一个对话框时DOMODAL后,对这个对话框初始化的语句写在哪个消息和函数里?多谢 怎样预读光驱,区分碟片——VCD,DVD,其他? CSDN简单问题 各位大哥,请问在哪里可以下载到visual c++呀? Visual C++ 和 Win2000 Professional 问题,还望大家帮帮忙 MFC中如何画圆环 mfc播放视频闪烁
网址:
http://fast.1000.com/
帐号密码:
test1000 test1000
在此谢谢了
所以得先获取这个iframe元素,再获取其内部文档的IHTMLDocument3指针,然后再getElementById获取input元素。
CComQIPtr<IHTMLDocument3> spDoc = GetHtmlDocument();
CComPtr<IHTMLElement> spElem;
CComQIPtr<IHTMLIFrameElement3> spIfeameElem;
CComQIPtr<IHTMLInputElement> spInputElem;
CComDispatchDriver spDispatch;
CComBSTR bstrValue;
spDoc->getElementById(CComBSTR(L"mainframe"), &spElem);
spDoc.Release();
spIfeameElem = spElem;
spElem.Release();
spIfeameElem->get_contentDocument(&spDispatch);
spDoc = spDispatch;
spDoc->getElementById(CComBSTR(L"mobileNo"), &spElem);
spInputElem = spElem;
spInputElem->get_value(&bstrValue);
MessageBox(bstrValue);
IE右键-查看源码,要看你在哪里点右键,要在框架外部的区域点才行,你在框架内部点,得到的就是框架内的源码,并且看到的内容不包括AJAX异步加载的内容。
我试了下,好像是在不同的区域点查看源代码看到的源码不同,这个以前没注意过。
另外再问下,我用的VS2010,貌似没有 IHTMLIFrameElement3 ,只有IHTMLIFrameElement我按你这个思路再试试。
如果你的真没有的话,可能是我打过VS2010的SP1补丁才有的。
但获取框架内文档指针也不一定要用 IHTMLIFrameElement3,还有其他方法,百度一下