监视网页的问题请教 ( 积分: 200 )

  • 主题发起人 主题发起人 zcm1975117
  • 开始时间 开始时间
Z

zcm1975117

Unregistered / Unconfirmed
GUEST, unregistred user!
最近有个朋友叫做个网页监视的功能,实际就是分析网页,提取有用的信息加以分析。
但是做的时候遇到很多问题解决不了,请各位高手指导。
1.被监视的网页需要先登录后,并同意相应条款后,才能进入被监视的网页。
2.被监视的网页数据有的时候是多页显示,需要同时监视多页的数据。
3.被监视的网页需要正常注销后,才能马上正常登录使用,否则就要等几分钟后才能够正常使用。
最好有没有这方面的实现呀?谢谢各位。
 
最近有个朋友叫做个网页监视的功能,实际就是分析网页,提取有用的信息加以分析。
但是做的时候遇到很多问题解决不了,请各位高手指导。
1.被监视的网页需要先登录后,并同意相应条款后,才能进入被监视的网页。
2.被监视的网页数据有的时候是多页显示,需要同时监视多页的数据。
3.被监视的网页需要正常注销后,才能马上正常登录使用,否则就要等几分钟后才能够正常使用。
最好有没有这方面的实现呀?谢谢各位。
 
登录和模拟点击什么的都还还好处理,有些点击是使用链接的,那就修改我的程序里面的那个forms为links就可以了。我是用WebBrower做的,先放上来,看有用没有

unit Main;

interface

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

type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
BitBtn1: TBitBtn;
Button1: TButton;
Memo1: TMemo;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure WebBrowser1DownloadComplete(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
FDownComplete : Boolean;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
ovDoc, ovForm, ovInput, ovTag: OleVariant;
I : Integer;
begin
{chinaren
if not FDownComplete then Application.MessageBox('网页正在下载中,请稍后……', '提示', MB_OK + MB_ICONINFORMATION)
else begin
ovDoc := WebBrowser1.Document;
ovForm := ovDoc.forms;
for I := ovForm.length - 1 downto 0 do begin
if ovForm.item(I).Name = 'FM' then begin
ovInput := ovform.Item(I);
Break;
end;
end;

for I := 0 to ovInput.length -1 do begin
ovTag := ovInput.item(I);
if (ovTag.Type = 'text') or (ovTag.Type = 'password') then begin
if ovTag.Name = 'uid' then ovTag.Value := 'chenybin';
if ovTag.Name = 'passwd' then ovTag.Value := '******';
end
else if ovTag.Type = 'image' then begin
if ovTag.alt = '登录ChinaRen' then
ovTag.Click;
end;
end;
//ovInput.Submit;
end;
}
if not FDownComplete then Application.MessageBox('网页正在下载中,请稍后……', '提示', MB_OK + MB_ICONINFORMATION)
else begin
ovDoc := WebBrowser1.Document;
ovForm := ovDoc.forms;
for I := ovForm.length - 1 downto 0 do begin
if ovForm.item(I).Name = 'form' then begin
ovInput := ovform.Item(I);
Break;
end;
end;

for I := 0 to ovInput.length -1 do begin
ovTag := ovInput.item(I);
if (ovTag.Type = 'text') or (ovTag.Type = 'password') then begin
if ovTag.Name = 'user' then ovTag.Value := 'chenybin';
if ovTag.Name = 'pass' then ovTag.Value := 'xxxxxx';
end
else if (ovTag.Type = 'submit') and (ovTag.Name = 'enter.x') then begin
//if ovTag.alt = '登录ChinaRen' then
ovTag.Click;
end;
end;
//ovInput.Submit;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FDownComplete := False;
//WebBrowser1.Navigate('http://www.cng.com.cn/');
//WebBrowser1.Navigate('http://www.chinaren.com/');
WebBrowser1.Navigate('http://www.126.com/');
end;

procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
begin
FDownComplete := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ovDoc, ovForms, ovForm, ovInput: OleVariant;
I, J : Integer;
begin
if not FDownComplete then Application.MessageBox('网页正在下载中,请稍后……', '提示', MB_OK + MB_ICONINFORMATION)
else begin
ovDoc := WebBrowser1.Document;
ovForms := ovDoc.all.tags('FORM');
for I := 0 to ovForms.length -1 do begin
ovForm := ovForms.item(I);
if AnsiSameText(ovForm.action, 'vote/fivote.asp?voteID=17') then begin
for J := 0 to ovForm.length - 1 do begin
ovInput := ovForm.item(J);
Memo1.Lines.Add(ovInput.Type);
if (ovInput.Type = 'radio') then begin
// 下面的这个113是从网页里面找出来的,分别是113,114,115
if (ovInput.Value = '113') and (ovInput.Name = 'ID') then begin
ovInput.Checked := True;
ovForm.submit;
Break;
end;
end
end;
end;
end;
end;
end;

end.


object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 468
Top = 264
Width = 185
Height = 89
ImeName = #20013#25991' ('#31616#20307') - '#25340#38899#21152#21152'3.11'
Lines.Strings = (
'Memo1')
TabOrder = 3
end
object WebBrowser1: TWebBrowser
Left = 16
Top = 12
Width = 433
Height = 381
TabOrder = 0
OnDownloadComplete = WebBrowser1DownloadComplete
ControlData = {
4C000000C02C0000612700000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
object BitBtn1: TBitBtn
Left = 220
Top = 412
Width = 75
Height = 25
Caption = #26657#21451#24405#30331#24405
TabOrder = 1
OnClick = BitBtn1Click
end
object Button1: TButton
Left = 356
Top = 412
Width = 75
Height = 25
Caption = #38142#25509#25237#31080
TabOrder = 2
OnClick = Button1Click
end
end
 
如果只是单纯的登陆/在线监测的话,还好办些,但是(时段)流量监测就比较头痛了。
 
没办法,只能每页监视了,不过登录应该没那个麻烦的,最好先用visualsniffer看一下来回传的提交和返回信息(注意分析)。
再就是,最好用INDY的IDHTTP做。
 
谢谢各位,还有没有什么方法呀?
 
其实我的办法是最普通的办法,所谓笨办法,可以做为基础,相对来说引用mshtml以后分析起来容易一些,如果用idhttp,需要自己去解析html,未必有那个方便,楼主斟酌一下,如果做项目当然用最快最稳的办法(来钱就不管了:),如果是学习当然挑技术性最强的东西,对不[:)]
 
to chenybin:我也觉得你的方法不错。
可以留下QQ吗,详细交流一下。
 
接受答案了.
 
加问一个问题:
怎么获取带框架网页的源代码呀?
 
http://www.delphibbs.com/delphibbs/dispq.asp?LID=2438418
标题: webbrowser如何查看网页源码
 
我是问的查看带框架网页的源代码,一般的方法只能获取框架页面的代码,
我是想查看框架网页中的某个框架里面网页的代码。
 
框架有一个frames属性,对应找就是了,原理一样的
 
对了,如果登录后,是弹出的一个窗体,怎么办呢?
(即弹出的网页不会显示在webbrowser里面,而是用另外的浏览器打开了)
 
呵呵,回答满意了要另外开贴给分哦[:D][:D]

Webbrower有一个事件,叫OnNewWindow2,还有一个是OnBeforeNavigate2

一个是弹出窗口,一个是网页跳转,
 
1)框架有一个frames属性,怎么使用才能取出他的代码呀?
2)我是想问,能让弹出的窗体的内容直接显示在原来的webbrowser中吗?怎么实现呀?
不好意思,俺很笨。
 
后退
顶部