网页自动填写的问题(session控制)。大家帮忙!

icefire8287 2006-09-04 09:56:13
网站中首先输入用户名和密码,验证通过后,进入下一页面填写信息。

现在想用Delphi实现以上登录和信息填写的操作功能。

现在登录功能已经实现,但是,因为信息的填写网页中用到了session控制,
也就是登录的情况下,确定了用户后才能填写信息,请问这里我该用什么控件怎么实现?

谢谢~~
...全文
683 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
icefire8287 2006-09-07
  • 打赏
  • 举报
回复
TO :jiangsheng(蒋晟.Net[MVP])
由于对控件不太熟悉,能不能给些具体参考啊?这个“判断URL是否是框架的”该怎么理解啊?这个要填表的网页本来就在框架内部啊?

网页显示顺序是:登录页面->主菜单页面->(在选择某个菜单后)在框架内部显示填表页面

那我是不是应该先用Navigate Post 用户名和密码到“登录页面”,然后再对返回的“主
菜单页面”进行处理?但是,这个Navigate 的PostData参数不会用啊~~

icefire8287 2006-09-07
  • 打赏
  • 举报
回复
TO:netliuming(你有安全感吗?)
谢谢你的回复,这个实例使我学会了处理带cookie网站的登录等操作,但是,这个好像暂
时不能解决我现在的问题。还有其他办法吗?
netliuming 2006-09-06
  • 打赏
  • 举报
回复
以前我是用IdHTTP1+TIdCookieManager的。
过程大体如下:
Cookie = new TIdCookieManager(this);
Cookie->OnNewCookie = &CookieNewCookie;
IOSocket = new TIdSSLIOHandlerSocket(this);
HTTP = new TIdHTTP(this);
HTTP->ReadTimeout = 5000;
HTTP->AllowCookies = true;
HTTP->IOHandler = IOSocket;
HTTP->CookieManager = Cookie;
HTTP->ProtocolVersion = pv1_1;
HTTP->HTTPOptions << hoKeepOrigProtocol << hoInProcessAuth << hoForceEncodeParams;

在OnNewCookie事件中保存ACookie.
void __fastcall TfrmFireWall::CookieNewCookie(TObject *ASender,
TIdCookieRFC2109 *ACookie, bool &VAccept)
{
int pos = ACookie->CookieText.Pos(";");

if ( pos > 0 )
FSessionID = ACookie->CookieText.SubString( 1, pos -1 );
else
FSessionID = ACookie->CookieText;

}

//登录:
TStringStream *Response;
TStringStream *Source;
bool rSuccess;
AnsiString URL, User, Password;

User = usr;
Password = pwd;

Source = new TStringStream("");
Response = new TStringStream("");
HTTP->ReadTimeout = 50000;
try{
try
{
URL = FUrl + LOGIN_CGI;
Source->WriteString("username=" + User + "&password=" + Password);
HTTP->Post( URL, Source, Response );
Response->Position = 0;
Rtl = Response->DataString;
if ( Rtl == "" ){
rSuccess = true;
}else{
rSuccess = false;
if ( Rtl.Pos("系统繁忙") > 0 )
{
Status = "系统繁忙,请稍后登录";
}
else
{
Status = "登陆失败!请检查用户名、密码是否正确";
}
}
}
catch( Exception &exception )
{
Status = exception.Message;
rSuccess = false;
Timer1->Enabled = false;
}
} __finally{
delete Source;
delete Response;
}


//后续操作
AnsiString URL, LinkHead;
TStringList *Source;
TStringStream* Response;
URL = FUrl + cgi;
Source = new TStringList;
Source->Text = Para;
Response->Position = 0;
try{
HTTP->ReadTimeout = OverTimeInterval;
HTTP->Request->CustomHeaders->Add("Cookie:" + FSessionID);
HTTP->Post( URL, Source, Response );
if ( Response->DataString.Pos("登录过时") > 0 )
{
Timer1->Enabled = false;
AnsiString ErrInfo = "登录过时,请重新登录";
}
}
catch(Exception &exception){
if ( exception.Message == "Read Timeout" )
{
Application->MessageBox( exception.Message.c_str(), "信息提示", MB_OK | MB_ICONWARNING );
}else if ( exception.Message.Pos("400 Bad Request") > 0 )
{
}else{
}
}
delete Source;
icefire8287 2006-09-05
  • 打赏
  • 举报
回复
那如果用“TIdCookieManager”呢?
蒋晟 2006-09-05
  • 打赏
  • 举报
回复
WebBrowser control

procedure TForm1.FillForm;
var
Doc: IHTMLDocument2;
I: Integer;
Element: OleVariant;
Elements: IHTMLElementCollection;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
Elements := Doc.all;
for I := 0 to Elements.length - 1 do
begin
Element := Elements.item(I, varEmpty);
if (Element.tagName = 'INPUT') and (Element.type = 'text') and
(Element.name = 'Email') then
Element.value := 'email@aaa.aaa';
end;
end;

蒋晟 2006-09-05
  • 打赏
  • 举报
回复
那就自动化
Navigate之后在DocumentComplete里面判断URL是否是框架的,如果是的话就填表
icefire8287 2006-09-05
  • 打赏
  • 举报
回复
TO :jiangsheng(蒋晟.Net[MVP])
因为登录过后,页面会转到一个主页面,再选择菜单才在框架内部出现填表的菜单。所以,这样查找可以查到吗?

TO:netliuming(你有安全感吗?)
这个网站其实就是局域网的一个网页而已,登录的时候是不产生cookie的,能不能把你的办法说得具体些?
netliuming 2006-09-05
  • 打赏
  • 举报
回复
把cookie保存下来,以后每次post时再作为参数传上去就OK.
内容概要:本文研究了基于QLearning自适应强化学习的PID控制器在自主水下航行器(AUV)中的应用,通过Matlab代码实现了对水下机器人的动力学建模与运动控制。重点探讨了将强化学习算法QLearning与传统PID控制相结合的方法,以提升AUV在复杂、时变及非线性水下环境中的自适应控制能力。文中系统分析了AUV的运动学与动力学特性,阐述了传统PID参数整定面临的挑战,并提出采用QLearning算法在线动态优化PID控制器的比例、积分和微分参数,从而实现对系统误差、响应速度、超调量等性能指标的综合优化。通过Matlab仿真实验验证了该复合控制策略在轨迹跟踪精度、抗外部干扰能力和系统鲁棒性方面的显著优势,充分展示了强化学习在智能水下装备自主控制领域的可行性和应用潜力。; 适合人群:具备自动控制理论基础、强化学习基础知识及Matlab编程能力的研究生、科研人员和自动化、海洋工程、机器人等相关领域的技术研发人员。; 使用场景及目标:①用于水下机器人、无人潜航器等智能移动装备的高精度运动控制系统设计与开发;②开展强化学习与经典控制理论融合创新的教学案例与科学研究;③解决传统固定参数PID控制器在面对模型不确定性和环境扰动时适应性差、控制性能下降的关键问题。; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,重点关注QLearning算法中状态空间、动作空间的设计逻辑以及奖励函数的构建原则,深入理解其在参数寻优过程中的作用机制,并可通过调整环境参数和初始条件来测试算法的鲁棒性与泛化能力。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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