请问:怎样实现 自动填写网页中的编辑框(vb)

解决方案 »

  1.   

    我现在只能是激活网页,然后定位光标,再用SendKey来传递键值,不过这样的方法很糟糕。请问有什么方法可以直接取得网页中的编辑框的属性。在Delphi和VC中都有相应的类库可以调用,请问用vb怎么实现呢?
      

  2.   

    怎么编程把用户名,密码提交到网页上的登录页?
    首先在程序中加入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就可以自动填表并提交了。
      

  3.   

    感谢 czw1975(塞饭), 但我想在ie中直接填写值啊。
    别人的 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---------------------------------------
    这样的方法比较简单,但问题也出来了,光标定位错误的话,就完蛋了。
    现在是想一执行程序,就让光标回到 指定的 编辑框(网页) 上,不知道可不可呢?
      

  4.   

    --有个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;
    }