话题2429833的标题是: 如何自动填写表单(供求信息发布)。 (100分)
分类:Internet/TCPIP bj8888 (2004-02-01 15:02:00)
在delphi中如何实现象下面的供求信息中,自动发布表单。
<form method="POST" action="addmed.asp" onsubmit="return FrontPage_Form1_Validator(this)" name="FrontPage_Form1">
<table width="450" border="0" align="center" cellpadding="1" cellspacing="2">
<tr>
<td>选择分类:</td>
<td>
<select size="1" name="n" style="background-color: #FFFFE6">
<option value="1">招商投资</option>
<option value="2">生活服务 </option>
<option value="3">家电产品</option>
<option value="3">旅游出行</option>
<option value="5">招聘求职</option>
<option value="6">房产家居</option>
<option value="7">电脑网络 </option>
<option value="8">美容美发</option>
<option value="9">美食天地</option>
<option value="10">医疗保健 </option>
<option value="11">招生培训</option>
<option value="12">出国留学</option>
<option value="12">交友征婚</option>
<option value="14">农业信息</option>
<option value="15">商务服务</option>
<option value="16">其他分类</option>
</select>
选择供求:
<input name="gq" type="radio" value="供" checked>
供
<input type="radio" name="gq" value="求">
求</td>
</tr>
<tr>
<td width="16%">主 题:</td>
<td width="84%">
<input type="text" name="t1" size="44" maxlength="40"></td>
</tr>
<tr>
<td width="16%">电子邮件:</td>
<td width="84%">
<input type="text" name="t2" size="44" maxlength="30"></td>
</tr>
<tr>
<td width="16%">联 系 人:</td>
<td width="84%" height="22">
<input name="t5" type="text" id="t5" size="10" maxlength="30">
联系电话:
<input type="text" name="t4" size="19" maxlength="30"></td>
</tr>
<tr>
<td width="16%" valign="top">内 容:</td>
<td width="84%" valign="middle">
<textarea rows="6" name="t3" cols="43"></textarea></td>
</tr>
<tr>
<td width="16%">所在地区:</td>
<td width="84%">
<select name="d1" size="1">
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="天津">天津</option>
<option value="重庆">重庆</option>
<option value="广东">广东</option>
<option value="河北">河北</option>
<option value="山西">山西</option>
<option value="内蒙">内蒙</option>
<option value="辽宁">辽宁</option>
<option value="吉林">吉林</option>
<option value="黑龙江">黑龙江</option>
<option value="江苏">江苏</option>
<option value="浙江">浙江</option>
<option value="安徽">安徽</option>
<option value="福建">福建</option>
<option value="江西">江西</option>
<option value="山东">山东</option>
<option value="河南">河南</option>
<option value="湖北">湖北</option>
<option value="湖南">湖南</option>
<option value="广东">广东</option>
<option value="广西">广西</option>
<option value="四川">四川</option>
<option value="贵州">贵州</option>
<option value="云南">云南</option>
<option value="西藏">西藏</option>
<option value="陕西">陕西</option>
<option value="甘肃" selected>甘肃</option>
<option value="青海">青海</option>
<option value="宁夏">宁夏</option>
<option value="新疆">新疆</option>
<option value="台湾">台湾</option>
<option value="香港">香港</option>
<option value="国外">国外</option>
<option value="其它">其它</option>
</select> 有效期限:
<select size="1" name="d2">
<option value="1" selected>1天</option>
<option value="2">2天</option>
<option value="3">3天</option>
<option value="4">4天</option>
<option value="5">5天</option>
<option value="6">6天</option>
<option value="7">1个星期</option>
<option value="15">半个月</option>
<option value="30">1个月</option>
<option value="60">2个月</option>
<option value="90">1个季度</option>
<option value="182">半年</option>
<option value="365">1年</option>
<option value="99999">无期</option>
</select></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td width="16%" align="center"> </td>
<td width="84%" align="center"><input type="submit" value="马上发布" name="B1" style="background-color: #FFFFE6; font-size: 9pt; border-style: solid; border-color: #000000">
<input type="reset" value="全部重填" name="B2" style="background-color: #FFFFE6; font-size: 9pt; border-style: solid; border-color: #000000">
</td>
</tr>
</table>
</form>
下面的朋友提了不少好的想法,在此谢谢
下面的函数可以自动完成填写text的值,怎么设置option ,radio,checkbox的值。
function TForm1.FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
i, j: Integer;
FormItem: Variant;
begin
Result := False;
//no form on document
if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
begin
Exit;
end;
//count forms on document
for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser.OleObject.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
//when the fieldname is found, try to fill out
if FormItem.Item(j).Name = FieldName then
begin
FormItem.Item(j).Value := Value;
Result := True;
end;
except
Exit;
end;
end;
end;
end;
pailier (2004-02-03 7:38:00)
我也想知道
lybid2002 (2004-02-03 8:13:00)
使用webbrowser,或者如果这个form是固定的,直接发送http请求。
fei_l (2004-02-03 11:05:00)
// 填写
var
HtmlDoc:IHTMLDocument2;
InputText1,InputText2,InputText3,InputText4,InputText5:IHTMLInputTextElement; // Edit框
TypeElement:variant;
I:Integer;
begin
webbrowser1.Navigate(edit1.Text);
exit;
HtmlDoc:=WebBrowser1.Document as IHTMLDocument2;
for i:=0 to HtmlDoc.all.length-1 do
begin
TypeElement:=Htmldoc.all.item(i,varempty);
if Uppercase(TypeElement.tagName)='INPUT' then
begin
if Uppercase(TypeElement.type)='TEXT' then // 填 Edit 框
begin
InputText1:=HtmlDoc.all.item(i,varempty) as IHTMLInputTextElement;
if InputText1.name='username' then InputText1.value:='abc';
InputText4:=HtmlDoc.all.item(i,varempty) as IHTMLInputTextElement;
if InputText4.name='email' then InputText4.value:='xxxx@163.com';
InputText5:=HtmlDoc.all.item(i,varempty) as IHTMLInputTextElement;
if InputText5.name='url' then InputText5.value:='http://www.xxx.com';
end;
if Uppercase(TypeElement.type)='PASSWORD' then // 填密码框
begin
InputText2:=HtmlDoc.all.item(i,varempty) as IHTMLInputTextElement;
if InputText2.name='password' then InputText2.value:='12345678';
InputText3:=HtmlDoc.all.item(i,varempty) as IHTMLInputTextElement;
if InputText3.name='password2' then InputText3.value:='12345678';
end;
end;
end;
end;
// 提交
var
HtmlDoc:IHTMLDocument2;
myitem:Olevariant;
i:integer;
begin
myitem := WebBrowser1.Document;
for i := 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'INPUT' then
if Uppercase(myitem.all.item(i).type)='SUBMIT' then
if Uppercase(myitem.all.item(i).name)='OK' then
myitem.all.item(i).click;
end;
end;
人在昆明 (2004-02-03 11:37:00)
获取 他 提交的 格式,你自己设置 信息来 提交就可以了
风铃夜思雨 (2004-02-03 11:45:00)
HOHO,没有获得option的,我也一直填不了option这种
bj8888 (2004-02-03 12:03:00)
fei_l:
谢谢!!!!!
请问怎么设置option ,radio,checkbox 里的值
下面的函数可以完成自动填写text的植,但是怎么设置option ,radio,checkbox 里的值。请指教!!!!
function TForm1.FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
i, j: Integer;
FormItem: Variant;
begin
Result := False;
//no form on document
if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
begin
Exit;
end;
//count forms on document
for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser.OleObject.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
//when the fieldname is found, try to fill out
if FormItem.Item(j).Name = FieldName then
begin
FormItem.Item(j).Value := Value;
Result := True;
end;
except
Exit;
end;
end;
end;
end;
fei_l (2004-02-05 2:54:00)
// 已调试通过,请放心使用
// 给我加分吧 :D
var
HtmlDoc:IHTMLDocument2;
myitem:Olevariant;
i:integer;
begin
myitem := WebBrowser1.Document;
for i := 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'SELECT' then // 下拉框选择
begin
myitem.all.item(i).value:='2'; // 从下拉框中选中第2项
end;
if myitem.all.item(i).tagName = 'INPUT' then
begin
if Uppercase(myitem.all.item(i).type)='RADIO' then
begin
if myitem.all.item(i).value='求' then myitem.all.item(i).checked:=true; // 选中值是 '求'的选项
end;
if Uppercase(myitem.all.item(i).type)='TEXT' then
begin
if Uppercase(myitem.all.item(i).name)='USERNAME' then myitem.all.item(i).value:='abc123';
end;
if Uppercase(myitem.all.item(i).type)='PASSWORD' then
begin
if Uppercase(myitem.all.item(i).name)='PASSWORD' then myitem.all.item(i).value:='12345678';
end;
if Uppercase(myitem.all.item(i).type)='SUBMIT' then
begin
if Uppercase(myitem.all.item(i).name)='OK' then myitem.all.item(i).click; // 点击提交键
end;
end;
end;
end;
sfwany (2004-02-05 9:40:00)
我想问一下那个IHTMLDocument2在哪个系统文件中呀!谢了!
bj8888 (2004-02-05 12:57:00)
fei_l,谢谢,我正在学习中,看明白了你写的代码。让大家都学习学习,过几天给你接分。
请大家都来学习fei_l写的代码。
请继续讨论如何自动实现网站自动注册用户名,及密码。(指第一次注册)。
有没有用INDY控件idhttp的办法
bj8888 (2004-02-05 13:33:00)
fei_l:
您好!在dlphi7运行下面的语句
if Uppercase(myitem.all.item(i).name)='OK' then myitem.all.item(i).click;
报错:Project Pxx.exe raised execption class EoleError with message 'Method' type' not supported by automation object'
不知为什么?
ivw (2004-02-05 15:33:00)
用过个行不行啊,Tidhttp.我没有试过,请问哪位大上侠试过。
它也有一个POST方法。
fei_l (2004-02-06 17:55:00)
留个e-mail,我发给你
bj8888 (2004-02-06 18:01:00)
fei_l,
你好,我的电子邮件是:hjzaaa@sohu.com
fei_l (2004-02-08 13:09:00)
已发
WoDing (2004-02-09 22:13:00)
fei_l,
给我一份
wodings@yahoo.com.cn
bj8888 (2004-02-10 18:11:00)
fei_l,
您好!
怎么没有收到,请再发一下,hjzaaa@sohu.com
bj8888 (2004-02-12 11:37:14)
接受答案了.
lcmax (2004-02-23 12:54:31)
fei_l,能发给我一份吗?
先谢谢了
lcmax@163.com
wang_80919 (2004-03-07 8:53:59)
fei_l,
给我一份
flying_919@eyou.com
谢谢
fei_l的回答最终被接受。