取得する
  • htmlAgilityPack VB.NETのタグ

.net html-agility-pack vb.net

質問

私は正直にこれを行う方法を知らない、と私は非常に立ち往生しています。私のコードはおそらく分かち合う価値がありませんが、私はその質問に挑戦します。

<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>

(これは第2のものです)

<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>

このHTMLコードを使用して、私はユーザー名とパスワードをコピーして、私のフォーム上のラベルに入れたいと思っています。

ここに私のコードです

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

受け入れられた回答

次のアノテーションを考えてみましょう。

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

これらのアノテーションを念頭に置いてください:

既に行ったようにXPathを使用して<b>要素を取得し、 NextSiblingように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

最初の要素ではなく2番目の要素にアクセスする場合は、より具体的なXPathを使用するか、 SelectNodesを使用して、次のようなインデクサーを使用して2番目の要素にある要素を取得する必要があります。

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow