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

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

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

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

谢谢~~
...全文
687 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.
「LLM那些事」系列第 4 篇《上下文窗口的边界》,文章连接:https://blog.csdn.net/houwenjin/article/details/163999753。 演示什么:在「预测」Sheet 的黄色格子里输入一句话(默认「来泡一杯」),四个「模型」——分别只统计最后 1 / 2 / 3 / 4 个字的 n-gram 查表——同时预测下一个字。同一个输入,看的上下文越长,候选越少、预测越确定: ┌────────────────┬──────────┬───────────────┬──────┐ │ 只看最后几个字 │ 用的前缀 │ 候选下一字数 │ 预测 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 1 个 │ 杯 │ 3(茶/子/水) │ 模糊 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 2 个 │ 一杯 │ 2(茶/水) │ 收窄 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 3 个 │ 泡一杯 │ 1(茶) │ 确定 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 4 个 │ 来泡一杯 │ 1(茶) │ 确定 │ └────────────────┴──────────┴───────────────┴──────┘

1,317

社区成员

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

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