Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Работа с оком ввода пароля


Автор: xSD 28.4.2010, 21:28
diadiavova,  Подскажи пожалуйста как можно сделать так. При вводе не верного пароля программа выдовала бы ошибку а при вводе правельного открывала 2 форму? и если пароль правельный нужно его сохранить.

Вот код сайта
Код

<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>
    UTM:
    Вход в UTM</TITLE>
<LINK rel="stylesheet" type="text/css" href="/utm.css">
<script language="JavaScript" type="text/javascript" src="/utm.js"></SCRIPT>
</HEAD>
<BODY bgcolor="#FFFFFF" text="#000000" link="#003BA9" vlink="#E7651A" marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0"><TABLE width="100%" height="100%" cellspacing="0" cellpadding="0" border="0"><TR>
<TD width="20%" class="menu-area">
<DIV class="mainmenu-act">Вход в UTM</DIV>
<BR><DIV ALIGN="CENTER"><a href="http://www.netup.ru" target="_new"><img src="https://secure.netup.biz/utm.gif" border="0"></a></DIV>
</TD>
<TD width="80%" class="work-area">
<TABLE width="100%" cellspacing="0" cellpadding="0" border="0" bgcolor="#E0EED3"><TR><TD class="submenu-area"></TD></TR></TABLE>
<BR>Вход в UTM<FORM name="login" accept-charset="UTF-8" action="/cgi-bin/utm5/aaa5" target="" method="post"><DIV class="form-tab"><TABLE cellspacing="5" cellpadding="3" border="0">
<TR>
<TD class="form-field" align="right">Логин</TD>
<TD class="form-field" align="left"><INPUT type="text" class="form-field" size="40" name="login" value=""></TD>
</TR>
<TR>
<TD class="form-field" align="right">Пароль</TD>
<TD class="form-field" align="left"><INPUT type="password" class="form-field" size="40" name="password" value=""></TD>
</TR>
<INPUT type="hidden" name="cmd" value="login"><TR>
<TD></TD>
<TD><INPUT type="submit" class="form-button" value="OK"></TD>
</TR>
</TABLE></DIV></FORM>
</TD>
</TR></TABLE></BODY>
</HTML>


Вот кож формы
Код

Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.WebBrowser1.Navigate("https://www.kovrovinter.net/cgi-bin/utm5/aaa5")
        Dim lf As New Form1
    End Sub

    Private Sub login_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

    Private Sub password_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles password.TextChanged
        WebBrowser1.Document.Forms(0).DomElement.password.value = password.Text
    End Sub

    Private Sub login_TextChanged1(ByVal sender As Object, ByVal e As System.EventArgs) Handles login.TextChanged
        WebBrowser1.Document.Forms(0).DomElement.login.value = login.Text
    End Sub
End Class


При том кнопка не нажимаеться не знаю что делать :(
Можно примерчик если что, Я просто новичёк. Спасибо.

Автор: diadiavova 28.4.2010, 21:38
xSD, когда задаёшь вопрос, главное - это описание проблемы, а код должен прояснять ситуацию. Из твоего объяснения я не понял ровным счётом ничего, зато ты выложил кучу кода. По всей видимости его надо изучить, чтобы понять в чём твоя проблема.
Если ты пишешь винформ приложение, то при чём тут хтмл-код? smile 
И ещё: для каждого вопроса должна создаваться отдельная тема.
 а так же не забывай о том, что это форум, а не место где можно спросить дядю Вову smile , тут и другие участники есть.

Автор: xSD 28.4.2010, 22:02
Извини, проблема такова, я сделал так как ты описывал в теме Webbrowser. Но у меня не получилось 2 вещи:
Я разместил на форму 2 текстовых поля "login" и "password" и кнопку "cmd" я делаю программу на подобее автологин, вводя текст в текстовое поле "login" в браузере в этом же текстовом поле тоже вводится тот текст, также и с текстовым полем "password" но при нажатии на кнопку он не рягирует на код, что делать?
Код

Private Sub cmd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd.Click
        WebBrowser1.Document.Forms(0).DomElement.cmd.click()
    End Sub

Что может быть не так? вот код HTML страницы с текстовыми полями и с кнопкой
Код

</TR>
<INPUT type="hidden" name="cmd" value="login"><TR>
<TD></TD>
<TD><INPUT type="submit" class="form-button" value="OK"></TD>
</TR>

Ну полный код программы есть повыше.... smile 
И как можно сделать так что бы при нажатии на кнопку "cmd"  если пароль был введён не верно вылезла ошибка, а если пароль был введён правельно открылась 2 форма а пароль автоматически сохранился?
Думаю так описал попонятнее... Если можно простенький примерчи, заранее большое спасибо diadiavova. =)

Автор: diadiavova 28.4.2010, 22:19
А почему напрямую не ввести данные в хтмл-документ? Зачем нужно это промежуточное звено в виде текстбоксов и кнопки на форме?

Добавлено через 4 минуты и 47 секунд
Вообще-то у тебя ничего и не должно происходить, потому что cmd - не кнопка в твоей форме, а скрытое поле, кнопка - это как раз следующий инпут, но она не имеет имени, так что до неё докопаться будет труднее.

Автор: xSD 28.4.2010, 22:24
Ну хотелось бы сделать так... 

Автор: diadiavova 28.4.2010, 22:30
Попробуй такой код, писал прямо в окно браузера и не проверял, так что если что подправь что надо, думаю: идея понятна.
Код

Dim inputs = WebBrowser1.Document.Forms(0).GetElementsByTagName("INPUT")
inputs(inputs.Count - 1).DomElement.click()

Автор: xSD 28.4.2010, 22:31
Блин, как же всё сложно.... ну навиди меня хотябы на истинный путь буду пытаться... ))

Добавлено через 56 секунд
Спасибо большое.... 

Автор: diadiavova 28.4.2010, 22:33
Цитата(xSD @  28.4.2010,  23:31 Найти цитируемый пост)
Блин, как же всё сложно.... ну навиди меня хотябы на истинный путь буду пытаться... ))

Ты код попробовал?

Автор: xSD 28.4.2010, 22:33
Работает, но как сделать так, что бы выдавал ошибку при вводе не правельного пароля, но если пароль правельный открывал 2 форму?

Автор: diadiavova 28.4.2010, 22:36
А как ты сам определяешь правильный пароль или нет?

Автор: xSD 28.4.2010, 22:39
http://ipicture.ru/Gallery/Viewfull/145184.html
Но окно браузера я патом спрячу за форму, мне просто нужен данный интерфейс. smile

Автор: diadiavova 28.4.2010, 22:44
Цитата(xSD @  28.4.2010,  23:39 Найти цитируемый пост)
Но окно браузера я патом спрячу за форму, мне просто нужен данный интерфейс

Ты в принципе не правильно подходишь к вопросу. Тебе ни к чему при вводе каждого символа передавать его в браузер. Надо сделать так: пользователь вводит логин и пароль(полностью), нажимает кнопку, и только после этого данные вводятся в поля документа и отправляются на сервер. Дальше ждёшь ответа и в зависимости от того, какой он действуешь. Хотя всё это можно и без браузера сделать smile 

Автор: xSD 28.4.2010, 22:46
Блин можно лёгенький примерчик пжл.... :(

Автор: diadiavova 28.4.2010, 22:55
Цитата(xSD @  28.4.2010,  23:46 Найти цитируемый пост)
Блин можно лёгенький примерчик пжл.... :( 

Да собственно весь код у тебя есть, только его перегруппировать малость надо
Код

Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.WebBrowser1.Navigate("https://www.kovrovinter.net/cgi-bin/utm5/aaa5")
        Dim lf As New Form1
    End Sub


    Private Sub cmd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd.Click
        WebBrowser1.Document.Forms(0).DomElement.login.value = login.Text
        WebBrowser1.Document.Forms(0).DomElement.password.value = password.Text
        Dim inputs = WebBrowser1.Document.Forms(0).GetElementsByTagName("INPUT")
        inputs(inputs.Count - 1).DomElement.click()
    End Sub
End Class
Как видишь копипаста того, что есть. Что касается ответа, то он у тебя в браузере появится, надо только отловить событие(по-моему Navigated), то есть дождаться пока придёт ответ с сервера, и инфу о том правильные введены данные или нет получить оттуда. Пример написать непросто, потомучто придётся искать реальный сайт с реальными данными итд.

А о том, как имитировать работу браузера программно(залогиниться итд) читай здесь
http://www.rsdn.ru/article/inet/httpweb.xml

Автор: xSD 28.4.2010, 22:57
Спасбо большое выручил))))

Добавлено через 5 минут и 46 секунд
smile а как сохранить данные, что бы при следующем зупуске программы уже было введено в поле логин и пароль те данные которые я ввёл в 1 раз????

Автор: xXxSataNxXx 6.5.2010, 10:24
Вообще то, когда знаешь имя или ID поля ввода, то можно сделать так:
Код

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Inputs as HtmlElementCollection=WebBrowser1.Document.GetElementsByTagName("input")
Inputs.Item("login").SetAttribute("value", login.text)
Inputs.Item("password").SetAttribute("value", password.text)
Inputs.Item(Inputs.Count-1).InvokeMember("click")
End Sub

Хотя это зависит от человека, мне, допустим, не очень нравится работать с DomElement...

Автор: diadiavova 6.5.2010, 10:30
Цитата(xXxSataNxXx @  6.5.2010,  11:24 Найти цитируемый пост)
Вообще то, когда знаешь имя или ID поля ввода

ID не всегда известно(установлено), а имя не всегда уникально.
Цитата(xXxSataNxXx @  6.5.2010,  11:24 Найти цитируемый пост)
мне, допустим, не очень нравится работать с DomElement

Доступ полному набору возможностей можно получить только так. Если задача позволяет ограничиться тем, что предоставляют дотнетовские оболочки для дом-объектов, то действительно, лучше ими и ограничиться.

Автор: xXxSataNxXx 6.5.2010, 11:04
Хех... Ну, я думаю, что вопрос был для определённого сайта, а следовательно и Name известны... Там же код страницы написан...  smile 

Автор: diadiavova 6.5.2010, 11:23
Цитата(xXxSataNxXx @  6.5.2010,  12:04 Найти цитируемый пост)
Хех... Ну, я думаю, что вопрос был для определённого сайта, а следовательно и Name известны

Атрибут name не обязан быть уникальным в пределах документа, так что если он даже известен - не факт, что в документе нет элемента с таким же значением этого атрибута.
Цитата(xXxSataNxXx @  6.5.2010,  12:04 Найти цитируемый пост)
Там же код страницы написан...

Для примера инога приводят сокращённую или упрощённую версию страницы smile 

Автор: xXxSataNxXx 6.5.2010, 11:38
Хорошо, тогда так:
Код

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Inputs as HtmlElementCollection = WebBrowser1.Document.Forms(_Номер_Формы__Или_Имя__Или_ID_).GetElementsByTagName("input")
Inputs.Item("login").SetAttribute("value", login.text)
Inputs.Item("password").SetAttribute("value", password.text)
Inputs.Item(Inputs.Count-1).InvokeMember("click")
End Sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)