我现在能搞定网页中所有链接和所有图片,但是提取CSS文件时出错,其代码如下:
TCHAR HostName[200*MAX_PATH];
CComPtr<IDispatch> spDispatch;
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
CComPtr<IHTMLElementCollection> pElementCol;
CComPtr<IHTMLLinkElement> pLink1;
  //IHTMLElement 
// TODO: Add your control notification handler code here
int n = m_LinksList.GetItemCount();//GetCount(); for (int i = 0; i < n; i ++){
IWebBrowser2 *pBrowser = (IWebBrowser2 *)m_LinksList.GetItemData(i);
if (pBrowser){
pBrowser->Release();
}
}//设置最后一个IE窗口为数据窗口 m_LinksList.DeleteAllItems();
m_LinksNum = 0;
Log("**************************************************************");
Log("\r\n"); if (m_spSHWinds){
int n = m_spSHWinds->GetCount();
for (int i = 0; i < n; i++){
_variant_t v = (long)i;
IDispatchPtr spDisp = m_spSHWinds->Item(v);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);   //生成一个IE窗口的智能指针
if (spBrowser){ if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))//打开一个IE窗口文档
pDoc2 = spDispatch;
if(pDoc2!=NULL)
{ if (SUCCEEDED(pDoc2->get_links(&pElementCol)))//获得连接
{
// AfxMessageBox("IHTMLElementCollection");
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p)))
if(p!=0)
{   
m_LinksNum = m_LinksNum+p;//连接数
UpdateData(FALSE);//更新EDITBOX for(long i=0;i<=(p-1);i++)
{ CComBSTR String;
_variant_t index = i;
if(SUCCEEDED(pElementCol->item( index, index, &spDispatch)))
if(SUCCEEDED(spDispatch->QueryInterface( IID_IHTMLLinkElement,(void **) &pLink1)))//获得单个连接
pLink1->get_href(&String);//得到是一个空串********
ZeroMemory(HostName,200*MAX_PATH);
lstrcpy(HostName,_bstr_t(String)); 
//pLoct->get_target 
//添加到列表
m_LinksList.InsertItem(i,HostName);
m_LinksList.SetCheck(i,TRUE);
  pLink1->get_rel(&String);//提示出错**********                                    ZeroMemory(HostName,200*MAX_PATH);
lstrcpy(HostName,_bstr_t(String)); 
if(lstrlen(HostName))
{
m_LinksList.SetItemText(i,1,HostName);
Log(HostName );
Log("\r\n");
}}}}
}}}}

解决方案 »

  1.   

    HRESULT IHTMLDocument2::get_scripts(IHTMLElementCollection **p);+IHTMLScriptElement::src
    HRESULT IHTMLDocument2::get_styleSheets(IHTMLStyleSheetsCollection **p);+IHTMLStyleSheet::href
      

  2.   

    jiangsheng(蒋晟.Net)老大:
         你提供的两个函数可否详细一点呢,我试老半天,好像HREF是IHTMLStyleSheet的保护型成员变量,不能直接访问。不过我还有一个问题:
    <OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0' WIDTH=468 HEIGHT=60><PARAM NAME=movie VALUE='/adv/homepage/IBMC2003528_468x60.swf'> <PARAM NAME=quality VALUE=high> <EMBED src='/adv/homepage/IBMC2003528_468x60.swf' quality=high border=0 WIDTH=468 HEIGHT=60 TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'></EMBED></OBJECT>在这里面的FLASH文件的地址好像不好提出来的!(有请你再给一点提示,不胜感激!!分值少了可以再加):-)
        
      

  3.   

    1 IHTMLStyleSheet只是接口而已,没有成员变量,你怎么试的?
    2 http://www.csdn.net/develop/author/netauthor/jiangsheng/
    如何: 通过HTML文档对象模型访问文档中的ActiveX控件的属性
      

  4.   

    jiangsheng(蒋晟.Net)老大:
        十分感谢!