怎么编程把用户名,密码提交到网页上的登录页? 首先在程序中加入Webbrowser控件并加入引用 Microsoft HTML Object Library。 假设你的HTML页面表单代码如下: <form method="POST" action="http://chen/dll/chat/chatmain.exe/RegUser"> <p>请填写下面表单注册(*项为必添项)</p> <p>*姓名<input type="text" name="Name" size="20"></p> <p>*昵称<input type="text" name="NickName" size="20"></p> <p>电子邮件<input type="text" name="EMail" size="20"></p> <p>*密码<input type="text" name="Password" size="20"></p> <p><input type="submit" value="提交" name="B1"><input type="reset" value="全部重写" name="B2"></p> </form> 注意其中元素的type、Name、value属性。然后VB中的代码如下: Private Sub Command1_Click() WebBrowser1.Navigate "http://chen/chat/newuser.htm" End SubPrivate Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) Dim vDoc, vTag Dim i As Integer
Set vDoc = WebBrowser1.Document List1.Clear For i = 0 To vDoc.All.length - 1 If UCase(vDoc.All(i).tagName) = "INPUT" Then Set vTag = vDoc.All(i) If vTag.Type = "text" Or vTag.Type = "password" Then List1.AddItem vTag.Name Select Case vTag.Name Case "Name" vTag.Value = "IMGod" Case "NickName" vTag.Value = "IMGod" Case "Password" vTag.Value = "IMGodpass" Case "EMail" vTag.Value = "[email protected]" End Select ElseIf vTag.Type = "submit" Then vTag.Click End If End If Next i End Sub 点击Command1就可以自动填表并提交了。
--有个Delphi的函数,帮我看看可以吗(我对Delphi一点也不懂) {procedure TForm1.PutData; var ShellWindow: IShellWindows; nCount: integer; spDisp: IDispatch; i,j,X: integer; vi: OleVariant; IE1: IWebBrowser2; IDoc1: IHTMLDocument2; iELC : IHTMLElementCollection ; S,S2 : string; HtmlInputEle : IHTMLInputElement; HtmlSelEle : IHTMLSelectElement; begin ShellWindow := CoShellWindows.Create; nCount := ShellWindow.Count; for i := 0 to nCount - 1 do begin vi := i; spDisp := ShellWindow.Item(vi); if spDisp = nil then continue; spDisp.QueryInterface( iWebBrowser2, IE1 ); if IE1 <> nil then begin IE1.Document.QueryInterface(IHTMLDocument2,iDoc1); if iDoc1 <> nil then beginielc:=idoc1.Get_all;for j:=0 to ielc.length-1 do begin Application.ProcessMessages; spDisp := ielc.item(J, 0); if SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement ,HtmlInputEle))then with HtmlInputEle do begin S2:=Type_; S2:=UpperCase(S2); //我把所有的input都填上 try , checkbox 都打勾 if (StrComp(PChar(S2),'TEXT')=0) or (StrComp(PChar(S2),'PASSWORD')=0) then value :='try' //S:=S+#9+Value else if StrComp(PChar(S2),'CHECKBOX')=0 then begin checked := True; end; end; if SUCCEEDED(spDisp.QueryInterface(IHTMLselectelement ,HtmlSelEle))then with HtmlSelEle, Memo1.Lines do begin S:=S+#9+IntToStr(selectedIndex+1); //这个是获取数据了 end; end; //END FOR Memo2.Lines.Add(S); exit; end; end; end; end; }
首先在程序中加入Webbrowser控件并加入引用 Microsoft HTML Object Library。
假设你的HTML页面表单代码如下:
<form method="POST" action="http://chen/dll/chat/chatmain.exe/RegUser">
<p>请填写下面表单注册(*项为必添项)</p>
<p>*姓名<input type="text" name="Name" size="20"></p>
<p>*昵称<input type="text" name="NickName" size="20"></p>
<p>电子邮件<input type="text" name="EMail" size="20"></p>
<p>*密码<input type="text" name="Password" size="20"></p>
<p><input type="submit" value="提交" name="B1"><input type="reset" value="全部重写" name="B2"></p>
</form>
注意其中元素的type、Name、value属性。然后VB中的代码如下:
Private Sub Command1_Click()
WebBrowser1.Navigate "http://chen/chat/newuser.htm"
End SubPrivate Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim vDoc, vTag
Dim i As Integer
Set vDoc = WebBrowser1.Document
List1.Clear
For i = 0 To vDoc.All.length - 1
If UCase(vDoc.All(i).tagName) = "INPUT" Then
Set vTag = vDoc.All(i)
If vTag.Type = "text" Or vTag.Type = "password" Then
List1.AddItem vTag.Name
Select Case vTag.Name
Case "Name"
vTag.Value = "IMGod"
Case "NickName"
vTag.Value = "IMGod"
Case "Password"
vTag.Value = "IMGodpass"
Case "EMail"
vTag.Value = "[email protected]"
End Select
ElseIf vTag.Type = "submit" Then
vTag.Click
End If
End If
Next i
End Sub
点击Command1就可以自动填表并提交了。
别人的 b/s 系统,用ie作浏览器,要填写大量的表单,想作个程序来实现自动填写。
以前是这样搞的:
--------------------------------------
'激活窗口
AppActivate "CSDN" 'Microsoft Internet Explorer
'把光标定在网页的文本筐
Clipboard.Clear
Clipboard.SetText "用户名"
SendKeys "^v"
SendKeys "{Tab}"
DoEvents
Clipboard.Clear
Clipboard.SetText "密码"
SendKeys "^v"
SendKeys "{Tab}"
DoEvents---------------------------------------
这样的方法比较简单,但问题也出来了,光标定位错误的话,就完蛋了。
现在是想一执行程序,就让光标回到 指定的 编辑框(网页) 上,不知道可不可呢?
{procedure TForm1.PutData;
var
ShellWindow: IShellWindows;
nCount: integer;
spDisp: IDispatch;
i,j,X: integer;
vi: OleVariant;
IE1: IWebBrowser2;
IDoc1: IHTMLDocument2;
iELC : IHTMLElementCollection ;
S,S2 : string;
HtmlInputEle : IHTMLInputElement;
HtmlSelEle : IHTMLSelectElement;
begin
ShellWindow := CoShellWindows.Create;
nCount := ShellWindow.Count;
for i := 0 to nCount - 1 do
begin
vi := i;
spDisp := ShellWindow.Item(vi);
if spDisp = nil then continue;
spDisp.QueryInterface( iWebBrowser2, IE1 );
if IE1 <> nil then
begin
IE1.Document.QueryInterface(IHTMLDocument2,iDoc1);
if iDoc1 <> nil then
beginielc:=idoc1.Get_all;for j:=0 to ielc.length-1 do
begin
Application.ProcessMessages;
spDisp := ielc.item(J, 0);
if SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement ,HtmlInputEle))then
with HtmlInputEle do
begin
S2:=Type_;
S2:=UpperCase(S2);
//我把所有的input都填上 try , checkbox 都打勾
if (StrComp(PChar(S2),'TEXT')=0) or (StrComp(PChar(S2),'PASSWORD')=0) then
value :='try' //S:=S+#9+Value
else if StrComp(PChar(S2),'CHECKBOX')=0 then
begin
checked := True;
end;
end;
if SUCCEEDED(spDisp.QueryInterface(IHTMLselectelement ,HtmlSelEle))then
with HtmlSelEle, Memo1.Lines do
begin
S:=S+#9+IntToStr(selectedIndex+1); //这个是获取数据了
end;
end; //END FOR
Memo2.Lines.Add(S);
exit;
end;
end;
end;
end;
}