WebBrowser 如何获取网页元素呀?

a3622041 2018-09-29 10:05:49
m_Web.Navigate(__T("https://www.baidu.com"),NULL,NULL,NULL,NULL); 我打开了百度
如何去里面自动输入文字呢?

查资料说是利用GetDocument

但是一直提示:
error C2039: “GetDocument”: 不是“CWebBrowser2”的成员
...全文
355 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
a3622041 2018-10-08
  • 打赏
  • 举报
回复
引用 10 楼 cvbtvbwu 的回复:
你这个网址是内网,我调试不了。会不会是check_login这个JS函数干了啥

function check_login()
{
var a = "1";
if(document.f.p_pass.value != "" && document.f.login_name.value != "")
{
if(document.f.login_mode.value == 1 && document.f.login_name.value == "cvr_admin")
{
alert("nvr_admin没有DVR登陆模式!");
} else if(a != 1 && document.f.login_name.value == "nvr_admin"){
alert("您的输入有误(不能用CVR用户登陆)");
// doFireEvent(document.getElementById("login_dynamic"), "click");
}else {
doFireEvent(document.getElementById("login_dynamic"), "click");
}
}
else
{
alert("您的输入有误(用户名或密码不能为空)");
}
}
代码是这样的 怎么处理呢?
叶恭介叶恭介 2018-09-30
  • 打赏
  • 举报
回复
我觉得你应该先试下百度搜索填文本点击搜索看行不行先
叶恭介叶恭介 2018-09-30
  • 打赏
  • 举报
回复
你这个网址是内网,我调试不了。会不会是check_login这个JS函数干了啥
a3622041 2018-09-30
  • 打赏
  • 举报
回复
引用 6 楼 cvbtvbwu 的回复:
可以联系我,发工程过来看看。


私信还是QQ?

HRESULT hr;
LPUNKNOWN lpUnknown;
LPUNKNOWN lpUnknownWB = NULL;
LPUNKNOWN lpUnknownDC = NULL;
IHTMLElementCollection *objAllElement=NULL;
IHTMLDocument2 *objDocument=NULL;
CString strUrl,strTemp;

lpUnknown = m_web.GetControlUnknown();
ASSERT(lpUnknown);

if (lpUnknown)
{
hr = lpUnknown->QueryInterface(IID_IUnknown,(LPVOID*)&lpUnknownWB);
ASSERT(SUCCEEDED(hr));
if (FAILED(hr))
return;

hr = pDisp->QueryInterface(IID_IUnknown, (LPVOID*)&lpUnknownDC);
ASSERT(SUCCEEDED(hr));
if (SUCCEEDED(hr) && lpUnknownWB == lpUnknownDC)
{
// The document has finished loading.
strUrl=m_web.get_LocationURL();
if (strUrl.IsEmpty())
{
return ;
}
objDocument=(IHTMLDocument2*)m_web.get_Document();
objDocument->get_all(&objAllElement);
if (strUrl==_T("https://43.4.213.11:2004/"))
{
CComPtr<IDispatch>pDisp;
objAllElement->item(COleVariant(_T("p_pass")),COleVariant((long)0),&pDisp);
CComQIPtr<IHTMLElement, &IID_IHTMLElement>pElement;
if(pDisp==NULL)
{
return;
}
else
{
pElement=pDisp;
pElement->put_innerText(_T("123")); //填充表单
}

VARIANT name;
CComBSTR tag;
long index;
objAllElement-> get_length(&index);
name.vt=VT_I4;
for(long i=0; i <index; i++)//遍历所有元素,通过id属性获取值
{
name.lVal = i;
IDispatch * pDispatch=NULL;
objAllElement-> item(name,name,&pDispatch);
IHTMLElement* spElement;
pDispatch-> QueryInterface(IID_IHTMLElement, (void**)&spElement);
BSTR tag;
spElement->get_className(&tag);
CString ss(tag);
if(ss == "login-btn-01")
{
spElement->click();
MessageBox(_T("Sucess!"));
}
spElement->Release();
}
}
}
}

if (lpUnknownWB)
lpUnknownWB->Release();

if (lpUnknownDC)
lpUnknownDC->Release();


会出现sucess的弹窗 密码框也会输入密码 就是不知道原因 没有点击
叶恭介叶恭介 2018-09-30
  • 打赏
  • 举报
回复
可以联系我,发工程过来看看。
a3622041 2018-09-30
  • 打赏
  • 举报
回复
a3622041 2018-09-30
  • 打赏
  • 举报
回复
引用 8 楼 cvbtvbwu 的回复:
我觉得你应该先试下百度搜索填文本点击搜索看行不行先
试了 没问题
叶恭介叶恭介 2018-09-29
  • 打赏
  • 举报
回复
CWebBrowser2 m_Explorer;

//获得对象
CComPtr<IDispatch> pDispatch;
pDispatch = m_Explorer.get_Document();

//获得ihtml接口
CComPtr<IHTMLDocument2> spDocument;
HRESULT hr = pDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&spDocument);
if (FAILED(hr))
return FALSE;

//获得内容
CComPtr<IHTMLElement> spBody;
hr = spDocument->get_body(&spBody);
if (FAILED(hr) || spBody == NULL)
return FALSE;

楼主试试吧
a3622041 2018-09-29
  • 打赏
  • 举报
回复
引用 2 楼 cvbtvbwu 的回复:
CWebBrowser2 m_Explorer;

//获得对象
CComPtr<IDispatch> pDispatch;
pDispatch = m_Explorer.get_Document();

//获得ihtml接口
CComPtr<IHTMLDocument2> spDocument;
HRESULT hr = pDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&spDocument);
if (FAILED(hr))
return FALSE;

//获得内容
CComPtr<IHTMLElement> spBody;
hr = spDocument->get_body(&spBody);
if (FAILED(hr) || spBody == NULL)
return FALSE;

楼主试试吧


我找了个https://blog.csdn.net/one_in_one/article/details/26372981 但是没办法关联DECLARE_EVENTSINK_MAP()
a3622041 2018-09-29
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
https://blog.csdn.net/chen504390172/article/details/17022113


DECLARE_EVENTSINK_MAP()

void DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL); 我查了资料 添加这个DECLARE_EVENTSINK_MAP() 提示2001错误 我想问一下 这个到底在哪里添加呀 谢谢了

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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