VB.NET - Нажмите кнопку «Отправить» на странице веб-браузера - PullRequest
7 голосов
/ 17 октября 2008

У меня открыта html-страница на моем объекте веб-браузера, я могу ввести имя пользователя и пароль, но я застрял и не знаю, как отправить информацию. Вот HTML-код для отправки имени пользователя / пароля:

<div id="signin">
    <h2 class="ir">
        <em></em>Sign in</h2>
    <form action="/login/" method="post">
    <input id="login-url" name="login[url]" 
           type="hidden" value="/characters/" />
    <input id="login-urlError" name="login[urlError]" 
           type="hidden" value="/account/?error=1" />
    <fieldset>
        <ul>
            <li class="row">
                <label for="login-username">
                    Username <span class="req">*</span>
                </label>
                <input id="login-username" name="login[username]"
                        type="text" class="TextBox" value="" />
            </li>
            <li class="row">
                <label for="login-password">
                    Password <span class="req">*</span>
                </label>
                <input id="login-password" name="login[password]"
                       type="password" class="TextBox Password" value="" />
            </li>
            <li class="but">
                <input name="login[submit]" type="image" 
                       class="img" alt="Login &raquo;" 
                       src="/_pub/img/hp/but-login.png" />
            </li>
        </ul>
    </fieldset>
    </form>
    <p>
        <a href="/account/password-reset/">ACCOUNT TROUBLE?</a>
    </p>
</div>

Я использую следующее для ввода имени пользователя и пароля:

WebBrowser1.Document.GetElementById("login-username").SetAttribute("Value", Information.txtuser.Text)
WebBrowser1.Document.GetElementById("login-password").SetAttribute("Value", Information.txtpass.Text)

Что я должен использовать, чтобы отправить информацию сейчас? Я пытался получить элемент по имени и продолжал получать индекс из-за ошибки диапазона, индекс должен быть -1 или 0, но это было.

Ваша помощь будет очень признательна !!

Ответы [ 8 ]

3 голосов
/ 05 февраля 2009

WebBrowser1.Document.GetElementById(*element id string*).InvokeMember("submit")

2 голосов
/ 11 января 2011

Я искал какое-либо решение, чтобы не использовать метод "SendKeys(CHR(13))", который я когда-либо использовал для отправки материалов в браузер. В этом случае я был рад видеть ваш

InvokeMember("click")

но не знаю, почему вы знаете, что вы должны написать "клик" там. Тем не мение Спасибо

2 голосов
/ 17 мая 2010

Это мое решение для чего-то похожего на эту проблему:

System.Windows.Forms.WebBrowser www;

void VerificarWebSites()
{
    www = new System.Windows.Forms.WebBrowser();
    www.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(www_DocumentCompleted_login);
    www.Navigate(new Uri("http://www.meusite.com.br"));
}

void www_DocumentCompleted_login(object sender, WebBrowserDocumentCompletedEventArgs e)
{            
    www.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(www_DocumentCompleted_login);
    www.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(www_DocumentCompleted_logado);

    www.Document.Forms[0].All["tbx_login"].SetAttribute("value", "Gostoso");
    www.Document.Forms[0].All["tbx_senha"].SetAttribute("value", "abcdef");
    www.Document.GetElementById("btn_login").Focus();
    www.Document.GetElementById("btn_login").InvokeMember("click");
}

void www_DocumentCompleted_logado(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    System.IO.StreamWriter sw = new StreamWriter("c:\\saida_teste.txt");
    sw.Write(www.DocumentText);
    sw.Close();
    MessageBox.Show(e.Url.AbsolutePath);
}
1 голос
/ 22 сентября 2012

Мне очень помогло http://stackoverflow.com. Я бродил по часам для автоматического входа и отправки из приложения vb на другой веб-сайт. Благодаря помощи этого сайта я могу выполнить свою задачу

Я должен авторизоваться на следующей странице php.

<HTML>

<body>
<div align="center"><img src="banner.png" height="80px" /></div>
<script type="text/javascript">
$(document).ready(function(){
            $("#login").validate();
            $("#login_container").css({'position': 'absolute', 
                'top' : (($(window).height()/2) - $("#login_container").height()/2)+'px'});
            $("#login_container").css({'left' : (($(window).width()/2) - $("#login_container").width()/2)+'px'});
        });
    </script>
    <div id="login_container">
        <form name="login" id="login" action="?q=login" method="post">
        <table>
          <tr><td>Username</td><td><input type="text" name="name" class="required"/></td></tr>
          <tr><td>Password</td><td><input type="password" name="password" class="required"/></td></tr>
          <tr><td></td><td><input type="submit" name="subimt" value="Login" /></td></tr>
        </table>
        </form>
    </div>
</body>
</html>

Для автоматического входа в систему и нажатия я написал следующий код VB.Net. В form1 я поместил кнопку и веб-браузер управления

Imports System.IO
Imports System.Windows.Forms



Public Class Form1


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        WebBrowser1.Navigate("http://xyz.com")



    End Sub

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        WebBrowser1.Document.GetElementById("name").SetAttribute("Value", "bharatlal")
        WebBrowser1.Document.GetElementById("password").SetAttribute("Value", "mahato")
        WebBrowser1.Document.GetElementById("subimt").Focus()
        WebBrowser1.Document.GetElementById("subimt").InvokeMember("click")
    End Sub
End Class
1 голос
/ 11 ноября 2008

Это, кажется, работает легко.


Public Function LoginAsTech(ByVal UserID As String, ByVal Pass As String) As Boolean
        Dim MyDoc As New mshtml.HTMLDocument
        Dim DocElements As mshtml.IHTMLElementCollection = Nothing
        Dim LoginForm As mshtml.HTMLFormElement = Nothing

        ASPComplete = 0
        WB.Navigate(VitecLoginURI)
        BrowserLoop()

        MyDoc = WB.Document.DomDocument
        DocElements = MyDoc.getElementsByTagName("input")
        For Each i As mshtml.IHTMLElement In DocElements

            Select Case i.name
                Case "seLogin$UserName"
                    i.value = UserID
                Case "seLogin$Password"
                    i.value = Pass
                Case Else
                    Exit Select
            End Select

            frmServiceCalls.txtOut.Text &= i.name & " : " & i.value & " : " & i.type & vbCrLf
        Next i

        'Old Method for Clicking submit
        'WB.Document.Forms("form1").InvokeMember("submit")


        'Better Method to click submit
        LoginForm = MyDoc.forms.item("form1")
        LoginForm.item("seLogin$LoginButton").click()
        ASPComplete = 0
        BrowserLoop()



        MyDoc= WB.Document.DomDocument
        DocElements = MyDoc.getElementsByTagName("input")
        For Each j As mshtml.IHTMLElement In DocElements
            frmServiceCalls.txtOut.Text &= j.name & " : " & j.value & " : " & j.type & vbCrLf

        Next j

        frmServiceCalls.txtOut.Text &= vbCrLf & vbCrLf & WB.Url.AbsoluteUri & vbCrLf
        Return 1
End Function
0 голосов
/ 08 октября 2015

Просто выполните два шага для нажатия любой кнопки с помощью кода.

  1. сфокусируйте кнопку или элемент, на который вы хотите нажать

    WebBrowser1.Document.GetElementById("place id here").Focus()

  2. имитировать щелчок мыши, используя следующий код

    SendKeys.Send("{ENTER}")

0 голосов
/ 19 октября 2014
  Private Sub bt_continue_Click(sender As Object, e As EventArgs) Handles bt_continue.Click
    wb_apple.Document.GetElementById("phoneNumber").Focus()
    wb_apple.Document.GetElementById("phoneNumber").InnerText = tb_phonenumber.Text
    wb_apple.Document.GetElementById("reservationCode").Focus()
    wb_apple.Document.GetElementById("reservationCode").InnerText = tb_regcode.Text
    'SendKeys.Send("{Tab}{Tab}{Tab}")
    'For Each Element As HtmlElement In wb_apple.Document.GetElementsByTagName("a")
    'If Element.OuterHtml.Contains("iReserve.sms.submitButtonLabel") Then
    'Element.InvokeMember("click")
    'Exit For
    ' End If
    'Next Element
    wb_apple.Document.GetElementById("smsPageForm").Focus()
    wb_apple.Document.GetElementById("smsPageForm").InvokeMember("submit")

End Sub
0 голосов
/ 17 октября 2008

Вы можете попытаться присвоить форме идентификатор, чтобы получить его, а затем вызвать form.submit () из вызова Javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...