社区
Windows SDK/API
帖子详情
在CppWebBrowser显示的网页上自动填写用户名密码
lvxiangqun86
2011-11-15 08:40:04
我在C++builder 6.0的开发环境中,用CppWebBrowser控件做了一个模拟的IE浏览器。用它显示一个126邮箱的登录网页,现在我想怎么可以将窗体上的用户名和密码自动添加到126邮箱的网页上,在添加完后,自动点击登录按钮实现登录。
我刚用C++ 不懂,有哪位大侠能给解决一下吗。
...全文
369
5
打赏
收藏
在CppWebBrowser显示的网页上自动填写用户名密码
我在C++builder 6.0的开发环境中,用CppWebBrowser控件做了一个模拟的IE浏览器。用它显示一个126邮箱的登录网页,现在我想怎么可以将窗体上的用户名和密码自动添加到126邮箱的网页上,在添加完后,自动点击登录按钮实现登录。 我刚用C++ 不懂,有哪位大侠能给解决一下吗。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
失落的羊
2012-02-01
打赏
举报
回复
http://blog.csdn.net/tonnyli/article/details/7225975
失落的羊
2012-02-01
打赏
举报
回复
void __fastcall TMainForm::PutInput(TCppWebBrowser *CppWebBrowser1, AnsiString ActionStr)
{
//赋值
AnsiString MyStr = ActionStr;
AnsiString SName,SId,SValue;
SName = MyStr.SubString(1,MyStr.Pos(",")-1);
MyStr = MyStr.SubString(MyStr.Pos(",")+1,MyStr.Length()-MyStr.Pos(","));
SId = MyStr.SubString(1,MyStr.Pos(",")-1);
SValue = MyStr.SubString(MyStr.Pos(",")+1,MyStr.Length());
if(SValue==NULL)SValue="";
VARIANT id, index,id1,index1;
IDispatch *spDispatch;
IHTMLDocument2 *pDoc2;
IHTMLElement *pElement;
IHTMLElementCollection *pElementCol;
IHTMLFormElement *pFormElement;
IHTMLInputElement *pInputElement;//Input
//TonnyLi add
IHTMLTextAreaElement* pTextAreaElement;// TextArea
IDispatch *WebDocument=static_cast<IDispatch*>(CppWebBrowser1->Document);
pDoc2=static_cast<IHTMLDocument2*>(WebDocument);
//首先获取IWebBrowser2接口
if (SUCCEEDED(pDoc2->get_forms(&pElementCol))) //得到form
{
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p))) //哪一个form
if(p!=0)
{
for(long i=0;i<=(p-1);i++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = i;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pElementCol->item(id,index, &spDispatch)))
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
{
long q=0;
if(SUCCEEDED(pFormElement->get_length(&q))) //得到form中的控件个数
for(long j=0;j<=(q-1);j++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = j;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pFormElement->item(id,index, &spDispatch)))
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLElement,(void**)&pElement)))
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLInputElement,(void**)&pInputElement)))
{
//AfxMessageBox("已经获取IHTMLInputTextElement");
BSTR Value;
BSTR Type;
BSTR Id;
BSTR Name;
pInputElement->get_type(&Type); //获取类型
pInputElement->get_value(&Value); //获取值
pElement->get_id(&Id);//获取Id的方法不一样
pInputElement->get_name(&Name); //获取它的名字
AnsiString tempName,tempType;
tempType = AnsiString(Type).UpperCase();
if(tempType == "RADIO")
tempName = AnsiString(Name).UpperCase();
else
{ //优先使用name 如果没有则用id
tempName = AnsiString(Name).UpperCase();
if(tempName.IsEmpty())
{
tempName = AnsiString(Id).UpperCase();
if(tempName.IsEmpty())//如果没有name & id
tempName = AnsiString(Type).UpperCase();
}
}
if(tempName!=NULL && ((tempName.Trim()).Length()>0) && tempName == SId.UpperCase())
{
tempName = AnsiString(Type).UpperCase();
if(tempName == "TEXT") //获取和设置文本框的值
{
// WideString temp = SValue;
pInputElement->put_value((WideString)SValue.c_str());
}
else if(tempName == "HIDDEN") //获取和设置hidden 的值
{
pInputElement->put_value((WideString)SValue.c_str());
}
else if(tempName == "PASSWORD") //获取和设置密码框的值
{
pInputElement->put_value((WideString)SValue.c_str());
}
else if(tempName == "RADIO") //获取和设置单选的值
{
pElement->click(); //模拟单击
}
else if(tempName == "CHECKBOX") //获取和设置多选框的值
{
pElement->click(); //模拟单击
// pInputElement->put_checked(j);
}
else if(tempName == "BUTTON") //非提交按钮
{
//pElement->click(); //模拟单击
}
else if(tempName == "SUBMIT") //提交按钮
{
//模拟单击
tempName = AnsiString(Value).UpperCase();
if(tempName==SValue.UpperCase())
pElement->click();
}
break;
}//如果不符,则不做处理
pInputElement->Release();
}
else //不是input框
{
//TonnyLi add begin
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLTextAreaElement,(void**)&pTextAreaElement)))
{//Textarea
BSTR Value;
BSTR Type;
BSTR Id;
BSTR Name;
//pTextAreaElement->get_type(&Type); //获取类型
pTextAreaElement->get_value(&Value); //获取值
pElement->get_id(&Id);//获取Id的方法不一样
pTextAreaElement->get_name(&Name); //获取它的名字
AnsiString tempName,tempType;
tempName = AnsiString(Name).UpperCase();
if(tempName.IsEmpty())
tempName = AnsiString(Id).UpperCase();
//tempName = AnsiString(Id).UpperCase();
if(tempName!=NULL && ((tempName.Trim()).Length()>0) && tempName == SId.UpperCase())
{
pTextAreaElement->put_value((WideString)SValue.c_str());
break;
}
pTextAreaElement->Release();
}//if Textarea
//TonnyLi add
}
pElement->Release();
}//if pelement
spDispatch->Release();
}
}
pFormElement->Release();
}
spDispatch->Release();
}
}
}
}
if(pDoc2) pDoc2->Release();
}
失落的羊
2012-01-31
打赏
举报
回复
明天给你贴段代码,刚好这几天我正弄这个。
__lhy
2012-01-30
打赏
举报
回复
http://download.csdn.net/detail/qq752923276/3809411
失落的羊
2012-01-29
打赏
举报
回复
以前见到类似的例子,搜索一下,应该可以找到。
Cpp
Web
Browser
下如何
自动
填充HTML表单对象
对于那些需要频繁处理
网页
表单的应用场景(如在线考试、问卷调查等),利用编程语言实现
网页
表单的
自动
填写
能够极大地提升效率。本文将详细介绍如何使用
Cpp
Web
Browser
来实现这一功能。 ####
Cpp
Web
Browser
简介 ...
BCB
Cpp
Web
Browser
刷在线
【标题】"BCB
Cpp
Web
Browser
刷在线"是一个基于C++ Builder(BCB)开发的工具,它利用了
Cpp
Web
Browser
控件来实现
网页
的
自动
刷新功能,以维持用户的在线状态。这个工具的主要目的是在用户不需手动操作的情况下,持续...
如何访问
Cpp
Web
Browser
加载页面中IHTMLElement 对象的值
在本篇文档中,我们将深入探讨如何在C++Builder环境下使用
Cpp
Web
Browser
控件来访问
网页
中的`IHTMLElement`对象的值。此方法主要用于获取页面上由用户输入的内容,例如表单字段等。 ### 一、理解
Cpp
Web
Browser
...
one.rar_
Cpp
Web
Browser
1. **导入组件**:首先,需要在C++ Builder的工具箱中导入`
Cpp
Web
Browser
`组件,然后在界面上拖放该组件以创建实例。 2. **接口实现**:`
Cpp
Web
Browser
`组件基于`IDispatch`接口,允许通过COM(Component Object ...
用
Web
Browse
显示
PDF和WORD文档
在IT领域,尤其是在Windows应用程序开发中,有时候我们需要在应用程序内部集成文档查看功能,而无需依赖外部软件。"用
Web
Browse
显示
PDF和WORD文档"这个主题就是关于如何利用
Web
Browser
控件来实现这一功能的。...
Windows SDK/API
1,222
社区成员
8,135
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章