您的位置:程序门 -> delphi -> 数据库相关



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


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


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

实在对不起,引1次发贴求助,还没积分可送
发表于:2007-12-14 19:22:581楼 得分:0
如果控制ie等浏览器的话,实现比较难
如果在程序里用webbroser控件就容易了
发表于:2007-12-15 07:23:232楼 得分:0
应该不难,找找以前的贴子,不是从界面入手,而是直接对网页中的元素赋值
发表于:2007-12-16 12:05:323楼 得分:0
我就是想在程序里用webbroser控件的来打开网页的,但遇到了些技术难题:

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

以上两个问题中第一个最为重要,第二个由可变通手段来实现。
发表于:2007-12-16 13:11:234楼 得分:0
那不必用模拟按键来实现了,直接对网页元素进行操作,代码下载地址
delphi(pascal) code
{这是一个对百度网页进行输入的例子 其中的 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.
发表于:2007-12-16 13:13:495楼 得分:0
发表于:2007-12-16 20:12:526楼 得分:0
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> ”的值?(从:数据_育龄妇女编辑、数据_妊娠情况编辑     我就可以识别了)
发表于:2007-12-16 20:54:237楼 得分:0
新问题:在正式录入的网页中,网页中的写法不同了,是以下这个格式的,对这种又该怎样对其付值?
(网页中还有一个是   通过下拉的列表框来付值,对这又该怎办?)

<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=""   />
发表于:2007-12-16 21:37:358楼 得分:0
一样啊比如获取   id="form1"   这个元素后,类似htmlelent_txt.value   :=   edit1.text;     //输入值
可以得到它的htmlelent_frm.action的值
下拉框一样了,进一步操作下拉框的相关属性
像input       type="hidden"这类是隐藏的,用来传递会话或记录数据,不要动它们了


快速检索

最新资讯
热门点击