delphi利用IDHTTP登陆百度

w83702861 2008-11-01 10:52:22
http://passport.baidu.com/?login&tpl=mn
这个是百度登陆的页面
我想做个小软件登陆百度知道
...全文
3659 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu884 2009-01-11
  • 打赏
  • 举报
回复
我也有这个问题(虽然这是两个月前的帖子了),发表一下意见:
我用D7用如下代码可以实现:

procedure TMain.loginClick(Sender: TObject);
const
url ='http://passport.baidu.com/?login';
var
param : TStringList;
begin
idhttp1.Request.SetHeaders;
param := TStringList.Create;
param.add('tpl_ok=');
param.add('next_target=');
param.Add('tpl=tb');
param.add('skip_ok=');
param.add('aid=');
param.Add('needpay=');
param.add('need_coin=');
param.add('pay_method=');
param.Add('u=http://tieba.baidu.com/f&return_method=get&more_param=kw=XXX');
param.Add('return_type=');
param.add('psp_tt=0');
param.add('username='+id.text);
param.add('password='+pass.text);
param.add('mem_pass=1');
idhttp1.HandleRedirects := true;
idhttp1.Request.Referer := 'http://tieba.baidu.com/f?kw=XXX';
idhttp1.post(url,param);

使用D2005使用同种方法提示需要验证码。
我采用的方法和37楼有异曲同工之处,使用idhttp的get方法完成登录。记得我两年前用VB的类似方法实现过。
memo1.Text := idhttp1.get('http://passport.baidu.com/?login&username=XXXX&password=XXXXXX');
kevin08x 2008-11-20
  • 打赏
  • 举报
回复
百度用的协议是 https
和常规的方法不一样
w83702861 2008-11-17
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 mwy654321 的回复:]
百度实现自动登录是相对来说最简单的一个了。

楼主你在回贴的时候,输入文字的这个框的上面有:我要提问、贴子加分、结贴去…、管理菜单。
你点贴子加分就可以了。我怀疑你到时候是不是还不会结贴?那我真是白回答你了。

打开网页就处于登录状态的这个技术,针对百度而言,你加分后,答案自然奉上,代码不超过五行(你不加分也可以给你答案,但代码要有些冗余了)。可以实现以外部游览器登录。对于其它邮箱一打开就处于…
[/Quote]

哈哈
我发的帖子确实少
但是至少也会结贴吧
把积分给你了
有积分一定送给你
希望你帮我解决这个问题
zhangxiaommmm 2008-11-09
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 jmxb123 的回复:]
uses shellapi

ShellExecute(Handle,'open',Pchar('https://passport.baidu.com/?login&username=我也爱分&password=123321'),nil,nil,SW_SHOW);
[/Quote]

一行代码搞定楼主的问题,佩服,另外请教下,如何模拟按下"登录"按钮的?
jmxb123 2008-11-09
  • 打赏
  • 举报
回复
uses shellapi

ShellExecute(Handle,'open',Pchar('https://passport.baidu.com/?login&username=我也爱分&password=123321'),nil,nil,SW_SHOW);
zhangxiaommmm 2008-11-09
  • 打赏
  • 举报
回复
这个办法,在163邮箱能实现吗?
我试了,好像不行
laowang2 2008-11-09
  • 打赏
  • 举报
回复

uses shellapi
无条件为你 2008-11-07
  • 打赏
  • 举报
回复
百度实现自动登录是相对来说最简单的一个了。

楼主你在回贴的时候,输入文字的这个框的上面有:我要提问、贴子加分、结贴去…、管理菜单。
你点贴子加分就可以了。我怀疑你到时候是不是还不会结贴?那我真是白回答你了。

打开网页就处于登录状态的这个技术,针对百度而言,你加分后,答案自然奉上,代码不超过五行(你不加分也可以给你答案,但代码要有些冗余了)。可以实现以外部游览器登录。对于其它邮箱一打开就处于登录状态,至少需要四百分。代码不超过8行,行行都是精华,肯定保证学会。我是一个比较在乎分的人,其实四百分还有些少了,有些登录软件的作者向我索要这个代码都是用人民币求的。我现在可以以四百分廉价给你。
喝口水 2008-11-03
  • 打赏
  • 举报
回复
这个要用到idhttp的post方法,具体他的参数如何,关键是看参数如何做了
zhangxiaommmm 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 w83702861 的帖子:]
http://passport.baidu.com/?login&tpl=mn
这个是百度登陆的页面
我想做个小软件登陆百度知道
[/Quote]

楼主的意思是,打开软件,按一下按钮自动登录吧???
或者打开软件,自动登录??
kye_jufei 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 mwy654321 的回复:]
小和的方法可以。缺点是必须在网页打开后才能实现登录。

我有更好的方法,可以实现一打开网页就处于登录状态,不需要判断网页是否已打开。

加分方法是单击本贴上面的“贴子加分”。当然你不加分我也可以给你答案,只是我觉得有些不爽而已。你QQ多少?我把代码发给你!


这是我以前写的一个126信箱登录例子。不需要填表单,直接打开网页就处于登录状态:
http://www.mwymwy.cn/126.exe
[/Quote]

To:mwy654321()
可否把<D7+126信箱登录例子,不需要填表单,直接打开网页就处于登录状态>demo发给小弟study下?
Email:jufei@geniusnet.com.tw
喝口水 2008-11-03
  • 打赏
  • 举报
回复
楼主看清后再说,这个才是你那个登陆用的
procedure TForm1.Button1Click(Sender: TObject);
var
o:OleVariant;
begin
WebBrowser1.Navigate('http://passport.baidu.com/?login&tpl=mn',O);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
o:Olevariant;
begin
o:=WebBrowser1.OleObject.document.all.item('username',0);
o.value:='username';
(Self.WebBrowser1.Document as IHTMLDocument3).getElementById('normModPsp').innerText:='123456';
end;
关于点那个登陆按钮的问题,可以通过value获得该页面元素的
w83702861 2008-11-03
  • 打赏
  • 举报
回复
我还有点没有看明白
那个'sb'是什么啊?
登陆的按钮根本就没有name或者id
我不知道你的'sb'怎么出来的
w83702861 2008-11-03
  • 打赏
  • 举报
回复
测试通过不了
登录按钮没有name或者id
所以没有办法点击
zhangxiaommmm 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 w83702861 的回复:]
引用 15 楼 zhangxiaommmm 的回复:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls,MSHTML;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
WebBrowser1: TWebBrowser;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure…
[/Quote]

楼主上面的代码,你测试通过了吗?
w83702861 2008-11-03
  • 打赏
  • 举报
回复
可以增加分数吗?
我想提高分数
真的很想拿到答案
w83702861 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhangxiaommmm 的回复:]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls,MSHTML;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
WebBrowser1: TWebBrowser;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);

[/Quote]

这个方法还好实现吧
就是登陆的那个按钮没有NAME
不然很容易实现的
zhangxiaommmm 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 hys_427 的回复:]
这是D6下的所有原代码,你自己看吧,另外楼上的,这是你的贴的吗,问了这么多问题,另开贴给我分呀, 玩笑话,别当真
这是整个单元文件
你看看吧
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,mshtml, OleCtrls, SHDocVw, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: T…
[/Quote]

这个代码,我测试通过,按钮3与正常,真奇怪了?
zhangxiaommmm 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 mwy654321 的回复:]
小和的方法可以。缺点是必须在网页打开后才能实现登录。

我有更好的方法,可以实现一打开网页就处于登录状态,不需要判断网页是否已打开。

加分方法是单击本贴上面的“贴子加分”。当然你不加分我也可以给你答案,只是我觉得有些不爽而已。你QQ多少?我把代码发给你!


这是我以前写的一个126信箱登录例子。不需要填表单,直接打开网页就处于登录状态:
http://www.mwymwy.cn/126.exe
[/Quote]

以前曾经用过一个代码,是模拟答题功能的.需要自己创建一个数据库文件db.然后,答案放在里面,通过提取db中的答案自动添上去,中间有一个判断.但这个判断不是通过文字的,网页的出题"你今年几岁了"并不是判断这几个汉字,这几个汉字是以图片形式出现的.所以要提取图片的信息.

zhangxiaommmm 2008-11-03
  • 打赏
  • 举报
回复
不好意思,哈哈
我是d7,代码全是直接复制你的,可就是报错,也许是版本的问题
加载更多回复(23)

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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