大家看这里,帮我解决一下问题,谢谢了
问题
--------------------------------------------------
我的程序里用了Web Browser控件,网页里有这么一段代码
<input type=hidden name="SELECT_ID" value="">
js脚本会设置SELECT_ID的值。
我的问题是如何在vc里获取这个SELECT_ID的值。
是不是要先得到IHTMLInputElement接口,然后get_value?
--------------------------------------------------
7 个解决方案
#1
sf
#2
首先得到页面中的所有input元素
2. 对spCollAllInput 集合中的每个item判断name属性是否为SELECT_ID
如果是, IHTMLElement::put_value/get_value 就可以了 不需要 IHTMLInputElement接口
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接口
#3
IHTMLDocument3::getElementsByName
HRESULT getElementsByName( BSTR v,
IHTMLElementCollection **pelColl
);
HRESULT getElementsByName( BSTR v,
IHTMLElementCollection **pelColl
);
#4
还是不行,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));
}
}
}
}
}
#5
因为我网页里就一个input,所以我就没有判断直接用了
#6
我找到什么原因了,下面这句错了
pSELECTElem->get_value(&CComBSTR(lpValue));
改成
BSTR b;
pSELECTElem->get_value(&b);
然后再把b转换成想要的字符串类型就可以了
pSELECTElem->get_value(&CComBSTR(lpValue));
改成
BSTR b;
pSELECTElem->get_value(&b);
然后再把b转换成想要的字符串类型就可以了
#7
#1
sf
#2
首先得到页面中的所有input元素
2. 对spCollAllInput 集合中的每个item判断name属性是否为SELECT_ID
如果是, IHTMLElement::put_value/get_value 就可以了 不需要 IHTMLInputElement接口
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接口
#3
IHTMLDocument3::getElementsByName
HRESULT getElementsByName( BSTR v,
IHTMLElementCollection **pelColl
);
HRESULT getElementsByName( BSTR v,
IHTMLElementCollection **pelColl
);
#4
还是不行,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));
}
}
}
}
}
#5
因为我网页里就一个input,所以我就没有判断直接用了
#6
我找到什么原因了,下面这句错了
pSELECTElem->get_value(&CComBSTR(lpValue));
改成
BSTR b;
pSELECTElem->get_value(&b);
然后再把b转换成想要的字符串类型就可以了
pSELECTElem->get_value(&CComBSTR(lpValue));
改成
BSTR b;
pSELECTElem->get_value(&b);
然后再把b转换成想要的字符串类型就可以了