Den bekommen
  • und Tags in htmlAgilityPack VB.NET

.net html-agility-pack vb.net

Frage

Ich weiß ehrlich nicht, wie ich das machen soll, und ich stecke sehr fest. Mein Code ist wahrscheinlich nicht wert, geteilt zu werden, aber ich werde mein Bestes versuchen, um die Frage zu stellen.

<div class="pricing-table">
    <div class="span4">
        <div class="plan">
            <h3>PPTP <span>$0</span></h3>
            <ul>
                <li><b>IP:</b> " (hidden)"</li>
                <li><b>Username:</b> " Guest"</li>
                <li><b>Password:</b> " (hidden)"</li>
                <li><b>Unlimited</b> " Bandwidth"</li>
                <li><b>Torrents</b> " Allowed"</li>
                <li><b>No</b> " Logging"</li>
            </ul>
        </div>
    </div>
</div>

(Dies ist der zweite)

<div class="span4">
    <div class="plan most-popular">
        <h3>Open<span>$0</span></h3>
        <div class="plan-ribbon-wrapper">
            <div class="plan-ribbon">
                Popular
            </div>
        </div>
        <ul>
            <li><b>Username:</b> user</li>
            <li><b>Password:</b> (hidden)</li>
            <li><b>TCP</b> 80, 443</li>
            <li><b>UDP</b> 53, 40000</li>
            <li><b>Unlimited</b> Bandwidth</li>
            <li><b>Torrents</b> Allowed</li>
            <li><b>No</b> Logging</li>
        </ul><a class="btn btn-large btn-primary" href=
        "%20(hidden)">Download</a>
    </div>
</div>
<ul>
    <li><b>Username:</b> user</li>
    <li><b>Password:</b> (hidden)</li>
    <li><b>TCP</b> 80, 443</li>
    <li><b>UDP</b> 53, 40000</li>
    <li><b>Unlimited</b> Bandwidth</li>
    <li><b>Torrents</b> Allowed</li>
    <li><b>No</b> Logging</li>
</ul>

Mit diesem HTML-Code möchte ich den Benutzernamen und das Passwort kopieren und in ein Etikett auf meinem Formular einfügen.

Hier ist mein Code

Imports HtmlAgilityPack
Public Class Form1
Dim Prev_Pass, Prev_User, Currt_Pass, Currt_User, Info
Dim counter As Integer
Dim web As New HtmlWeb()
Dim htmldoc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument
Dim htmlnodes As HtmlAgilityPack.HtmlNodeCollection = Nothing
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    htmldoc = web.Load("website")
    htmlnodes = htmldoc.DocumentNode.SelectNodes("//div[@class=""pricing-table""]")
    For Each node As HtmlAgilityPack.HtmlNode In htmlnodes
        Dim releaseNode = node.SelectSingleNode("//div[@class=""plan most-popular""]")
            Info = releaseNode.SelectSingleNode("//ul/li/b[contains(text(), 'Username: ')]").InnerText
    Next
    Label3.Text = Info
End Sub
End Class

Akzeptierte Antwort

Beachten Sie die folgenden Anmerkungen:

<li>
    <b>Username:</b> <!-- Use XPath to obtain this element. -->
    " user" <!-- This is the next sibling. -->
</li>

Mit diesen Anmerkungen im Hinterkopf:

Sie können das <b> -Element wie bereits geschehen mit XPath NextSibling und dann wie NextSibling mit der NextSibling Eigenschaft auf den Benutzernamen oder das Kennwort NextSibling :

Dim username = 
    htmldoc.DocumentNode.SelectSingleNode(
        "//ul/li/b[text()='Username:']").NextSibling.InnerHtml

Dim password =
    htmldoc.DocumentNode.SelectSingleNode(
        "//ul/li/b[text()='Password:']").NextSibling.InnerHtml

Wenn Sie auf das zweite Vorkommen des Elements anstatt auf das erste Element zugreifen möchten, sollten Sie entweder einen spezifischeren XPath verwenden oder SelectNodes und das Element, das sich im zweiten Index befindet, mit einem Indexer wie diesem erhalten:

Dim username =
    htmldoc.DocumentNode.SelectNodes(
        "//ul/li/b[text()='Username:']")(1).NextSibling.InnerHtml



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum