在下是新手,公司让我做一个登录接口,我没有经验,自己摸索不出方案,恳求高手指点迷津。
具体要求是用MFC或C++写个服务器端的程序,当客户端传来数据时,把数据自动填写到指定的网页上并提交。
总之就是模拟登录。
恳求高人给些思路,告诉我要用哪些类和哪些函数。感激不尽。CC++模拟登录
具体要求是用MFC或C++写个服务器端的程序,当客户端传来数据时,把数据自动填写到指定的网页上并提交。
总之就是模拟登录。
恳求高人给些思路,告诉我要用哪些类和哪些函数。感激不尽。CC++模拟登录
调试欢乐多
我在网上搜的代码复制上去运行有问题。
CComPtr < IDispatch > spDispDoc;
CComQIPtr< IHTMLDocument2 > spDocument2;
CComQIPtr<IHTMLElementCollection> spElementCollection;
//在控件里打开网页,test是我传过来的this指针
test->m_webBrowser.Navigate("http://www.11185.com.cn/user/login.html",NULL,NULL,NULL,NULL);
spDispDoc=(IDispatch *)test->m_webBrowser.GetDocument();
//下面这句运行出错。好像是因为指针不能为空
spDispDoc->QueryInterface(IID_IHTMLDocument2,(void **)&spDocument2);
我在网上搜了很多,用socket发包也看到过,但那是底层协议方式,我看别人写的代码里还有什么抓包之类,传递的字符串内容也不甚了解,我对套接字不是很熟。
我现在是用WebBrowser控件关联的CWebBrowser2类实现了打开网页并自动填写表单,但问题又来了:
我无法让表单提交,我查看网页源码发现提交按钮没有id和name,如下:
<input type="submit" value=" " class="button"/>
我现在想请教如何操纵这个按钮使其触发submit事件从而提交表单。
<form id="loginForm" onsubmit="saveUsername(this);return validateForm(this)" method="post">
我的代码是这样:
if(SUCCEEDED(spDocument2->get_all(&spElementCollection)))
{
CComPtr<IDispatch> spDisp;
HRESULT hr;
hr = spElementCollection->item(CComVariant("loginForm"),CComVariant((long)0), &spDisp);
if(SUCCEEDED(hr))
{
CComQIPtr<IHTMLFormElement>spForm = spDisp;
spForm->submit();
}
}
其中最后一句spForm我试验用spForm->reset(),则表单已填内容就消失,说明spForm确实能操纵表单了,
但用submit时就会约3到4秒的时间后,控件里的网页跳到一个显示着“系统错误”的页面。
既不是登录成功,也不是登录失败,这是什么原因???
诚心请求高人解惑。
经过一个多星期连天加夜的努力(我是新手,很多东西要学),终于成功了。
诸位给的方向确实是正确的。我一开始用的就是WebBrowser控件,不想中途改用其他方法。因为这样又要从头开始。
现在回顾,oyljerry前辈的话虽然简短,确是精确无误的。