note : Web browser
发布日期:2021-06-30 22:04:06
浏览次数:2
分类:技术文章
本文共 7967 字,大约阅读时间需要 26 分钟。
用默认浏览器打开url
BOOL OpenUrlOnDefaultBrowser(const WCHAR * pcUrl) { HINSTANCE hRc = S_OK; std::wstring strParam = L""; strParam = ns_base::StringFormatV(L"url.dll,FileProtocolHandler %s", pcUrl); hRc = ShellExecuteW( NULL, L"open", L"rundll32.exe", strParam.c_str(), NULL, SW_SHOWNORMAL); return ((int)hRc > 32); }
ExecuteUrl
#include#include #include #include /// 按照给定的URL, 开一个浏览器窗口BOOL ExecuteUrl(WCHAR * pcUrl);int main( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow ){ ExecuteUrl(L"http://my.csdn.net/"); return 0; }BOOL ExecuteUrl(WCHAR * pcUrl){ HRESULT hr = S_FALSE; IWebBrowser2 * pBrowser = NULL; BSTR bstrURL = NULL; VARIANT vEmpty; if (NULL == pcUrl) return FALSE; if (FAILED(OleInitialize(NULL))) return FALSE; CoCreateInstance( CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&pBrowser); if (NULL == pBrowser) return FALSE; VariantInit(&vEmpty); bstrURL = SysAllocString(pcUrl); hr = pBrowser->Navigate(bstrURL, &vEmpty, &vEmpty, &vEmpty, &vEmpty); if (SUCCEEDED(hr)) { /// 只能是 VARIANT_TRUE, 填 VARIANT_FALSE 没效果 hr = pBrowser->put_Visible(VARIANT_TRUE); } else pBrowser->Quit(); SysFreeString(bstrURL); pBrowser->Release(); OleUninitialize(); return TRUE;}
遍历修改网页UI元素-文本
BOOL CWebPageAutoFill::fnWebPageAutoFill(){ /// 要填写元素都成功,才算成功 BOOL bRc_MailBoxNamePrefix = FALSE; BOOL bRc_MailBoxNamePostfix = FALSE; BOOL bRc_MailBoxPwd = FALSE; BOOL bRc_MailBoxVerifyPwd = FALSE; BOOL bOK_Elem = FALSE; BOOL bOK_InputElem = FALSE; long lIndex = 0; long lLen = 0; HRESULT hr = E_FAIL; BSTR bstrTagName = NULL; BSTR bstrClassName = NULL; BSTR bstrType = NULL; BSTR bstrName = NULL; IDispatch * pDispatchHtmlDoc = NULL; IDispatch* pElemDispatch = NULL; IHTMLDocument2 * pHtmlDoc = NULL; IHTMLElementCollection * pColl = NULL; IHTMLElement * pElem = NULL; IHTMLInputElement * pInputElem = NULL; if (NULL == m_pWebBrowser) goto _fnWebPageAutoFill_END; // Retrieve the document object. hr = m_pWebBrowser->get_Document(&pDispatchHtmlDoc); if (FAILED(hr) || (NULL == pDispatchHtmlDoc)) goto _fnWebPageAutoFill_END; hr = pDispatchHtmlDoc->QueryInterface( IID_IHTMLDocument2, (void**)&pHtmlDoc); if (FAILED(hr) || (NULL == pHtmlDoc)) goto _fnWebPageAutoFill_END; hr = pHtmlDoc->get_all (&pColl); if (FAILED(hr) || (NULL == pColl)) goto _fnWebPageAutoFill_END; // Obtained the Anchor Collection... pColl->get_length (&lLen); for (lIndex = 0; lIndex < lLen; lIndex++) { FreeBSTR(bstrTagName); FreeBSTR(bstrClassName); FreeBSTR(bstrType); FreeBSTR(bstrName); hr = pColl->item( CComVariant(lIndex), CComVariant(lIndex), &pElemDispatch); if (FAILED(hr) || (NULL == pElemDispatch)) goto _fnWebPageAutoFill_END; hr = pElemDispatch->QueryInterface( IID_IHTMLElement, (void**)&pElem); bOK_Elem = SUCCEEDED(hr); hr = pElemDispatch->QueryInterface( IID_IHTMLInputElement, (void**)&pInputElem); bOK_InputElem = SUCCEEDED(hr); /// bBOK_strValue 是 FALSE, 因为文本没有值, 需要填充文本内容 /// 即使取COM元素成功, 得到的COM对象也有可能是空的 /// e.g. 取内容为空的文本输入框内的内容, 那个BSTR就是空的 if (bOK_Elem && (NULL != pElem) && bOK_InputElem && (NULL != pInputElem)) { hr = AutoFill_GetElement(pElem, bstrTagName, bstrClassName); if (FAILED(hr)) continue; hr = AutoFill_GetInputElement(pInputElem, bstrType, bstrName); if FAILED(hr) continue; hr = AutoFill_MailBoxNamePerfix( pInputElem, bstrTagName, bstrClassName, bstrType, bstrName); if (SUCCEEDED(hr)) { bRc_MailBoxNamePrefix = TRUE; continue; } hr = AutoFill_MailBoxNamePostfix( pInputElem, bstrTagName, bstrClassName, bstrType, bstrName); if (SUCCEEDED(hr)) { bRc_MailBoxNamePostfix = TRUE; continue; } hr = AutoFill_MailBoxPwd( pInputElem, bstrTagName, bstrClassName, bstrType, bstrName); if (SUCCEEDED(hr)) { bRc_MailBoxPwd = TRUE; continue; } hr = AutoFill_MailBoxVerifyPwd( pInputElem, bstrTagName, bstrClassName, bstrType, bstrName); if (SUCCEEDED(hr)) { bRc_MailBoxVerifyPwd = TRUE; break; ///< Web页面元素都填完了,跳出循环! } } }_fnWebPageAutoFill_END: FreeBSTR(bstrTagName); FreeBSTR(bstrClassName); FreeBSTR(bstrType); FreeBSTR(bstrName); if (NULL != pInputElem) pInputElem->Release(); if (NULL != pElem) pElem->Release(); if (NULL != pElemDispatch) pElemDispatch->Release(); if (NULL != pColl) pColl->Release(); if (NULL != pHtmlDoc) pHtmlDoc->Release(); if (NULL != pDispatchHtmlDoc) pDispatchHtmlDoc->Release(); /// 元素都填写成功了, 才算成功 return (bRc_MailBoxNamePrefix && bRc_MailBoxNamePostfix && bRc_MailBoxPwd && bRc_MailBoxVerifyPwd);}
取网页元素值-文本
HRESULT CWebPageAutoFill::AutoFill_GetElement( IHTMLElement * pElem, BSTR & bstrTagName, BSTR & bstrClassName){ HRESULT hr = E_FAIL; bstrTagName = NULL; bstrClassName = NULL; if (NULL != pElem) { hr = pElem->get_tagName(&bstrTagName); if (FAILED(hr) || (NULL == bstrTagName)) return E_FAIL; hr = pElem->get_className(&bstrClassName); if (FAILED(hr) || (NULL == bstrClassName)) return E_FAIL; } return S_OK;}HRESULT CWebPageAutoFill::AutoFill_GetInputElement( IHTMLInputElement * pInputElem, BSTR & bstrType, BSTR & bstrName){ HRESULT hr = E_FAIL; bstrType = NULL; bstrName = NULL; if (NULL != pInputElem) { hr = pInputElem->get_type(&bstrType); if (FAILED(hr) || (NULL == bstrType)) return E_FAIL; hr = pInputElem->get_name(&bstrName); if (FAILED(hr) || (NULL == bstrName)) return E_FAIL; } return S_OK;}
元素值的比较和修改-文本
HRESULT CWebPageAutoFill::AutoFill_MailBoxNamePerfix( IHTMLInputElement * pInputElem, BSTR & bstrTagName, BSTR & bstrClassName, BSTR & bstrType, BSTR & bstrName){ BSTR bstrValue = NULL; std::wstring strMailBoxName; std::wstring strMailBoxPwd; if ((NULL == pInputElem) || (NULL == bstrTagName) || (NULL == bstrClassName) || (NULL == bstrType) || (NULL == bstrName)) { return E_FAIL; } /// 寻找邮箱名称 /// if ((0 == _tcsicmp(bstrTagName, L"input")) && (0 == _tcsicmp(bstrClassName, L"inputStyle")) && (0 == _tcsicmp(bstrType, L"text")) && (0 == _tcsicmp(bstrName, L"email"))) { /// 得到Web页面填充参数 GetParam_MailBoxReg(strMailBoxName, strMailBoxPwd); /// 设置邮箱名称 bstrValue = SysAllocString(strMailBoxName.c_str()); pInputElem->put_value(bstrValue); SysFreeString(bstrValue); return S_OK; } return E_FAIL;}
转载地址:https://lostspeed.blog.csdn.net/article/details/12690143 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月23日 09时17分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Hourglass Network 沙漏网络 (pose estimation姿态估计)
2019-04-30
OpenCV实战(二)——答题卡识别判卷
2019-04-30
目标检测神经网络的发展历程(52 个目标检测模型)
2019-04-30
Boundary loss 损失函数
2019-04-30
tensorflow使用tensorboard进行可视化
2019-04-30
凸优化 convex optimization
2019-04-30
数据库索引 & 为什么要对数据库建立索引 / 数据库建立索引为什么会加快查询速度
2019-04-30
IEEE与APA引用格式
2019-04-30
research gap
2019-04-30
pytorch训练cifar10数据集查看各个种类图片的准确率
2019-04-30
Python鼠标点击图片,获取点击点的像素坐标
2019-04-30
路径规划(一) —— 环境描述(Grid Map & Feature Map) & 全局路径规划(最优路径规划(Dijkstra&A*star) & 概率路径规划(PRM&RRT))
2019-04-30
RRT算法(快速拓展随机树)的Python实现
2019-04-30
强化学习(四) —— Actor-Critic演员评论家 & code
2021-07-03
RESTful API
2019-04-30