Jak zalogować się na forum, jeśli "username" to "name", nie "ID"?

0
WebBrowser1.Document.GetElementById("username").SetAttribute("value", TextBox1.Text)

to by logowało przez rozpoznanie ID....
ale jeżeli na moim forum , username to nie jest id tylko name? to jak wtedy można zalogować się na to forum?

<input class="post" type="text" value="" maxlength="40" size="25" name="username"></input>
0

jaki to jest silnik przeglądarki ten WebBrowser1?

Kod wygląda jak funkcje z javascriptu, ale nie wiem czy wszystkie są dostępne. masz tam WebBrowser1.Document.QuerySelector?

0

niestety NIE MA tego..

WebBrowser1.Document.QuerySelector

próbowałem stworzyć na wlasną rękę:

WebBrowser1.Document.SelectElementByName

i napisałem coś takiego:

Public NotInheritable Class Extensions
Private Sub New()
End Sub

<System.Runtime.CompilerServices.Extension> _
Public Shared Function SelectElementByName(doc As HtmlDocument, name As String, Optional tagName As String = "") As HtmlElement
Dim elements As IEnumerable(Of HtmlElement) = doc.All.Cast(Of HtmlElement)()

If Not String.IsNullOrEmpty(tagName) Then
elements = doc.GetElementsByTagName(tagName).Cast(Of HtmlElement)()
End If


Dim el As HtmlElement = elements.Where(Function(e) Not [String].IsNullOrEmpty(e.GetAttribute("name")) AndAlso e.GetAttribute("name") = name).FirstOrDefault()
If el = Nothing Then
Throw New Exception("Nie mogłem znaleść elementu!")
End If
Return el

End Function
End Class

i wywala mi:

Extension methods can be defined only in modules.

gdzie mam to zdefiniować ?

0

Jeżeli to jest WebBrowser z .NET-a (a na to wskazuje tag "visual") to nie ma QuerySelector, ale jest GetElementsByTagName.

Trzeba zrobić coś w stylu:

foreach (HtmlElement i in webBrowser1.Document.GetElementsByTagName("input"))
{
    if (i.Name == "username")
    {
        i.SetAttribute("value", "wartość");
        break;
    }
}
0

rozwiazalem to w ten sposób:

            For i As Integer = 0 To WebBrowser1.Document.GetElementsByTagName("input").Count - 1
                If WebBrowser1.Document.GetElementsByTagName("input")(i).GetAttribute("name") = "usrname" Then
                    WebBrowser1.Document.GetElementsByTagName("input")(i).SetAttribute("value", TextBox1.Text)
                End If
            Next

A może przy okazji podpowiecie jak zdefiniować "tekst" by ten błąd nie wywalał ?

sssssssssss.png

1

Ten błąd to błąd po stronie strony internetowej, którą odwiedzasz. Odwołują się do zmiennej, która nie istnieje.

Możesz zrobić coś takiego, aby się to okienko po prostu nie pokazywało:

webBrowser.ScriptErrorsSuppressed = true;

A co do tego wyżej - spróbuj raczej pętli For Each (http://msdn.microsoft.com/en-us/library/5ebk1751.aspx), będzie nieco bardziej optymalnie - obecnie wykonujesz wielokrotne wyszukiwanie w drzewie elementu.

Prawdopodobnie coś postaci:

For Each item As HtmlElement In WebBrowser1.Document.GetElementsByTagName("input")
    If item.Name = "username" Then    
        item.SetAttribute("value", TextBox1.Text)
        Exit For
    End If
Next
0

ok dziekuje za rady :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1