2012-06-19 2 views
1

Я должен нажать кнопку HTML программно, которая находится на третьей странице веб-сайта. Кнопка не имеет идентификатора. Он имеет только тип и значение имени. HTML код кнопки приведен нижеПрограммный щелчок по кнопке html на vb.net

<FORM NAME='form1' METHOD='post' action='/dflogin.php'> 
    <INPUT TYPE='hidden' NAME='txtId' value='E712050-15'> 
    <INPUT TYPE='hidden' NAME='txtassId' value='1'><INPUT TYPE='hidden' NAME='txtPsw' value='HH29'> 
    <INPUT TYPE='hidden' NAME='txtLog' value='0'><h6 align='right'> 
    <INPUT TYPE='SUBMIT' NAME='btnSub' value='Next' style='background-color:#009900; color:#fff;'></h6> 
</FORM> 

Я использую следующий код кликать

For Each webpageelement As HtmlElement In allButtons 

     If webpageelement.GetAttribute("value") = "Start" Then 

      webpageelement.InvokeMember("click") 

     End If 

Next 

Но я не могу иметь возможность щелкнуть по нему. Я использую платформу vb.net 2008. Может ли кто-нибудь сказать мне решение щелкнуть его?

+0

Вы проводите автоматизацию тестирования? Думали ли вы использовать фреймворк, такой как Selenium, для автоматизации ваших тестовых случаев? –

+0

Является ли это asp.net? Где вы помещаете код в этот образец? – JohnFx

+0

да я хочу автоматизировать сайт –

ответ

0

Похоже, вы пытаетесь выполнить действие на стороне клиента - нажмите кнопку при работе на сервере (код VB). Это не будет работать.

Итак, используйте Javascript document.form1.submit() или позвоните в подраздел VB, который подключен к кнопке btnsub.click (или как вы его назвали).

+0

Что значит u? –

+0

пытаюсь выяснить, является ли это vbscript или код на стороне сервера. Просто предлагая возможное решение для обоих. Но NikoMman уже указывает вам в правильном направлении. удачи. – ZorbaSan

0
Dim Elems As HtmlElementCollection 
Dim WebOC As WebBrowser = WebBrowser1 
Elems = WebOC.Document.GetElementsByTagName("input") 
For Each elem As HtmlElement In Elems 
    elem.InvokeMember("click") 
Next 
+0

привет друг. код, который я сказал мне, не работает –

1

Попробуйте вызвать «Отправить» на форме, а не щелкнуть мышью по «Ввод».

EDIT: Oops, HTMLElementCollection не реализует общий IEnumerable. Попробуйте вместо этого:

Dim l_forms = WebBrowser1.Document.GetElementsByTagName("form") 
If l_forms.Count > 0 Then 
    l_forms.Item(0).InvokeMember("submit") 
End If 
+0

Что означает u для Firstordefault() ??? –

+0

Можно ли написать полный код? –

+0

@ChauhdryKing - отредактированный пост. – JDB

0

Решение:

WebBrowser1.Navigate("UrlHere!") 

'wait till the page is laoded 

Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete 
Application.DoEvents() 
Loop 

WebBrowser1.Document.Body.InnerHtml = Replace(WebBrowser1.Document.Body.InnerHtml, "NAME='btnSub'", "NAME='btnSub' id='btnSub'") 'insert id into youre button 
WebBrowser1.Document.GetElementById("btnSub").InvokeMember("click") 'click on btnSub 

;)

+0

Thank u. Есть ли другое решение? –

+1

Это решение не работает –

1

я провел некоторое время, пытаясь найти ответ на этот вопрос. Я никогда не понимал, что вы можете вызвать клик, используя javascript. После того, как я прочитал, что решение становится очень просто:

Public Function clickbyid(ByVal id) 

    If TheBrowser.Document.GetElementById(id) IsNot Nothing Then 
     Dim Headers As String = "" 'insert headers if you want to 

     TheBrowser.Navigate("javascript:document.getElementById('" & id & "').click();", "_self", Nothing, Headers) 

     'This keeps the function active until the browser has finished loading 
     Do While TheBrowser.ReadyState <> WebBrowserReadyState.Complete 
      Application.DoEvents() 
     Loop 
     Return 1 
    Else 

     MessageBox.Show("Could not find link by id" & id) 
     Return Nothing 
    End If 

End Function 

Вы, возможно, придется изменить «TheBrowser» на «WebBrowser1». Если вы не хотите возвращать результат, просто измените его на общедоступный и удалите операторы return.

Если HTMLElement не имеет идентификатор затем использовать следующие функции, чтобы добавить один

Public Function clickbyelement(ByVal theButton As HtmlElement) 

    Try 

     'Generate a unique id to identify the element 
     Dim randomID = "vbAdded" & GetRandom(10000, 100000).ToString 
     'check to make sure the ID does not already exist 
     While TheBrowser.Document.GetElementById(randomID) IsNot Nothing 
      randomID = "vbAdded" & GetRandom(10000, 100000).ToString 
     End While 
     'add the ID to the element 
     theButton.SetAttribute("id", randomID) 
     'click 
     clickbyid(randomID) 
     Return True 

    Catch ex As Exception 

     Return False 

    End Try 

End Function 

Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer 
    ' by making Generator static, we preserve the same instance ' 
    ' (i.e., do not create new instances with the same seed over and over) ' 
    ' between calls ' 
    Static Generator As System.Random = New System.Random() 
    Return Generator.Next(Min, Max) 
End Function 

Благодаря Dan Tao для случайного числа: https://stackoverflow.com/a/2677819/381273

Протестировано и работает!

Смежные вопросы