// 웹 페이지 <form 태그의 a 태그 anchor 값 찾기
bool CMyInternetExplorer::FindAnchor (bool bClick, bool bFocus,
bool bName, bool bOuterText, bool bTooltip, bool bURL,
LPCTSTR sName, LPCTSTR sOuterText, LPCTSTR sTooltip, LPCTSTR sURL)
{
ASSERT (m_pWebBrowser != NULL);
if (m_pWebBrowser == NULL)
return false;
HRESULT hr;
IDispatch* pHtmlDocDispatch = NULL;
IHTMLDocument2 * pHtmlDoc = NULL;
bool bSearch = true;
// Retrieve the document object.
hr = m_pWebBrowser->get_Document (&pHtmlDocDispatch);
if (SUCCEEDED (hr) && (pHtmlDocDispatch != NULL))
{
hr = pHtmlDocDispatch->QueryInterface
(IID_IHTMLDocument2, (void**)&pHtmlDoc);
if (SUCCEEDED (hr) && (pHtmlDoc != NULL))
{
IHTMLElementCollection* pColl = NULL;
hr = pHtmlDoc->get_all (&pColl);
if (SUCCEEDED (hr) && (pColl != NULL))
{
// Obtained the Anchor Collection...
long nLength = 0;
pColl->get_length (&nLength);
for (int i = 0; i < nLength && bSearch; i++)
{
COleVariant vIdx ((long)i, VT_I4);
IDispatch* pElemDispatch = NULL;
IHTMLElement * pElem = NULL;
hr = pColl->item (vIdx, vIdx, &pElemDispatch);
if (SUCCEEDED (hr) &&
(pElemDispatch != NULL))
{
hr = pElemDispatch->QueryInterface
(IID_IHTMLElement, (void**)&pElem);
if (SUCCEEDED (hr) && (pElem != NULL))
{
BSTR bstrTagName;
CString sTempTagName;
if (!FAILED (pElem->get_tagName
(&bstrTagName)))
{
sTempTagName = bstrTagName;
SysFreeString (bstrTagName);
}
if (sTempTagName == _T ("a") ||
sTempTagName == _T ("A"))
{
IHTMLAnchorElement * pAnchor = NULL;
hr = pElemDispatch->QueryInterface
(IID_IHTMLAnchorElement,
(void**)&pAnchor);
if (SUCCEEDED (hr) &&
(pAnchor != NULL))
{
BSTR bstrName, bstrOuterText,
bstrURL, bstrTooltip;
CString sTempName, sTempOuter,
sTempURL, sTempTooltip;
if (!FAILED (pElem->get_outerText
(&bstrOuterText)))
{
sTempOuter = bstrOuterText;
SysFreeString (bstrOuterText);
}
if (!FAILED
(pElem->get_title
(&bstrTooltip)))
{
sTempTooltip = bstrTooltip;
SysFreeString (bstrTooltip);
}
if
(!FAILED (pAnchor->get_name
(&bstrName)))
{
sTempName = bstrName;
SysFreeString (bstrName);
}
if (!FAILED (pAnchor->get_href
(&bstrURL)))
{
sTempURL = bstrURL;
SysFreeString (bstrURL);
}
// Do the comparison here!
bool bMatches = true;
if (bMatches && bName)
{
if
(!StringHelper::WildcardCompareNoCase
(sName, sTempName))
bMatches = false;
}
if (bMatches && bOuterText)
{
if
(!StringHelper::WildcardCompareNoCase
(sOuterText, sTempOuter))
bMatches = false;
}
if (bMatches && bURL)
{
if
(!StringHelper::WildcardCompareNoCase
(sURL, sTempURL))
bMatches = false;
}
if (bMatches && bTooltip)
{
if
(!StringHelper::WildcardCompareNoCase
(sTooltip, sTempTooltip))
bMatches = false;
}
if (bMatches)
{
// No need to search more!
bSearch = false;
if (bFocus)
pAnchor->focus ();
if (bClick)
pElem->click ();
}
pAnchor->Release ();
}
}
pElem->Release ();
}
pElemDispatch->Release ();
}
}
pColl->Release ();
}
pHtmlDoc->Release();
}
pHtmlDocDispatch->Release ();
}
if (bSearch == false)
return true;
return false;
}
반응형
'IT-개발,DB' 카테고리의 다른 글
[개발/VC] 클릭했을때 이벤트 얻기 (0) | 2011.09.27 |
---|---|
[개발/VC] 웹페이지 마우스 위치에 있는 엘리먼트 얻어오기 (0) | 2011.09.27 |
[개발/MFC] 웹 페이지 <form 태그의 input 태그 값 채우기 (0) | 2011.09.27 |
[개발/VC] 인터넷 연결체크 (0) | 2011.09.27 |
[개발/MFC] 새 브라우저 생성 (0) | 2011.09.27 |
댓글