在Web2.0 流行的今天,很多应用都采用了Ajax 技术,使得很多数据并不是源码本身说显示的内容。
比如Html源码里看到的是:
<mce:script type="text/javascript"><!-- document.write("/u60A8/u597D!"); // --></mce:script>
在页面上显示的是 “您好!".
可见通过后台抓取源码的方式肯定是不能拿到正确内容的。
先看结果,附件是本人开发的一个脚本执行器,可以往打开的页面里注入一段script,影响的当然只能是本机,所以不能算是病毒或者流氓软件。
点击这里下载。
实现的原理是这样的:
1. 当IE 加载完网页后,会触发一个事件。
void CTaobaoMiningDlg::OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl) { CString url; GetCurrentUrl(url); if (m_working){ doScript(FALSE,url,szUrl); }
2. 在这个事件里,加载脚本,并通过Document对象去执行
void CTaobaoMiningDlg::doScript(BOOL first,CString url,CString url1) { if (!m_script.IsEmpty()){ IHTMLDocument2* pHD2=NULL; GetDHtmlDocument(&pHD2); IHTMLWindow2 *win; if (pHD2){ pHD2->get_parentWindow(&win); if (win) { CString script; //::AfxMessageBox(runtime); CComBSTR bstrScript= ::SysAllocString(runtime.GetBuffer()); CComBSTR bstrLanguage = L"javascript"; VARIANT vEmpty = {0}; HRESULT ret=win->execScript(bstrScript,bstrLanguage,&vEmpty); if(ret!=S_OK){ ::AfxMessageBox(_T("加载出错,请重新刷新页面"),MB_OK); } } } } }
3. 脚本运行后,就可以拿到网页上的任何内容了。
实现的原理,类似于 firefox 下的 GreaseMonkey 插件。
利用这个原理,本人帮朋友开发了一款针对淘宝数据的免费挖掘机,有兴趣的朋友可以点击这里下载,欢迎任何建议和意见。