本帖最后由 skyxie 于 2009-11-02 12:43:11 编辑

解决方案 »

  1.   

    首先得到页面中的所有input元素
    CComPtr<IHTMLElementCollection> spCollAll;
    spCollAll = m_spDoc2->get_all(&spCollAll);CComPtr<IDispatch> spDispAllInput;
    spCollAll->tags(_variant_t(_T("img"), &spDispAllInput);CComQIPtr<IHTMLElementCollection> spCollAllInput = spDispAllInput;
    2. 对spCollAllInput 集合中的每个item判断name属性是否为SELECT_ID
    如果是, IHTMLElement::put_value/get_value 就可以了 不需要 IHTMLInputElement接口
      

  2.   

    IHTMLDocument3::getElementsByName HRESULT getElementsByName(          BSTR v,
        IHTMLElementCollection **pelColl
    );
      

  3.   

    还是不行,IHTMLElement接口没有put_value/get_value 这两个方法,我改成IHTMLInputElement就可以编译通过了。但是还是没有得到预期的SELECT_ID的值,得到的是个空字符串。
    因为在一开始的原始网页里SELECT_ID的值是设为空字符串的(""),所以我想不是这样得到的值只是网页中SELECT_ID的静态初始值,运行js脚本后的动态值怎样得到?
    CComPtr<IDispatch> pDisp;
    hr = m_pWB2->get_Document(&pDisp);
    if (SUCCEEDED(hr))   
    {
    CComQIPtr<IHTMLDocument2> pDoc2=pDisp;
    CComPtr<IHTMLElementCollection> pAll;
    hr = pDoc2->get_all(&pAll);
    if (SUCCEEDED(hr))
    {
    LPCOLESTR pszElementID;
    pszElementID=CComBSTR(lpID);
    //CComVariant varID = pszElementID;
    CComVariant varID = _T("input");
    CComPtr<IDispatch> pDispItem;
    CComPtr<IHTMLElement> pElem;
    hr = pAll->tags(varID, &pDispItem);
    if (SUCCEEDED(hr))
    {
    CComQIPtr<IHTMLElementCollection> pInputAll=pDispItem;
    CComVariant varSID = _T("SELECT_ID");
    CComPtr<IDispatch> pSELECTItem;
    hr = pInputAll->item(varSID, CComVariant(0), &pSELECTItem);
    if (SUCCEEDED(hr) && NULL!=pSELECTItem)
    {
    CComPtr<IHTMLInputElement> pSELECTElem;
    hr = pSELECTItem->QueryInterface(&pSELECTElem);
    if (SUCCEEDED(hr))
    {
    pSELECTElem->get_value(&CComBSTR(lpValue));
    }
    }
    }
    } }
      

  4.   

    因为我网页里就一个input,所以我就没有判断直接用了
      

  5.   

    我找到什么原因了,下面这句错了
    pSELECTElem->get_value(&CComBSTR(lpValue));
    改成
    BSTR b;
    pSELECTElem->get_value(&b);
    然后再把b转换成想要的字符串类型就可以了