VC WebBrowser2 控件有关问题
VC WebBrowser2 控件问题
vc的WebBrowser和vb的WebBrowser是不是一样的,我想在vc的WebBrowser控件里模拟网页操作,在网上找了半天,大多都是vb的用法,比如下面的vb用法:
For i = 0 To WebBrowser1.Document.All.length - 1
If WebBrowser1.Document.All.Item(i, 0).Name = "submit1" Then
WebBrowser1.Document.All.Item(i, 0).Click
Exit For
End If
Next
在vc里要怎么来实现这样的模拟点击
------解决方案--------------------
贴部分代码供你参考:
IDispatch* pDispDocument;
hr = pBrowser->get_Document(&pDispDocument);
if (FAILED(hr))
{
continue;
}
IHTMLDocument2* pHTMLDocument2;
hr = pDispDocument->QueryInterface(IID_IHTMLDocument2,
(void**)&pHTMLDocument2);
if (FAILED(hr))
{
pDispDocument->Release();
continue;
}
//get element
IHTMLElementCollection* pColl = NULL;
hr = pHTMLDocument2->get_all(&pColl);
if (FAILED(hr))
{
pHTMLDocument2->Release();
pDispDocument->Release();
continue;
}
long lNumber = 0;
hr = pColl->get_length(&lNumber);
if (FAILED(hr))
{
pColl->Release();
pHTMLDocument2->Release();
pDispDocument->Release();
continue;
}
VARIANT varID;
varID.vt = VT_UINT;
VARIANT varIdx;
varIdx.vt = VT_UINT;
IDispatch *pDisElement;
for (long i = 0; i < lNumber; i++)
{
varID.lVal = i;
hr = pColl->item(varID, varIdx, &pDisElement);
if (FAILED(hr))
{
continue;
}
IHTMLElement* pElem;
hr = pDisElement->QueryInterface(IID_IHTMLElement, (void**)&pElem);
if (FAILED(hr))
{
pDisElement->Release();
continue;
}
BSTR className, tagName;
pElem->get_tagName(&tagName);
pElem->get_className(&className);
string strTagName = BSTR2string(tagName);
string strClassName = BSTR2string(className);
if ("INPUT" == strTagName)
{
string strAttribute = "type";
VARIANT ret;
BSTR attribute = string2BSTR(strAttribute);
hr = pElem->getAttribute(attribute, 0 , &ret);
if (ret.vt == VT_BSTR)
{
strAttribute = BSTR2string((BSTR)ret.pcVal);
}
if (SUCCEEDED(hr) && "image" == strAttribute)
{
IHTMLInputImage *pInputImage;
hr = pDisElement->QueryInterface(
IID_IHTMLInputImage,
(void **)&pInputImage);
if (SUCCEEDED(hr))
{
hr = pInputImage->get_src(&attribute);
strAttribute = BSTR2string(attribute);
if (SUCCEEDED(hr) && -1 != strAttribute.find("images/dl.gif"))
{
pElem->click();
}
pInputImage->Release();
}
}
}
------解决方案--------------------
vc的WebBrowser和vb的WebBrowser是不是一样的,我想在vc的WebBrowser控件里模拟网页操作,在网上找了半天,大多都是vb的用法,比如下面的vb用法:
For i = 0 To WebBrowser1.Document.All.length - 1
If WebBrowser1.Document.All.Item(i, 0).Name = "submit1" Then
WebBrowser1.Document.All.Item(i, 0).Click
Exit For
End If
Next
在vc里要怎么来实现这样的模拟点击
------解决方案--------------------
贴部分代码供你参考:
IDispatch* pDispDocument;
hr = pBrowser->get_Document(&pDispDocument);
if (FAILED(hr))
{
continue;
}
IHTMLDocument2* pHTMLDocument2;
hr = pDispDocument->QueryInterface(IID_IHTMLDocument2,
(void**)&pHTMLDocument2);
if (FAILED(hr))
{
pDispDocument->Release();
continue;
}
//get element
IHTMLElementCollection* pColl = NULL;
hr = pHTMLDocument2->get_all(&pColl);
if (FAILED(hr))
{
pHTMLDocument2->Release();
pDispDocument->Release();
continue;
}
long lNumber = 0;
hr = pColl->get_length(&lNumber);
if (FAILED(hr))
{
pColl->Release();
pHTMLDocument2->Release();
pDispDocument->Release();
continue;
}
VARIANT varID;
varID.vt = VT_UINT;
VARIANT varIdx;
varIdx.vt = VT_UINT;
IDispatch *pDisElement;
for (long i = 0; i < lNumber; i++)
{
varID.lVal = i;
hr = pColl->item(varID, varIdx, &pDisElement);
if (FAILED(hr))
{
continue;
}
IHTMLElement* pElem;
hr = pDisElement->QueryInterface(IID_IHTMLElement, (void**)&pElem);
if (FAILED(hr))
{
pDisElement->Release();
continue;
}
BSTR className, tagName;
pElem->get_tagName(&tagName);
pElem->get_className(&className);
string strTagName = BSTR2string(tagName);
string strClassName = BSTR2string(className);
if ("INPUT" == strTagName)
{
string strAttribute = "type";
VARIANT ret;
BSTR attribute = string2BSTR(strAttribute);
hr = pElem->getAttribute(attribute, 0 , &ret);
if (ret.vt == VT_BSTR)
{
strAttribute = BSTR2string((BSTR)ret.pcVal);
}
if (SUCCEEDED(hr) && "image" == strAttribute)
{
IHTMLInputImage *pInputImage;
hr = pDisElement->QueryInterface(
IID_IHTMLInputImage,
(void **)&pInputImage);
if (SUCCEEDED(hr))
{
hr = pInputImage->get_src(&attribute);
strAttribute = BSTR2string(attribute);
if (SUCCEEDED(hr) && -1 != strAttribute.find("images/dl.gif"))
{
pElem->click();
}
pInputImage->Release();
}
}
}
------解决方案--------------------