怎样实现在网页中自动填入数据,然后上传?

时间:2022-11-06 11:00:07
区上面给了我们一个网上录入数据的冬冬,工作量很大,数据要手工输入,太烦、太久了。但这些数据,在我们自己的系统中都已经有了,所以,我想这样,在自己的程序中,打开这网页,自动填 入数据,自动上传。但要解决的难题还有很多,哪位高手,帮提供个思路也行。目前想到的困难有:
1、怎样定位光标到需要录入的位置。
2、要识别出网页中的不同界面(录入不同的数据,有不同的界面)
3、怎样知道网页已经打开了,上传数据时,需要刷新,怎样知道刷新已经完成。
4、网页中有相当一部分界面是看不见的,要滚动才出来的,这部分的网页内容怎样出来?怎样在这看不见的位置中填入数据?
5、有时要提取网页中某位置的文字内容,来进行识别,怎样才做到?  

实在对不起,引1次发贴求助,还没积分可送

8 个解决方案

#1


如果控制IE等浏览器的话,实现比较难
如果在程序里用WebBroser控件就容易了

#2


应该不难,找找以前的贴子,不是从界面入手,而是直接对网页中的元素赋值

#3


我就是想在程序里用WebBroser控件的来打开网页的,但遇到了些技术难题:

1、用WebBroser控件打开的网页,不能用虚拟按键CTRL+C来实现选择的内容写入到剪贴板中。(但在IE中打开的网页是可以使用CTRL+C的)
2、用虚拟按键CTRL+V 对一个位置写入内容是可以实现,但连续对两个(或以上)位置写入内容 则失败:写入的内容都变成是同样的了,内容是最后付给剪贴板的值。

以上两个问题中第一个最为重要,第二个由可变通手段来实现。

#4


那不必用模拟按键来实现了,直接对网页元素进行操作,代码下载地址 http://ys-c.ys168.com/?Element.rar_67z82bt4bs5bt1bt0bt4bks0btlnnl0b5bt1bsrn1biu14z97f14z

{这是一个对百度网页进行输入的例子

 其中的
 kw',0); //获取文本框
 'sb',0);  //获取确定按钮
 是网页元素所对应的id号 ,查看网页源码可以得到
  <input type=text name=wd id=kw size=36 maxlength=100>  这是文本的
  <input type=submit value=百度一下 id=sb>     这是按钮的
  }

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Edit1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
HtmlElent_txt,HtmlElent_btn:Olevariant;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);

begin
  HtmlElent_txt.value := edit1.Text;  //输入值
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    WebBrowser1.Navigate('www.baidu.com');
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
 HtmlElent_txt := mshtml.IHTMLDocument2(WebBrowser1.Document).all.item('kw',0); //获取文本框
 HtmlElent_btn := mshtml.IHTMLDocument2(WebBrowser1.Document).all.item('sb',0);  //获取确定按钮
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if key = chr(13) then    HtmlElent_btn.click;   //确定

end;

end.

#6


4楼的帮助 真的很太,太好了,让我解决了部分难题。

另外,我想识别当前的网页中功能种类(不同层次,有不同功能),本想从网页的“title” 来识别,但他们是同样的,所以想从下面的属性中识别:如两个网页中分别有:

</style></head>
<body style="margin: 5px; width: 100%; height: 100%" bgcolor="#737326" >
    <form name="form1" method="post" action="Frm数据_育龄妇女编辑.Aspx?ID=0&amp;TAG=%u65b0%u589e" id="form1">

另一网页是:

</style></head>
<body style="margin: 5px; width: 100%; height: 100%" bgcolor="#737326">
    <form name="form1" method="post" action="Frm数据_妊娠情况编辑.Aspx?ID=c06a5bf7-3b7a-4bf5-9e56-0b6ddf8682be&amp;TAG=%u65b0%u589e" id="form1">

是怎样得到这“</style></head>”的值?(从:数据_育龄妇女编辑、数据_妊娠情况编辑  我就可以识别了)

#7


新问题:在正式录入的网页中,网页中的写法不同了,是以下这个格式的,对这种又该怎样对其付值?
(网页中还有一个是 通过下拉的列表框来付值,对这又该怎办?)

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="TreeViewInfo_ExpandState" id="TreeViewInfo_ExpandState" value="ennnnnnnnnnnn" />
<input type="hidden" name="TreeViewInfo_SelectedNode" id="TreeViewInfo_SelectedNode" value="" />
<input type="hidden" name="TreeViewInfo_PopulateLog" id="TreeViewInfo_PopulateLog" value="" />

#8


一样啊比如获取 id="form1" 这个元素后,类似HtmlElent_txt.value := edit1.Text;  //输入值
可以得到它的HtmlElent_Frm.action的值
下拉框一样了,进一步操作下拉框的相关属性
像input   type="hidden"这类是隐藏的,用来传递会话或记录数据,不要动它们了

#1


如果控制IE等浏览器的话,实现比较难
如果在程序里用WebBroser控件就容易了

#2


应该不难,找找以前的贴子,不是从界面入手,而是直接对网页中的元素赋值

#3


我就是想在程序里用WebBroser控件的来打开网页的,但遇到了些技术难题:

1、用WebBroser控件打开的网页,不能用虚拟按键CTRL+C来实现选择的内容写入到剪贴板中。(但在IE中打开的网页是可以使用CTRL+C的)
2、用虚拟按键CTRL+V 对一个位置写入内容是可以实现,但连续对两个(或以上)位置写入内容 则失败:写入的内容都变成是同样的了,内容是最后付给剪贴板的值。

以上两个问题中第一个最为重要,第二个由可变通手段来实现。

#4


那不必用模拟按键来实现了,直接对网页元素进行操作,代码下载地址 http://ys-c.ys168.com/?Element.rar_67z82bt4bs5bt1bt0bt4bks0btlnnl0b5bt1bsrn1biu14z97f14z

{这是一个对百度网页进行输入的例子

 其中的
 kw',0); //获取文本框
 'sb',0);  //获取确定按钮
 是网页元素所对应的id号 ,查看网页源码可以得到
  <input type=text name=wd id=kw size=36 maxlength=100>  这是文本的
  <input type=submit value=百度一下 id=sb>     这是按钮的
  }

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Edit1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
HtmlElent_txt,HtmlElent_btn:Olevariant;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);

begin
  HtmlElent_txt.value := edit1.Text;  //输入值
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    WebBrowser1.Navigate('www.baidu.com');
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
 HtmlElent_txt := mshtml.IHTMLDocument2(WebBrowser1.Document).all.item('kw',0); //获取文本框
 HtmlElent_btn := mshtml.IHTMLDocument2(WebBrowser1.Document).all.item('sb',0);  //获取确定按钮
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if key = chr(13) then    HtmlElent_btn.click;   //确定

end;

end.

#5


#6


4楼的帮助 真的很太,太好了,让我解决了部分难题。

另外,我想识别当前的网页中功能种类(不同层次,有不同功能),本想从网页的“title” 来识别,但他们是同样的,所以想从下面的属性中识别:如两个网页中分别有:

</style></head>
<body style="margin: 5px; width: 100%; height: 100%" bgcolor="#737326" >
    <form name="form1" method="post" action="Frm数据_育龄妇女编辑.Aspx?ID=0&amp;TAG=%u65b0%u589e" id="form1">

另一网页是:

</style></head>
<body style="margin: 5px; width: 100%; height: 100%" bgcolor="#737326">
    <form name="form1" method="post" action="Frm数据_妊娠情况编辑.Aspx?ID=c06a5bf7-3b7a-4bf5-9e56-0b6ddf8682be&amp;TAG=%u65b0%u589e" id="form1">

是怎样得到这“</style></head>”的值?(从:数据_育龄妇女编辑、数据_妊娠情况编辑  我就可以识别了)

#7


新问题:在正式录入的网页中,网页中的写法不同了,是以下这个格式的,对这种又该怎样对其付值?
(网页中还有一个是 通过下拉的列表框来付值,对这又该怎办?)

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="TreeViewInfo_ExpandState" id="TreeViewInfo_ExpandState" value="ennnnnnnnnnnn" />
<input type="hidden" name="TreeViewInfo_SelectedNode" id="TreeViewInfo_SelectedNode" value="" />
<input type="hidden" name="TreeViewInfo_PopulateLog" id="TreeViewInfo_PopulateLog" value="" />

#8


一样啊比如获取 id="form1" 这个元素后,类似HtmlElent_txt.value := edit1.Text;  //输入值
可以得到它的HtmlElent_Frm.action的值
下拉框一样了,进一步操作下拉框的相关属性
像input   type="hidden"这类是隐藏的,用来传递会话或记录数据,不要动它们了