如何获取网页js脚本里input的变量值?

时间:2022-11-10 15:37:46
http://topic.csdn.net/u/20091102/00/4c41c3e8-87ae-482d-9886-9496dd7f11a6.html?57630
大家看这里,帮我解决一下问题,谢谢了

问题
--------------------------------------------------
我的程序里用了Web Browser控件,网页里有这么一段代码 
<input type=hidden name="SELECT_ID" value=""> 
js脚本会设置SELECT_ID的值。 
我的问题是如何在vc里获取这个SELECT_ID的值。 
是不是要先得到IHTMLInputElement接口,然后get_value?
--------------------------------------------------

7 个解决方案

#1


sf

#2


首先得到页面中的所有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接口

#3


IHTMLDocument3::getElementsByName 

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

#4


引用 2 楼 skyxie 的回复:
首先得到页面中的所有input元素

C/C++ code
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接口

还是不行,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转换成想要的字符串类型就可以了

#7


该回复于2012-04-05 09:21:31被版主删除

#1


sf

#2


首先得到页面中的所有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接口

#3


IHTMLDocument3::getElementsByName 

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

#4


引用 2 楼 skyxie 的回复:
首先得到页面中的所有input元素

C/C++ code
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接口

还是不行,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转换成想要的字符串类型就可以了

#7


该回复于2012-04-05 09:21:31被版主删除