奉上100分,请各位大虾赐教!!!如何通过IHTMLDocument2 查询到某个IHTMLElement,并激发这个OnClick消息

duquan_dqs1 2008-01-10 11:25:23
奉上100分,请各位大虾赐教!!!如何通过IHTMLDocument2 查询到某个IHTMLElement,并激发这个OnClick消息
已得到IHTMLDocument2,HTML部分代码如下:
<SPAN style="CURSOR: pointer" onclick="document.getElementById('tabLoader').styledisplay = 'none';....>1</SPAN>
<SPAN style="CURSOR: pointer" onclick="document.getElementById('tabLoader').styledisplay = 'none';....>2</SPAN>
<SPAN style="CURSOR: pointer" onclick="document.getElementById('tabLoader').styledisplay = 'none';....>3</SPAN>
希望能得到其中每一个<SPAN>,并实现点击

原来上面的代码是直接出现链接地址的<a href=...>1</a>,我用下面的代码就可以搞定,
现在变成<SPAN ...>2</SPAN> , 就只能请各位大虾赐教【希望是代码指导】。

CWebBrowser2 m_webBrowser

IHTMLDocument2 *pHTMLDocument=NULL;
if (!(pHTMLDocument = (IHTMLDocument2*)m_webBrowser.GetDocument()))
return;
IHTMLElementCollection *pElemColl = NULL;
if ( FAILED(pHTMLDocument->get_links(&pElemColl)))//()get_links
return;
long ilHrefCount;
if(SUCCEEDED(pElemColl->get_length(&ilHrefCount)))
{
int ilHrefIndex = 0;
......
_variant_t vIndex;
vIndex.vt = VT_I4;
vIndex.lVal = ilHrefIndex;
IDispatch *pItem = NULL;
pElemColl->item(vIndex, vIndex, &pItem);
......
IHTMLElement * pElement = 0;
if(SUCCEEDED(pItem->QueryInterface(IID_IHTMLElement,(LPVOID*)&pElement)))
{
pElement->click();
}
}
...全文
434 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
duquan_dqs1 2008-01-11
  • 打赏
  • 举报
回复
谢谢 各位 的回复,问题已经解决!
javan007 2008-01-11
  • 打赏
  • 举报
回复
你可以通过给span 指定id的方法,也可以通过确定某个特别的属性来判断,比如你这里要找到包含有“下十頁”的span元素,那就直接判断span的innerText是否为下十頁,就可以了
duquan_dqs1 2008-01-11
  • 打赏
  • 举报
回复
多谢各位的解答,我现在按上面jameshooo 的方法找到了<span> 元素 ,可<span> 元素太多,而且个数不定,具体<span> 元素如下,再请问我如何定位某个具体的<span> 元素
<SPAN style="CURSOR: pointer" onclick="document.getElementById('tabLoader').style.display = 'none';document.getElementById('imgLoader').style.display = '';checkItem('CreateSearchList','SearchSubmit=送出&saveItem=1&duty0Cht=&duty0=1202&city0Cht=&city0=&trade0Cht=&trade0=&experience=&grade=&majorCht=&major=&character=&capital=&staff=&tempKeys='+'@1111@'+'20'+'@1111@'+'11' + '@1111@' + '' + '@1111@' + '0' + '@1111@','divSearchList')">下十頁</SPAN>

假如我就是要模拟点击“下十頁”这个元素该这样找到这个呢??
javan007 2008-01-11
  • 打赏
  • 举报
回复
你原来是<a>元素,所以你用pHTMLDocument-> get_links(&pElemColl)能够获得html文档中所有的链接元素,就是<a>元素。
现在元素更改为<span>了,你只需要通过元素标签名获取元素集合:代码如下:

HRESULT hr;
CComPtr<IHTMLDocument2> spDoc2 = NULL;
CComPtr<IHTMLDocument3 spDoc3 = NULL;
CComPtr<IHTMLElementCollection> spElemColl = NULL;
if (!(spDoc2 = (IHTMLDocument2*)m_webBrowser.GetDocument()))
return;
spDoc2->QueryInterface(IID_IHTMLDocument3, (void**)&spDoc3);
hr = spDoc3->getElementsByTagName(CComBSTR(_T("span")), &spElemColl);
if(SUCCEEDED(hr))
{
// 现在所有的span元素都在spElemColl里了。
}

eduyu 2008-01-11
  • 打赏
  • 举报
回复
IHTMLWindow::execScript()
duquan_dqs1 2008-01-11
  • 打赏
  • 举报
回复
谁能帮我解决!!!!
jameshooo 2008-01-11
  • 打赏
  • 举报
回复
get_links得到的是<a>元素,无法得到<span>元素。
你应该用get_all来得到所有元素集合,然后遍历集合,寻找tagName是“span”的元素,然后执行该元素的click方法。
最简单的办法是为每个希望的元素添加id属性,比如 <span id="span1" sytle=...>...</span>,这样可以直接用IHTMLDocument2::getElementById方法直接得到对应的元素,然后执行click方法
xiang_yun 2008-01-10
  • 打赏
  • 举报
回复
关注!!

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧